mirror of
https://github.com/melgarafael/DeskcommCRM.git
synced 2026-10-02 01:28:34 +08:00
1.2 KiB
1.2 KiB
lib/api/
Helpers e convenções compartilhadas por toda rota /api/v1/*.
wrappers.ts—ok(data, opts)/fail(code, message, status, opts)/noContent()+ tiposApiSuccess<T>/ApiErrorerrors.ts—ApiErrorCodes(constante canônica de códigos)idempotency.ts—comIdempotencia: reserva antes do efeito, replay (mesma chave e corpo devolvem a resposta gravada) e conflito (mesma chave com corpo diferente, para o chamador responder 409). Persiste emidempotency_keys, com recibo de 24h e reserva de 60s.
Exemplo
import { ok, fail } from "@/lib/api/wrappers";
import { ApiErrorCodes } from "@/lib/api/errors";
export async function GET(req: Request) {
const data = await fetchSomething();
if (!data) return fail(ApiErrorCodes.not_found, "Lead não encontrado", 404);
return ok(data, { meta: { cursor: nextCursor, has_more: true } });
}
A adicionar (próximas specs)
auth.ts— extrai user / tenant da request (cookie OU bearer); valida MFA; retornaAuthContextrate-limit.ts— sliding window via Upstash; injeta headersX-RateLimit-*pagination.ts— encode/decode de cursor opaco base64 + HMACaudit.ts— fire-and-forget write emapi_audit_logcors.ts— allowlist por tenant