import type { NextRequest } from "next/server"; import { CONTENT_LIMITS } from "@/lib/validation/contentSchemas"; export class RequestTooLargeError extends Error {} export async function readLimitedJson( request: NextRequest, maximumBytes = CONTENT_LIMITS.requestBytes ): Promise { const declaredLength = Number(request.headers.get("content-length")); if (Number.isFinite(declaredLength) && declaredLength > maximumBytes) { throw new RequestTooLargeError(`Request body must not exceed ${maximumBytes} bytes`); } const body = await request.text(); if (new TextEncoder().encode(body).byteLength > maximumBytes) { throw new RequestTooLargeError(`Request body must not exceed ${maximumBytes} bytes`); } try { return JSON.parse(body) as unknown; } catch { return null; } }