UNPKG

apitally

Version:

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

104 lines 3.03 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var response_exports = {}; __export(response_exports, { captureResponse: () => captureResponse, getResponseJson: () => getResponseJson }); module.exports = __toCommonJS(response_exports); 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"); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { captureResponse, getResponseJson }); //# sourceMappingURL=response.cjs.map