MCPcopy Create free account
hub / github.com/EvoMap/evolver / parseBody

Function parseBody

src/proxy/server/http.js:30–70  ·  view source on GitHub ↗
(req, opts)

Source from the content-addressed store, hash-verified

28}
29
30function parseBody(req, opts) {
31 const maxBytes = (opts && Number.isFinite(opts.maxBytes) && opts.maxBytes > 0)
32 ? opts.maxBytes
33 : resolveMaxBodyBytes();
34 return new Promise((resolve, reject) => {
35 const declared = Number(req.headers['content-length']);
36 if (Number.isFinite(declared) && declared > maxBytes) {
37 const err = new Error('Request body too large');
38 err.statusCode = 413;
39 return reject(err);
40 }
41 const chunks = [];
42 let received = 0;
43 let settled = false;
44 const fail = (err) => {
45 if (settled) return;
46 settled = true;
47 try { req.destroy(); } catch { /* ignore */ }
48 reject(err);
49 };
50 req.on('data', (c) => {
51 if (settled) return;
52 received += c.length;
53 if (received > maxBytes) {
54 const err = new Error('Request body too large');
55 err.statusCode = 413;
56 return fail(err);
57 }
58 chunks.push(c);
59 });
60 req.on('end', () => {
61 if (settled) return;
62 settled = true;
63 const raw = Buffer.concat(chunks).toString();
64 if (!raw) return resolve({});
65 try { resolve(JSON.parse(raw)); }
66 catch (e) { reject(new Error('Invalid JSON body')); }
67 });
68 req.on('error', fail);
69 });
70}
71
72function sendJson(res, status, body, extraHeaders = {}) {
73 const payload = JSON.stringify(body);

Callers 1

_handleRequestMethod · 0.85

Calls 3

resolveMaxBodyBytesFunction · 0.85
failFunction · 0.85
parseMethod · 0.80

Tested by

no test coverage detected