SPB Git forge

spb/toveli

Public
14commits 1branches 0releases
1.1 MBsize
maindefault branch
2 h agolast push
TypeScript 50.6% JavaScript 46.1% SQL 2.1% Shell 0.6% CSS 0.5%
1.1 KB · 14 lines typescript
Raw Blame History
1import { NextResponse } from "next/server";2import { ZodError, type ZodType } from "zod";3import { AuthError } from "@/lib/auth/session";4/** Erreurs structurées et uniformes pour l'API. */5export function apiError(status: number, code: string, message: string, extra?: Record<string, unknown>) { return NextResponse.json({ error: { code, message, ...extra } }, { status }); }6export function handle(e: unknown): NextResponse {7  if (e instanceof AuthError) return apiError(e.status, e.status === 401 ? "unauthenticated" : "forbidden", e.message);8  if (e instanceof ZodError) return apiError(400, "invalid_request", "Données invalides", { issues: e.issues.map((i) => ({ path: i.path.join("."), message: i.message })) });9  if (e instanceof Error && e.message === "DATABASE_URL manquante") return apiError(503, "unavailable", "Service des comptes indisponible");10  console.error("[api]", e);11  return apiError(500, "internal", "Erreur interne");12}13export async function parseBody<T>(req: Request, schema: ZodType<T>): Promise<T> { const j = await req.json().catch(() => null); return schema.parse(j); }14