import type { z } from 'zod'; import { eq } from 'drizzle-orm'; import { db } from '@/db'; import { leads } from '@/db/schema'; import { autorizado, jsonResponse } from '@/lib/api/funnel-auth'; // Valida una petición de los EPs del bot: auth Bearer + JSON + zod + que el lead exista. // Devuelve { error } con la Response lista, o { leadId, body } ya validado. export async function validarBotRequest( req: Request, params: Promise<{ id: string }>, schema: S, ): Promise<{ error: Response } | { leadId: string; body: z.infer }> { if (!autorizado(req)) return { error: jsonResponse({ ok: false, error: 'No autorizado.' }, 401) }; const { id } = await params; let raw: unknown; try { raw = await req.json(); } catch { return { error: jsonResponse({ ok: false, error: 'JSON inválido.' }, 422) }; } const parsed = schema.safeParse(raw); if (!parsed.success) { return { error: jsonResponse({ ok: false, error: parsed.error.issues[0]?.message ?? 'Datos inválidos.' }, 422), }; } const [lead] = await db.select({ id: leads.id }).from(leads).where(eq(leads.id, id)).limit(1); if (!lead) return { error: jsonResponse({ ok: false, error: 'Lead no encontrado.' }, 404) }; return { leadId: id, body: parsed.data }; }