{"version":3,"sources":["../../src/utils/capped-buffer.ts"],"sourcesContent":["/**\n * Accumulates Buffer chunks up to a byte cap, silently dropping (or\n * partially truncating) anything beyond it instead of growing unbounded.\n * Shared by global-monitor.ts and RequestMonitoringService.ts to cap raw\n * response buffering independent of decompression (see issue #112).\n */\nexport class CappedBuffer {\n  private readonly chunks: Buffer[] = [];\n  private bytes = 0;\n  private truncated = false;\n\n  constructor(private readonly maxBytes: number, private readonly onTruncate?: () => void) {}\n\n  push(chunk: Buffer): void {\n    const remaining = this.maxBytes - this.bytes;\n    if (remaining <= 0) {\n      this.markTruncated();\n      return;\n    }\n    if (chunk.length > remaining) {\n      this.chunks.push(chunk.subarray(0, remaining));\n      this.bytes += remaining;\n      this.markTruncated();\n    } else {\n      this.chunks.push(chunk);\n      this.bytes += chunk.length;\n    }\n  }\n\n  concat(): Buffer {\n    return Buffer.concat(this.chunks);\n  }\n\n  private markTruncated(): void {\n    if (this.truncated) { return; }\n    this.truncated = true;\n    this.onTruncate?.();\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,MAAM,aAAa;AAAA,EAKxB,YAA6B,UAAmC,YAAyB;AAA5D;AAAmC;AAJhE,SAAiB,SAAmB,CAAC;AACrC,SAAQ,QAAQ;AAChB,SAAQ,YAAY;AAAA,EAEsE;AAAA,EAE1F,KAAK,OAAqB;AACxB,UAAM,YAAY,KAAK,WAAW,KAAK;AACvC,QAAI,aAAa,GAAG;AAClB,WAAK,cAAc;AACnB;AAAA,IACF;AACA,QAAI,MAAM,SAAS,WAAW;AAC5B,WAAK,OAAO,KAAK,MAAM,SAAS,GAAG,SAAS,CAAC;AAC7C,WAAK,SAAS;AACd,WAAK,cAAc;AAAA,IACrB,OAAO;AACL,WAAK,OAAO,KAAK,KAAK;AACtB,WAAK,SAAS,MAAM;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,SAAiB;AACf,WAAO,OAAO,OAAO,KAAK,MAAM;AAAA,EAClC;AAAA,EAEQ,gBAAsB;AAC5B,QAAI,KAAK,WAAW;AAAE;AAAA,IAAQ;AAC9B,SAAK,YAAY;AACjB,SAAK,aAAa;AAAA,EACpB;AACF;","names":[]}