import type { IncomingMessage } from "node:http"; const MAX_BODY = 1_048_576; export const readJsonBody = async (req: IncomingMessage): Promise => { const chunks: Buffer[] = []; let total = 0; for await (const chunk of req) { const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk); total += buf.length; if (total > MAX_BODY) { throw new Error("Request body too large"); } chunks.push(buf); } const raw = Buffer.concat(chunks).toString("utf8").trim(); if (raw.length === 0) { return {}; } try { return JSON.parse(raw) as unknown; } catch (cause) { throw new Error("Invalid JSON body", { cause }); } };