80a52911e3
- Corregido el problema donde la función devolvía siempre 400; ahora se lanzan HttpError con status adecuados (405, 401, 415, 422, 404, 409, 502, 500) según el caso. - Refactor: usar sendError/sendSuccess y HttpError desde _shared/utils.ts para respuestas consistentes y logging seguro. - Validación: agrupar errores de parse/validación en un único mensaje numerado (cada error en nueva línea). - OpenAI: manejo explícito de fallos (MissingEnv, JSON inválido, salida estructurada ausente) y mapeo a status apropiados. - Supabase: distinguir errores 404/409/500 en consultas e inserts; incluir detalles en internalDetails para diagnóstico server-side. - Eliminada dependencia de invocación HTTP a ai-structured; usar servicio compartido directo. - Ajustes menores en mensajes y configuración (deno imports/deno.json) y tests marcados como ignorados donde corresponde.
50 lines
1.1 KiB
TypeScript
50 lines
1.1 KiB
TypeScript
import { corsHeaders } from "./cors.ts";
|
|
|
|
// --- CLASE DE ERROR ---
|
|
export class HttpError extends Error {
|
|
public readonly status: number;
|
|
public readonly code: string;
|
|
public readonly internalDetails: unknown;
|
|
|
|
constructor(
|
|
status: number,
|
|
message: string,
|
|
code = "API_ERROR",
|
|
internalDetails?: unknown,
|
|
) {
|
|
super(message);
|
|
this.name = "HttpError";
|
|
this.status = status;
|
|
this.code = code;
|
|
this.internalDetails = internalDetails;
|
|
}
|
|
}
|
|
|
|
// --- HELPER DE ÉXITO ---
|
|
export function sendSuccess<T>(data: T, status = 200): Response {
|
|
return new Response(
|
|
JSON.stringify(data),
|
|
{
|
|
status,
|
|
headers: { ...corsHeaders, "Content-Type": "application/json" },
|
|
},
|
|
);
|
|
}
|
|
|
|
// --- HELPER DE ERROR ---
|
|
export function sendError(
|
|
status: number,
|
|
message: string,
|
|
code: string,
|
|
): Response {
|
|
return new Response(
|
|
JSON.stringify({
|
|
error: { message, code },
|
|
}),
|
|
{
|
|
status,
|
|
headers: { ...corsHeaders, "Content-Type": "application/json" },
|
|
},
|
|
);
|
|
}
|