UNPKG

apitally

Version:

Simple API monitoring & analytics for REST APIs built with Express, Fastify, NestJS, AdonisJS, Hono, H3, Elysia, Hapi, and Koa.

80 lines 2 kB
var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); function captureResponse(response, { captureBody = false, maxBodySize = 0, readTimeout = 5e3 } = {}) { if (!response.body) { return [ response, Promise.resolve({ size: 0, completed: true }) ]; } let size = 0; let bodySizeLimitExceeded = false; let readStarted = false; const chunks = []; const { readable, writable } = new TransformStream({ transform: /* @__PURE__ */ __name((chunk, controller) => { readStarted = true; size += chunk.byteLength; if (captureBody && !bodySizeLimitExceeded) { if (size > maxBodySize) { bodySizeLimitExceeded = true; chunks.length = 0; } else { chunks.push(chunk); } } controller.enqueue(chunk); }, "transform") }); const pipePromise = response.body.pipeTo(writable).then(() => ({ body: chunks.length > 0 ? Buffer.concat(chunks) : void 0, size, completed: true })).catch((error) => ({ size, completed: false, error })); const timeoutPromise = new Promise((resolve) => setTimeout(() => { if (!readStarted) { resolve({ size: 0, completed: false }); } }, readTimeout)); const racePromise = Promise.race([ pipePromise, timeoutPromise ]); const newResponse = new Response(readable, { status: response.status, statusText: response.statusText, headers: response.headers }); void newResponse.headers; return [ newResponse, racePromise ]; } __name(captureResponse, "captureResponse"); function getResponseJson(body) { if (body.length === 0) { return null; } try { return JSON.parse(body.toString()); } catch (error) { return null; } } __name(getResponseJson, "getResponseJson"); export { captureResponse, getResponseJson }; //# sourceMappingURL=response.js.map