@limrun/api 0.58.0 → 0.58.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.58.1](https://github.com/limrun-inc/typescript-sdk/compare/v0.58.0...v0.58.1) (2026-10-02)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **tunnel:** decode Content-Encoding before writing HAR bodies ([2a203a0](https://github.com/limrun-inc/typescript-sdk/commit/2a203a0797a8efdc7061c02933ad71372321d317))
9
+
10
+
11
+ ### Chores
12
+
13
+ * **cli:** pin published SDK 0.58.0 for release ([2497158](https://github.com/limrun-inc/typescript-sdk/commit/249715841fa09129871e820b4df17536062544c1))
14
+ * **cli:** pin SDK 0.58.0 for CLI 0.38.0 release ([c1b1d8a](https://github.com/limrun-inc/typescript-sdk/commit/c1b1d8a8c47401bcc8e9887197bf04f100a1baec))
15
+
3
16
  ## [0.58.0](https://github.com/limrun-inc/typescript-sdk/compare/v0.57.0...v0.58.0) (2026-10-01)
4
17
 
5
18
 
@@ -1 +1 @@
1
- {"version":3,"file":"destination-tunnel-har.d.mts","sourceRoot":"","sources":["src/destination-tunnel-har.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,QAAQ,EAAkD,MAAM,YAAY,CAAC;AAEpG,OAAO,KAAK,EAEV,gCAAgC,EAChC,oCAAoC,EACrC,4CAAwC;AAWzC,MAAM,MAAM,6BAA6B,GAAG,oCAAoC,GAAG;IACjF,mBAAmB,CAAC,EAAE,QAAQ,CAAC;IAC/B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG;IACjD,OAAO,EAAE,6BAA6B,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,qBAAa,6BAA6B;IAG5B,QAAQ,CAAC,SAAS,EAAE,MAAM;IAFtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;gBAExC,SAAS,GAAE,MAAkD;IAMlF,GAAG,CAAC,KAAK,EAAE,gCAAgC,GAAG,yBAAyB,GAAG,SAAS;IA4BnF,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,QAAQ;CAejB"}
1
+ {"version":3,"file":"destination-tunnel-har.d.mts","sourceRoot":"","sources":["src/destination-tunnel-har.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,QAAQ,EAAkD,MAAM,YAAY,CAAC;AAGpG,OAAO,KAAK,EAEV,gCAAgC,EAChC,oCAAoC,EACrC,4CAAwC;AAWzC,MAAM,MAAM,6BAA6B,GAAG,oCAAoC,GAAG;IACjF,mBAAmB,CAAC,EAAE,QAAQ,CAAC;IAC/B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG;IACjD,OAAO,EAAE,6BAA6B,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,qBAAa,6BAA6B;IAG5B,QAAQ,CAAC,SAAS,EAAE,MAAM;IAFtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;gBAExC,SAAS,GAAE,MAAkD;IAMlF,GAAG,CAAC,KAAK,EAAE,gCAAgC,GAAG,yBAAyB,GAAG,SAAS;IA4BnF,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,QAAQ;CAejB"}
@@ -1 +1 @@
1
- {"version":3,"file":"destination-tunnel-har.d.ts","sourceRoot":"","sources":["src/destination-tunnel-har.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,QAAQ,EAAkD,MAAM,YAAY,CAAC;AAEpG,OAAO,KAAK,EAEV,gCAAgC,EAChC,oCAAoC,EACrC,2CAAwC;AAWzC,MAAM,MAAM,6BAA6B,GAAG,oCAAoC,GAAG;IACjF,mBAAmB,CAAC,EAAE,QAAQ,CAAC;IAC/B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG;IACjD,OAAO,EAAE,6BAA6B,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,qBAAa,6BAA6B;IAG5B,QAAQ,CAAC,SAAS,EAAE,MAAM;IAFtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;gBAExC,SAAS,GAAE,MAAkD;IAMlF,GAAG,CAAC,KAAK,EAAE,gCAAgC,GAAG,yBAAyB,GAAG,SAAS;IA4BnF,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,QAAQ;CAejB"}
1
+ {"version":3,"file":"destination-tunnel-har.d.ts","sourceRoot":"","sources":["src/destination-tunnel-har.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,QAAQ,EAAkD,MAAM,YAAY,CAAC;AAGpG,OAAO,KAAK,EAEV,gCAAgC,EAChC,oCAAoC,EACrC,2CAAwC;AAWzC,MAAM,MAAM,6BAA6B,GAAG,oCAAoC,GAAG;IACjF,mBAAmB,CAAC,EAAE,QAAQ,CAAC;IAC/B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG;IACjD,OAAO,EAAE,6BAA6B,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,qBAAa,6BAA6B;IAG5B,QAAQ,CAAC,SAAS,EAAE,MAAM;IAFtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;gBAExC,SAAS,GAAE,MAAkD;IAMlF,GAAG,CAAC,KAAK,EAAE,gCAAgC,GAAG,yBAAyB,GAAG,SAAS;IA4BnF,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,QAAQ;CAejB"}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DestinationTunnelHARAssembler = void 0;
4
+ const tslib_1 = require("./internal/tslib.js");
5
+ const zlib = tslib_1.__importStar(require("zlib"));
4
6
  const destination_tunnel_1 = require("./destination-tunnel.js");
5
7
  /**
6
8
  * Correlates filesystem-neutral inspection body chunks with completion
@@ -66,8 +68,10 @@ exports.DestinationTunnelHARAssembler = DestinationTunnelHARAssembler;
66
68
  function makeDestinationTunnelHAREntry(complete, capture) {
67
69
  const requestBody = concatBytes(capture.requestBody, capture.requestBytes);
68
70
  const responseBody = concatBytes(capture.responseBody, capture.responseBytes);
69
- const { request, encoding: requestBodyEncoding } = addRequestBody(complete.request, requestBody);
70
- const response = addResponseBody(complete.response, responseBody);
71
+ const requestTruncated = complete._limrun.requestBodyTruncated === true || capture.requestTruncated;
72
+ const responseTruncated = complete._limrun.responseBodyTruncated === true || capture.responseTruncated;
73
+ const { request, encoding: requestBodyEncoding } = addRequestBody(complete.request, requestBody, requestTruncated);
74
+ const response = addResponseBody(complete.response, responseBody, responseTruncated);
71
75
  return {
72
76
  ...(complete.pageref === undefined ? {} : { pageref: complete.pageref }),
73
77
  startedDateTime: complete.startedDateTime,
@@ -82,16 +86,16 @@ function makeDestinationTunnelHAREntry(complete, capture) {
82
86
  _limrun: {
83
87
  ...complete._limrun,
84
88
  ...(requestBodyEncoding ? { requestBodyEncoding } : {}),
85
- requestBodyTruncated: complete._limrun.requestBodyTruncated === true || capture.requestTruncated,
86
- responseBodyTruncated: complete._limrun.responseBodyTruncated === true || capture.responseTruncated,
89
+ requestBodyTruncated: requestTruncated,
90
+ responseBodyTruncated: responseTruncated,
87
91
  },
88
92
  };
89
93
  }
90
- function addRequestBody(request, body) {
94
+ function addRequestBody(request, body, truncated) {
91
95
  if (body.byteLength === 0)
92
96
  return { request };
93
97
  const mimeType = request.postData?.mimeType ?? headerValue(request.headers, 'content-type');
94
- const encoded = encodedBody(body, mimeType);
98
+ const encoded = encodedBody(body, mimeType, headerValue(request.headers, 'content-encoding'), truncated);
95
99
  return {
96
100
  request: {
97
101
  ...request,
@@ -103,25 +107,102 @@ function addRequestBody(request, body) {
103
107
  ...(encoded.encoding ? { encoding: encoded.encoding } : {}),
104
108
  };
105
109
  }
106
- function addResponseBody(response, body) {
110
+ function addResponseBody(response, body, truncated) {
107
111
  if (body.byteLength === 0)
108
112
  return response;
109
113
  const content = { ...response.content };
110
114
  delete content.text;
111
115
  delete content.encoding;
116
+ const { decodedSize, ...encoded } = encodedBody(body, response.content.mimeType, headerValue(response.headers, 'content-encoding'), truncated);
112
117
  return {
113
118
  ...response,
114
119
  content: {
115
120
  ...content,
116
- ...encodedBody(body, response.content.mimeType),
121
+ ...(decodedSize === undefined ? {} : { size: decodedSize, compression: decodedSize - body.byteLength }),
122
+ ...encoded,
117
123
  },
118
124
  };
119
125
  }
120
- function encodedBody(body, contentType) {
126
+ /**
127
+ * Renders a captured body as HAR text. Content-Encoding is undone first so
128
+ * the HAR holds the decoded body, as HAR 1.2 and browser exports do. Anything
129
+ * that cannot be represented losslessly as UTF-8 text (unknown or corrupt
130
+ * encodings, truncated compressed bodies, non-UTF-8 bytes under a textual
131
+ * type) falls back to base64 of the bytes rather than lossy text.
132
+ *
133
+ * `decodedSize` is set only when a Content-Encoding was successfully removed.
134
+ */
135
+ function encodedBody(body, contentType, contentEncoding, truncated) {
136
+ let decoded = body;
137
+ let decodedSize;
138
+ const codings = parseContentEncoding(contentEncoding);
139
+ if (codings.length > 0) {
140
+ // A truncated stream cannot be decoded reliably (zstd, for one, returns
141
+ // partial output without an error), so keep the raw bytes.
142
+ if (truncated)
143
+ return { text: bytesToBase64(body), encoding: 'base64' };
144
+ try {
145
+ decoded = decodeContentCodings(body, codings);
146
+ decodedSize = decoded.byteLength;
147
+ }
148
+ catch {
149
+ return { text: bytesToBase64(body), encoding: 'base64' };
150
+ }
151
+ }
152
+ const sized = decodedSize === undefined ? {} : { decodedSize };
121
153
  if (isTextualContentType(contentType)) {
122
- return { text: new TextDecoder().decode(body) };
154
+ try {
155
+ return { text: new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(decoded), ...sized };
156
+ }
157
+ catch {
158
+ // Not valid UTF-8; fall through to base64.
159
+ }
160
+ }
161
+ return { text: bytesToBase64(decoded), encoding: 'base64', ...sized };
162
+ }
163
+ // Guards against decompression bombs; larger bodies fall back to base64 of the raw bytes.
164
+ const MAX_DECODED_BODY_BYTES = 64 * 1024 * 1024;
165
+ function parseContentEncoding(contentEncoding) {
166
+ return (contentEncoding ?? '')
167
+ .split(',')
168
+ .map((coding) => coding.trim().toLowerCase())
169
+ .filter((coding) => coding !== '' && coding !== 'identity');
170
+ }
171
+ /** Undoes codings in reverse of the order they were applied. Throws on unknown or corrupt input. */
172
+ function decodeContentCodings(body, codings) {
173
+ const options = { maxOutputLength: MAX_DECODED_BODY_BYTES };
174
+ let data = body;
175
+ for (const coding of [...codings].reverse()) {
176
+ switch (coding) {
177
+ case 'gzip':
178
+ case 'x-gzip':
179
+ data = zlib.gunzipSync(data, options);
180
+ break;
181
+ case 'deflate':
182
+ // Servers send both zlib-wrapped (per spec) and raw deflate streams.
183
+ try {
184
+ data = zlib.inflateSync(data, options);
185
+ }
186
+ catch {
187
+ data = zlib.inflateRawSync(data, options);
188
+ }
189
+ break;
190
+ case 'br':
191
+ data = zlib.brotliDecompressSync(data, options);
192
+ break;
193
+ case 'zstd': {
194
+ // Available from Node 22.15 / 23.8.
195
+ const zstdDecompressSync = zlib.zstdDecompressSync;
196
+ if (!zstdDecompressSync)
197
+ throw new Error('zstd decompression is not supported by this Node.js');
198
+ data = zstdDecompressSync(data, options);
199
+ break;
200
+ }
201
+ default:
202
+ throw new Error(`Unsupported content encoding: ${coding}`);
203
+ }
123
204
  }
124
- return { text: bytesToBase64(body), encoding: 'base64' };
205
+ return data;
125
206
  }
126
207
  function isTextualContentType(contentType) {
127
208
  const mimeType = contentType?.split(';', 1)[0]?.trim().toLowerCase() ?? '';
@@ -1 +1 @@
1
- {"version":3,"file":"destination-tunnel-har.js","sourceRoot":"","sources":["src/destination-tunnel-har.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"destination-tunnel-har.js","sourceRoot":"","sources":["src/destination-tunnel-har.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import * as zlib from 'zlib';
1
2
  import { DESTINATION_TUNNEL_DEFAULT_MAX_BODY_BYTES } from "./destination-tunnel.mjs";
2
3
  /**
3
4
  * Correlates filesystem-neutral inspection body chunks with completion
@@ -62,8 +63,10 @@ export class DestinationTunnelHARAssembler {
62
63
  function makeDestinationTunnelHAREntry(complete, capture) {
63
64
  const requestBody = concatBytes(capture.requestBody, capture.requestBytes);
64
65
  const responseBody = concatBytes(capture.responseBody, capture.responseBytes);
65
- const { request, encoding: requestBodyEncoding } = addRequestBody(complete.request, requestBody);
66
- const response = addResponseBody(complete.response, responseBody);
66
+ const requestTruncated = complete._limrun.requestBodyTruncated === true || capture.requestTruncated;
67
+ const responseTruncated = complete._limrun.responseBodyTruncated === true || capture.responseTruncated;
68
+ const { request, encoding: requestBodyEncoding } = addRequestBody(complete.request, requestBody, requestTruncated);
69
+ const response = addResponseBody(complete.response, responseBody, responseTruncated);
67
70
  return {
68
71
  ...(complete.pageref === undefined ? {} : { pageref: complete.pageref }),
69
72
  startedDateTime: complete.startedDateTime,
@@ -78,16 +81,16 @@ function makeDestinationTunnelHAREntry(complete, capture) {
78
81
  _limrun: {
79
82
  ...complete._limrun,
80
83
  ...(requestBodyEncoding ? { requestBodyEncoding } : {}),
81
- requestBodyTruncated: complete._limrun.requestBodyTruncated === true || capture.requestTruncated,
82
- responseBodyTruncated: complete._limrun.responseBodyTruncated === true || capture.responseTruncated,
84
+ requestBodyTruncated: requestTruncated,
85
+ responseBodyTruncated: responseTruncated,
83
86
  },
84
87
  };
85
88
  }
86
- function addRequestBody(request, body) {
89
+ function addRequestBody(request, body, truncated) {
87
90
  if (body.byteLength === 0)
88
91
  return { request };
89
92
  const mimeType = request.postData?.mimeType ?? headerValue(request.headers, 'content-type');
90
- const encoded = encodedBody(body, mimeType);
93
+ const encoded = encodedBody(body, mimeType, headerValue(request.headers, 'content-encoding'), truncated);
91
94
  return {
92
95
  request: {
93
96
  ...request,
@@ -99,25 +102,102 @@ function addRequestBody(request, body) {
99
102
  ...(encoded.encoding ? { encoding: encoded.encoding } : {}),
100
103
  };
101
104
  }
102
- function addResponseBody(response, body) {
105
+ function addResponseBody(response, body, truncated) {
103
106
  if (body.byteLength === 0)
104
107
  return response;
105
108
  const content = { ...response.content };
106
109
  delete content.text;
107
110
  delete content.encoding;
111
+ const { decodedSize, ...encoded } = encodedBody(body, response.content.mimeType, headerValue(response.headers, 'content-encoding'), truncated);
108
112
  return {
109
113
  ...response,
110
114
  content: {
111
115
  ...content,
112
- ...encodedBody(body, response.content.mimeType),
116
+ ...(decodedSize === undefined ? {} : { size: decodedSize, compression: decodedSize - body.byteLength }),
117
+ ...encoded,
113
118
  },
114
119
  };
115
120
  }
116
- function encodedBody(body, contentType) {
121
+ /**
122
+ * Renders a captured body as HAR text. Content-Encoding is undone first so
123
+ * the HAR holds the decoded body, as HAR 1.2 and browser exports do. Anything
124
+ * that cannot be represented losslessly as UTF-8 text (unknown or corrupt
125
+ * encodings, truncated compressed bodies, non-UTF-8 bytes under a textual
126
+ * type) falls back to base64 of the bytes rather than lossy text.
127
+ *
128
+ * `decodedSize` is set only when a Content-Encoding was successfully removed.
129
+ */
130
+ function encodedBody(body, contentType, contentEncoding, truncated) {
131
+ let decoded = body;
132
+ let decodedSize;
133
+ const codings = parseContentEncoding(contentEncoding);
134
+ if (codings.length > 0) {
135
+ // A truncated stream cannot be decoded reliably (zstd, for one, returns
136
+ // partial output without an error), so keep the raw bytes.
137
+ if (truncated)
138
+ return { text: bytesToBase64(body), encoding: 'base64' };
139
+ try {
140
+ decoded = decodeContentCodings(body, codings);
141
+ decodedSize = decoded.byteLength;
142
+ }
143
+ catch {
144
+ return { text: bytesToBase64(body), encoding: 'base64' };
145
+ }
146
+ }
147
+ const sized = decodedSize === undefined ? {} : { decodedSize };
117
148
  if (isTextualContentType(contentType)) {
118
- return { text: new TextDecoder().decode(body) };
149
+ try {
150
+ return { text: new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(decoded), ...sized };
151
+ }
152
+ catch {
153
+ // Not valid UTF-8; fall through to base64.
154
+ }
155
+ }
156
+ return { text: bytesToBase64(decoded), encoding: 'base64', ...sized };
157
+ }
158
+ // Guards against decompression bombs; larger bodies fall back to base64 of the raw bytes.
159
+ const MAX_DECODED_BODY_BYTES = 64 * 1024 * 1024;
160
+ function parseContentEncoding(contentEncoding) {
161
+ return (contentEncoding ?? '')
162
+ .split(',')
163
+ .map((coding) => coding.trim().toLowerCase())
164
+ .filter((coding) => coding !== '' && coding !== 'identity');
165
+ }
166
+ /** Undoes codings in reverse of the order they were applied. Throws on unknown or corrupt input. */
167
+ function decodeContentCodings(body, codings) {
168
+ const options = { maxOutputLength: MAX_DECODED_BODY_BYTES };
169
+ let data = body;
170
+ for (const coding of [...codings].reverse()) {
171
+ switch (coding) {
172
+ case 'gzip':
173
+ case 'x-gzip':
174
+ data = zlib.gunzipSync(data, options);
175
+ break;
176
+ case 'deflate':
177
+ // Servers send both zlib-wrapped (per spec) and raw deflate streams.
178
+ try {
179
+ data = zlib.inflateSync(data, options);
180
+ }
181
+ catch {
182
+ data = zlib.inflateRawSync(data, options);
183
+ }
184
+ break;
185
+ case 'br':
186
+ data = zlib.brotliDecompressSync(data, options);
187
+ break;
188
+ case 'zstd': {
189
+ // Available from Node 22.15 / 23.8.
190
+ const zstdDecompressSync = zlib.zstdDecompressSync;
191
+ if (!zstdDecompressSync)
192
+ throw new Error('zstd decompression is not supported by this Node.js');
193
+ data = zstdDecompressSync(data, options);
194
+ break;
195
+ }
196
+ default:
197
+ throw new Error(`Unsupported content encoding: ${coding}`);
198
+ }
119
199
  }
120
- return { text: bytesToBase64(body), encoding: 'base64' };
200
+ return data;
121
201
  }
122
202
  function isTextualContentType(contentType) {
123
203
  const mimeType = contentType?.split(';', 1)[0]?.trim().toLowerCase() ?? '';
@@ -1 +1 @@
1
- {"version":3,"file":"destination-tunnel-har.mjs","sourceRoot":"","sources":["src/destination-tunnel-har.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"destination-tunnel-har.mjs","sourceRoot":"","sources":["src/destination-tunnel-har.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@limrun/api",
3
- "version": "0.58.0",
3
+ "version": "0.58.1",
4
4
  "description": "The official TypeScript library for the Limrun API",
5
5
  "author": "Limrun <contact@limrun.com>",
6
6
  "types": "./index.d.ts",
@@ -1,4 +1,5 @@
1
1
  import type { Entry as HAREntry, Request as HARRequest, Response as HARResponse } from 'har-format';
2
+ import * as zlib from 'zlib';
2
3
  import { DESTINATION_TUNNEL_DEFAULT_MAX_BODY_BYTES } from './destination-tunnel';
3
4
  import type {
4
5
  DestinationTunnelInspectionComplete,
@@ -93,8 +94,14 @@ function makeDestinationTunnelHAREntry(
93
94
  ): DestinationTunnelHAREntry {
94
95
  const requestBody = concatBytes(capture.requestBody, capture.requestBytes);
95
96
  const responseBody = concatBytes(capture.responseBody, capture.responseBytes);
96
- const { request, encoding: requestBodyEncoding } = addRequestBody(complete.request, requestBody);
97
- const response = addResponseBody(complete.response, responseBody);
97
+ const requestTruncated = complete._limrun.requestBodyTruncated === true || capture.requestTruncated;
98
+ const responseTruncated = complete._limrun.responseBodyTruncated === true || capture.responseTruncated;
99
+ const { request, encoding: requestBodyEncoding } = addRequestBody(
100
+ complete.request,
101
+ requestBody,
102
+ requestTruncated,
103
+ );
104
+ const response = addResponseBody(complete.response, responseBody, responseTruncated);
98
105
  return {
99
106
  ...(complete.pageref === undefined ? {} : { pageref: complete.pageref }),
100
107
  startedDateTime: complete.startedDateTime,
@@ -109,16 +116,20 @@ function makeDestinationTunnelHAREntry(
109
116
  _limrun: {
110
117
  ...complete._limrun,
111
118
  ...(requestBodyEncoding ? { requestBodyEncoding } : {}),
112
- requestBodyTruncated: complete._limrun.requestBodyTruncated === true || capture.requestTruncated,
113
- responseBodyTruncated: complete._limrun.responseBodyTruncated === true || capture.responseTruncated,
119
+ requestBodyTruncated: requestTruncated,
120
+ responseBodyTruncated: responseTruncated,
114
121
  },
115
122
  };
116
123
  }
117
124
 
118
- function addRequestBody(request: HARRequest, body: Uint8Array): { request: HARRequest; encoding?: 'base64' } {
125
+ function addRequestBody(
126
+ request: HARRequest,
127
+ body: Uint8Array,
128
+ truncated: boolean,
129
+ ): { request: HARRequest; encoding?: 'base64' } {
119
130
  if (body.byteLength === 0) return { request };
120
131
  const mimeType = request.postData?.mimeType ?? headerValue(request.headers, 'content-type');
121
- const encoded = encodedBody(body, mimeType);
132
+ const encoded = encodedBody(body, mimeType, headerValue(request.headers, 'content-encoding'), truncated);
122
133
  return {
123
134
  request: {
124
135
  ...request,
@@ -131,28 +142,112 @@ function addRequestBody(request: HARRequest, body: Uint8Array): { request: HARRe
131
142
  };
132
143
  }
133
144
 
134
- function addResponseBody(response: HARResponse, body: Uint8Array): HARResponse {
145
+ function addResponseBody(response: HARResponse, body: Uint8Array, truncated: boolean): HARResponse {
135
146
  if (body.byteLength === 0) return response;
136
147
  const content = { ...response.content };
137
148
  delete content.text;
138
149
  delete content.encoding;
150
+ const { decodedSize, ...encoded } = encodedBody(
151
+ body,
152
+ response.content.mimeType,
153
+ headerValue(response.headers, 'content-encoding'),
154
+ truncated,
155
+ );
139
156
  return {
140
157
  ...response,
141
158
  content: {
142
159
  ...content,
143
- ...encodedBody(body, response.content.mimeType),
160
+ ...(decodedSize === undefined ? {} : { size: decodedSize, compression: decodedSize - body.byteLength }),
161
+ ...encoded,
144
162
  },
145
163
  };
146
164
  }
147
165
 
166
+ /**
167
+ * Renders a captured body as HAR text. Content-Encoding is undone first so
168
+ * the HAR holds the decoded body, as HAR 1.2 and browser exports do. Anything
169
+ * that cannot be represented losslessly as UTF-8 text (unknown or corrupt
170
+ * encodings, truncated compressed bodies, non-UTF-8 bytes under a textual
171
+ * type) falls back to base64 of the bytes rather than lossy text.
172
+ *
173
+ * `decodedSize` is set only when a Content-Encoding was successfully removed.
174
+ */
148
175
  function encodedBody(
149
176
  body: Uint8Array,
150
177
  contentType: string | undefined,
151
- ): { text: string; encoding?: 'base64' } {
178
+ contentEncoding: string | undefined,
179
+ truncated: boolean,
180
+ ): { text: string; encoding?: 'base64'; decodedSize?: number } {
181
+ let decoded = body;
182
+ let decodedSize: number | undefined;
183
+ const codings = parseContentEncoding(contentEncoding);
184
+ if (codings.length > 0) {
185
+ // A truncated stream cannot be decoded reliably (zstd, for one, returns
186
+ // partial output without an error), so keep the raw bytes.
187
+ if (truncated) return { text: bytesToBase64(body), encoding: 'base64' };
188
+ try {
189
+ decoded = decodeContentCodings(body, codings);
190
+ decodedSize = decoded.byteLength;
191
+ } catch {
192
+ return { text: bytesToBase64(body), encoding: 'base64' };
193
+ }
194
+ }
195
+ const sized = decodedSize === undefined ? {} : { decodedSize };
152
196
  if (isTextualContentType(contentType)) {
153
- return { text: new TextDecoder().decode(body) };
197
+ try {
198
+ return { text: new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(decoded), ...sized };
199
+ } catch {
200
+ // Not valid UTF-8; fall through to base64.
201
+ }
202
+ }
203
+ return { text: bytesToBase64(decoded), encoding: 'base64', ...sized };
204
+ }
205
+
206
+ // Guards against decompression bombs; larger bodies fall back to base64 of the raw bytes.
207
+ const MAX_DECODED_BODY_BYTES = 64 * 1024 * 1024;
208
+
209
+ function parseContentEncoding(contentEncoding: string | undefined): string[] {
210
+ return (contentEncoding ?? '')
211
+ .split(',')
212
+ .map((coding) => coding.trim().toLowerCase())
213
+ .filter((coding) => coding !== '' && coding !== 'identity');
214
+ }
215
+
216
+ /** Undoes codings in reverse of the order they were applied. Throws on unknown or corrupt input. */
217
+ function decodeContentCodings(body: Uint8Array, codings: string[]): Uint8Array {
218
+ const options = { maxOutputLength: MAX_DECODED_BODY_BYTES };
219
+ let data: Uint8Array = body;
220
+ for (const coding of [...codings].reverse()) {
221
+ switch (coding) {
222
+ case 'gzip':
223
+ case 'x-gzip':
224
+ data = zlib.gunzipSync(data, options);
225
+ break;
226
+ case 'deflate':
227
+ // Servers send both zlib-wrapped (per spec) and raw deflate streams.
228
+ try {
229
+ data = zlib.inflateSync(data, options);
230
+ } catch {
231
+ data = zlib.inflateRawSync(data, options);
232
+ }
233
+ break;
234
+ case 'br':
235
+ data = zlib.brotliDecompressSync(data, options);
236
+ break;
237
+ case 'zstd': {
238
+ // Available from Node 22.15 / 23.8.
239
+ const zstdDecompressSync = (zlib as any).zstdDecompressSync as
240
+ | ((buffer: Uint8Array, options?: object) => Buffer)
241
+ | undefined;
242
+ if (!zstdDecompressSync) throw new Error('zstd decompression is not supported by this Node.js');
243
+ data = zstdDecompressSync(data, options);
244
+ break;
245
+ }
246
+ default:
247
+ throw new Error(`Unsupported content encoding: ${coding}`);
248
+ }
154
249
  }
155
- return { text: bytesToBase64(body), encoding: 'base64' };
250
+ return data;
156
251
  }
157
252
 
158
253
  function isTextualContentType(contentType: string | undefined): boolean {
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const VERSION = '0.58.0'; // x-release-please-version
1
+ export const VERSION = '0.58.1'; // x-release-please-version
package/version.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.58.0";
1
+ export declare const VERSION = "0.58.1";
2
2
  //# sourceMappingURL=version.d.mts.map
package/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.58.0";
1
+ export declare const VERSION = "0.58.1";
2
2
  //# sourceMappingURL=version.d.ts.map
package/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = '0.58.0'; // x-release-please-version
4
+ exports.VERSION = '0.58.1'; // x-release-please-version
5
5
  //# sourceMappingURL=version.js.map
package/version.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = '0.58.0'; // x-release-please-version
1
+ export const VERSION = '0.58.1'; // x-release-please-version
2
2
  //# sourceMappingURL=version.mjs.map