← Files BranchaARCHIVED FILE
skills/brancha/app/src/server/http/body.ts
1.01 KB · Oct 3, 2026 · 06:30 UTC
import type { IncomingMessage } from 'node:http';
import { HttpError } from './errors.js';
const MAX_BODY_BYTES = 10 * 1024 * 1024;
export function readJsonBody(req: IncomingMessage): Promise<Record<string, unknown>> {
return new Promise((resolve, reject) => {
let data = '';
let size = 0;
req.on('data', (chunk: Buffer) => {
size += chunk.length;
if (size > MAX_BODY_BYTES) {
reject(new HttpError(413, 'request body too large', 'BODY_TOO_LARGE'));
req.destroy();
return;
}
data += chunk;
});
req.on('end', () => {
try {
const value = data ? JSON.parse(data) as unknown : {};
if (!value || typeof value !== 'object' || Array.isArray(value)) {
reject(new HttpError(400, 'JSON object required', 'INVALID_BODY'));
return;
}
resolve(value as Record<string, unknown>);
} catch {
reject(new HttpError(400, 'invalid JSON', 'INVALID_JSON'));
}
});
req.on('error', reject);
});
}
SHA-256: 35c5aabcb4111e91d8bf33f2cdcf29dd9c987f8a4503d9cf1c81256b8e67b1c8