import { randomUUID } from "crypto"; export type ApiErrorType = "invalid_request" | "not_found" | "conflict" | "server_error"; interface ApiErrorPayload { status: number; message: string; type?: ApiErrorType; details?: unknown; } export function createErrorResponse(payload: ApiErrorPayload): Response { const requestId = randomUUID(); const resolvedType = payload.type || (payload.status >= 500 ? "server_error" : payload.status === 404 ? "not_found" : payload.status === 409 ? "conflict" : "invalid_request"); return Response.json( { error: { message: payload.message, type: resolvedType, details: payload.details, }, requestId, }, { status: payload.status } ); } export function createErrorResponseFromUnknown( error: unknown, fallbackMessage = "Unexpected server error" ): Response { const anyError = error as { message?: string; status?: number; type?: ApiErrorType; details?: unknown; }; const status = Number(anyError?.status) || 500; return createErrorResponse({ status, message: typeof anyError?.message === "string" ? anyError.message : fallbackMessage, type: anyError?.type, details: anyError?.details, }); }