@hyperttp/core 1.4.5 → 1.4.7

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.
@@ -1,4 +1,121 @@
1
- const fetchFn = globalThis.fetch;
1
+ import http from "node:http";
2
+ import https from "node:https";
3
+ import net from "node:net";
4
+ import { Readable } from "node:stream";
5
+ import tls from "node:tls";
6
+ import zlib from "node:zlib";
7
+ /**
8
+ * @ru Статические пресеты браузерных заголовков для маскировки под реальных пользователей.
9
+ * Используются stealth-режимом для обхода fingerprint-защит.
10
+ * @en Static presets of browser headers for masking as real users.
11
+ * Used by stealth mode to bypass fingerprint protections.
12
+ */
13
+ const STEALTH_HEADER_PRESETS = {
14
+ chrome: {
15
+ "sec-ch-ua": '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
16
+ "sec-ch-ua-mobile": "?0",
17
+ "sec-ch-ua-platform": '"Linux"',
18
+ "sec-fetch-dest": "document",
19
+ "sec-fetch-mode": "navigate",
20
+ "sec-fetch-site": "none",
21
+ "sec-fetch-user": "?1",
22
+ "upgrade-insecure-requests": "1",
23
+ "accept-language": "en-US,en;q=0.9",
24
+ },
25
+ firefox: {
26
+ "sec-fetch-dest": "document",
27
+ "sec-fetch-mode": "navigate",
28
+ "sec-fetch-site": "none",
29
+ "accept-language": "en-US,en;q=0.5",
30
+ "upgrade-insecure-requests": "1",
31
+ },
32
+ };
33
+ /**
34
+ * @ru Пресеты User-Agent, соответствующие TLS-отпечаткам (JA3/JA4).
35
+ * @en User-Agent presets matching the TLS fingerprints (JA3/JA4).
36
+ */
37
+ const STEALTH_UA_PRESETS = {
38
+ chrome: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
39
+ firefox: "Mozilla/5.0 (X11; Linux; rv:126.0) Gecko/20100101 Firefox/126.0",
40
+ safari: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15",
41
+ edge: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0",
42
+ };
43
+ /**
44
+ * @ru Возвращает строку шифров TLS для указанного профиля браузера.
45
+ * @en Returns the TLS cipher suite string for the specified browser profile.
46
+ * @param fingerprint - Browser fingerprint profile.
47
+ * @returns Colon-separated cipher suite string, or empty string if not found.
48
+ */
49
+ function getCiphersForProfile(fingerprint) {
50
+ if (!fingerprint)
51
+ return "";
52
+ switch (fingerprint) {
53
+ case "chrome":
54
+ case "edge":
55
+ return [
56
+ "TLS_AES_128_GCM_SHA256",
57
+ "TLS_AES_256_GCM_SHA384",
58
+ "TLS_CHACHA20_POLY1305_SHA256",
59
+ "ECDHE-ECDSA-AES128-GCM-SHA256",
60
+ "ECDHE-RSA-AES128-GCM-SHA256",
61
+ ].join(":");
62
+ case "firefox":
63
+ return [
64
+ "TLS_AES_128_GCM_SHA256",
65
+ "TLS_CHACHA20_POLY1305_SHA256",
66
+ "TLS_AES_256_GCM_SHA384",
67
+ "ECDHE-ECDSA-AES128-GCM-SHA256",
68
+ "ECDHE-RSA-AES128-GCM-SHA256",
69
+ ].join(":");
70
+ case "safari":
71
+ return [
72
+ "TLS_AES_256_GCM_SHA384",
73
+ "TLS_CHACHA20_POLY1305_SHA256",
74
+ "TLS_AES_128_GCM_SHA256",
75
+ "ECDHE-ECDSA-AES256-GCM-SHA384",
76
+ "ECDHE-RSA-AES256-GCM-SHA384",
77
+ ].join(":");
78
+ default:
79
+ return "";
80
+ }
81
+ }
82
+ /**
83
+ * @ru Безопасно применяет стелс-пресеты, отдавая абсолютный приоритет ручным заголовкам.
84
+ * @en Safely applies stealth presets, giving absolute priority to manual headers.
85
+ * @param headers - The headers object to modify.
86
+ * @param stealth - Stealth configuration options.
87
+ * @returns The modified headers object.
88
+ */
89
+ function applyStealthHeaders(headers, stealth) {
90
+ if (!stealth || !stealth.fingerprint)
91
+ return headers;
92
+ const presetName = stealth.fingerprint;
93
+ const presetHeaders = STEALTH_HEADER_PRESETS[presetName];
94
+ if (presetHeaders) {
95
+ for (const key in presetHeaders) {
96
+ if (headers[key] === undefined) {
97
+ headers[key] = presetHeaders[key];
98
+ }
99
+ }
100
+ }
101
+ const currentUA = headers["user-agent"];
102
+ if (currentUA === undefined || currentUA === "hyperttp/2.0" || currentUA === "Hyperttp/2.0") {
103
+ const browserUA = STEALTH_UA_PRESETS[presetName];
104
+ if (browserUA) {
105
+ headers["user-agent"] = browserUA;
106
+ }
107
+ }
108
+ return headers;
109
+ }
110
+ /**
111
+ * @ru Кэш HTTP/HTTPS агентов по ключу (протокол + stealth-конфигурация).
112
+ * @en Cache of HTTP/HTTPS agents by key (protocol + stealth configuration).
113
+ */
114
+ const agentCache = new Map();
115
+ /**
116
+ * @ru Устанавливает метод dump() на прототип ReadableStream для освобождения ресурсов.
117
+ * @en Installs dump() method on ReadableStream prototype for resource cleanup.
118
+ */
2
119
  function installReadableStreamDump() {
3
120
  if (typeof ReadableStream === "undefined")
4
121
  return;
@@ -18,6 +135,78 @@ function installReadableStreamDump() {
18
135
  configurable: true,
19
136
  });
20
137
  }
138
+ /**
139
+ * @ru Получает или создаёт нативный HTTP/HTTPS агент с учётом stealth-настроек.
140
+ * @en Gets or creates a native HTTP/HTTPS agent considering stealth settings.
141
+ * @param isHttps - Whether the connection is HTTPS.
142
+ * @param stealth - Optional stealth configuration.
143
+ * @returns The HTTP or HTTPS agent.
144
+ */
145
+ function getNativeAgent(isHttps, stealth) {
146
+ const fingerprint = stealth?.fingerprint ?? "none";
147
+ const fragment = stealth?.fragment ?? "none";
148
+ const cacheKey = `${isHttps ? "https" : "http"}:${fingerprint}:${fragment}`;
149
+ let agent = agentCache.get(cacheKey);
150
+ if (agent)
151
+ return agent;
152
+ const agentOpts = {
153
+ keepAlive: true,
154
+ maxSockets: 256,
155
+ };
156
+ if (isHttps) {
157
+ agentOpts.ciphers = getCiphersForProfile(stealth?.fingerprint);
158
+ if (stealth?.fragment === "split") {
159
+ agentOpts.createConnection = (options, callback) => {
160
+ const socket = net.connect(options);
161
+ const originalWrite = socket.write;
162
+ let isFirstWrite = true;
163
+ socket.write = function (chunk, encodingOrCb, cb) {
164
+ if (isFirstWrite && chunk instanceof Uint8Array && chunk.length > 5) {
165
+ isFirstWrite = false;
166
+ this.write = originalWrite;
167
+ let encoding;
168
+ let callbackRef;
169
+ if (typeof encodingOrCb === "function") {
170
+ callbackRef = encodingOrCb;
171
+ }
172
+ else {
173
+ encoding = encodingOrCb;
174
+ callbackRef = cb;
175
+ }
176
+ const part1 = chunk.subarray(0, 3);
177
+ const part2 = chunk.subarray(3);
178
+ originalWrite.call(this, part1, encoding);
179
+ return originalWrite.call(this, part2, encoding, callbackRef);
180
+ }
181
+ this.write = originalWrite;
182
+ return originalWrite.call(this, chunk, encodingOrCb, cb);
183
+ };
184
+ const tlsSocket = tls.connect({
185
+ ...options,
186
+ socket,
187
+ ciphers: agentOpts.ciphers,
188
+ });
189
+ tlsSocket.once("secureConnect", () => callback(null, tlsSocket));
190
+ tlsSocket.once("error", (err) => callback(err));
191
+ return tlsSocket;
192
+ };
193
+ }
194
+ agent = new https.Agent(agentOpts);
195
+ }
196
+ else {
197
+ if (stealth?.fragment === "split") {
198
+ agentOpts.createConnection = (options, callback) => {
199
+ const socket = net.connect(options);
200
+ socket.once("connect", () => callback(null, socket));
201
+ socket.once("error", (err) => callback(err));
202
+ return socket;
203
+ };
204
+ }
205
+ agent = new http.Agent(agentOpts);
206
+ }
207
+ agentCache.set(cacheKey, agent);
208
+ return agent;
209
+ }
21
210
  installReadableStreamDump();
22
211
  function isAbsoluteHttpUrl(url) {
23
212
  return url.startsWith("http://") || url.startsWith("https://");
@@ -39,36 +228,35 @@ function isLocalhostUrl(url) {
39
228
  return host === "localhost" || host.startsWith("localhost:");
40
229
  }
41
230
  function normalizeHeaders(headers) {
231
+ const out = Object.create(null);
42
232
  if (!headers)
43
- return undefined;
233
+ return out;
44
234
  if (headers instanceof Headers) {
45
- const out = Object.create(null);
46
235
  headers.forEach((value, key) => {
47
- out[key] = value;
236
+ out[key.toLowerCase()] = value;
48
237
  });
49
238
  return out;
50
239
  }
51
240
  if (Array.isArray(headers)) {
52
- const out = Object.create(null);
53
241
  for (let i = 0; i < headers.length; i++) {
54
242
  const pair = headers[i];
55
- if (!pair)
243
+ if (!pair || typeof pair[0] !== "string")
56
244
  continue;
57
- out[pair[0]] = pair[1];
245
+ out[pair[0].toLowerCase()] = String(pair[1]);
58
246
  }
59
247
  return out;
60
248
  }
61
- const out = Object.create(null);
62
249
  const src = headers;
63
250
  for (const key in src) {
64
251
  const value = src[key];
65
252
  if (value == null)
66
253
  continue;
254
+ const lKey = key.toLowerCase();
67
255
  if (Array.isArray(value)) {
68
- out[key] = key.toLowerCase() === "cookie" ? value.join("; ") : value.join(", ");
256
+ out[lKey] = lKey === "cookie" ? value.join("; ") : value.join(", ");
69
257
  continue;
70
258
  }
71
- out[key] = String(value);
259
+ out[lKey] = String(value);
72
260
  }
73
261
  return out;
74
262
  }
@@ -79,10 +267,7 @@ function normalizeBody(body) {
79
267
  body instanceof Uint8Array ||
80
268
  body instanceof ArrayBuffer ||
81
269
  ArrayBuffer.isView(body) ||
82
- (typeof ReadableStream !== "undefined" && body instanceof ReadableStream) ||
83
- (typeof URLSearchParams !== "undefined" && body instanceof URLSearchParams) ||
84
- (typeof FormData !== "undefined" && body instanceof FormData) ||
85
- (typeof Blob !== "undefined" && body instanceof Blob)) {
270
+ (typeof ReadableStream !== "undefined" && body instanceof ReadableStream)) {
86
271
  return body;
87
272
  }
88
273
  if (typeof body === "object") {
@@ -91,8 +276,8 @@ function normalizeBody(body) {
91
276
  return String(body);
92
277
  }
93
278
  /**
94
- * @ru Реализация транспорта для Node.js с использованием fetch.
95
- * @en Node.js transport implementation using fetch.
279
+ * @ru Реализация транспорта для Node.js с использованием нативных http/https модулей.
280
+ * Поддерживает stealth-маскировку, фрагментацию TLS Client Hello и автоматическую декомпрессию.
96
281
  */
97
282
  export class NodeTransport {
98
283
  config;
@@ -109,25 +294,87 @@ export class NodeTransport {
109
294
  if (this.isProduction && isLocalhostUrl(fullUrl)) {
110
295
  throw new Error("Localhost URL detected in production environment");
111
296
  }
112
- const headers = normalizeHeaders(req.headers);
297
+ let headers = normalizeHeaders(req.headers);
298
+ if (headers["accept-encoding"] === undefined) {
299
+ headers["accept-encoding"] = "gzip, deflate, br";
300
+ }
301
+ const stealthOpts = req.stealth ?? this.config.stealth ?? this.config.network?.stealth;
302
+ if (stealthOpts) {
303
+ headers = applyStealthHeaders(headers, stealthOpts);
304
+ }
113
305
  const body = normalizeBody(req.body);
114
- const res = await fetchFn(fullUrl, {
115
- method: req.method,
116
- headers,
117
- body,
118
- signal: req.signal,
119
- });
120
- const stream = (res.body ?? new ReadableStream());
121
- const resHeaders = Object.create(null);
122
- res.headers.forEach((value, key) => {
123
- resHeaders[key] = value;
306
+ const urlObj = new URL(fullUrl);
307
+ const isHttps = urlObj.protocol === "https:";
308
+ const agent = getNativeAgent(isHttps, stealthOpts);
309
+ return new Promise((resolve, reject) => {
310
+ const reqOpts = {
311
+ method: req.method,
312
+ headers,
313
+ agent,
314
+ signal: req.signal,
315
+ };
316
+ const clientReq = (isHttps ? https : http).request(fullUrl, reqOpts, (res) => {
317
+ const resHeaders = Object.create(null);
318
+ for (const key in res.headers) {
319
+ const val = res.headers[key];
320
+ if (val !== undefined) {
321
+ resHeaders[key] = Array.isArray(val) ? val.join(", ") : val;
322
+ }
323
+ }
324
+ let responseStream = res;
325
+ const encoding = resHeaders["content-encoding"]?.toLowerCase();
326
+ if (encoding === "gzip") {
327
+ responseStream = res.pipe(zlib.createGunzip());
328
+ delete resHeaders["content-encoding"];
329
+ delete resHeaders["content-length"];
330
+ }
331
+ else if (encoding === "deflate") {
332
+ responseStream = res.pipe(zlib.createInflate());
333
+ delete resHeaders["content-encoding"];
334
+ delete resHeaders["content-length"];
335
+ }
336
+ else if (encoding === "br") {
337
+ responseStream = res.pipe(zlib.createBrotliDecompress());
338
+ delete resHeaders["content-encoding"];
339
+ delete resHeaders["content-length"];
340
+ }
341
+ resolve({
342
+ status: res.statusCode ?? 200,
343
+ headers: resHeaders,
344
+ url: fullUrl,
345
+ body: Readable.toWeb(responseStream),
346
+ });
347
+ });
348
+ clientReq.on("error", (err) => reject(err));
349
+ if (body !== undefined && body !== null) {
350
+ if (typeof body === "string" || body instanceof Uint8Array || ArrayBuffer.isView(body)) {
351
+ clientReq.write(body);
352
+ clientReq.end();
353
+ }
354
+ else if (body instanceof ArrayBuffer) {
355
+ clientReq.write(Buffer.from(body));
356
+ clientReq.end();
357
+ }
358
+ else if (typeof ReadableStream !== "undefined" && body instanceof ReadableStream) {
359
+ Readable.fromWeb(body).pipe(clientReq);
360
+ }
361
+ else {
362
+ clientReq.end();
363
+ }
364
+ }
365
+ else {
366
+ clientReq.end();
367
+ }
124
368
  });
125
- return {
126
- status: res.status,
127
- headers: resHeaders,
128
- url: res.url,
129
- body: stream,
130
- };
369
+ }
370
+ async close() {
371
+ for (const agent of agentCache.values()) {
372
+ agent.destroy();
373
+ }
374
+ agentCache.clear();
375
+ }
376
+ async destroy() {
377
+ await this.close();
131
378
  }
132
379
  }
133
380
  //# sourceMappingURL=node.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/transports/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/transports/node.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import type { TransportStreamExtensions } from "@hyperttp/types";
2
- type StreamPayload = ReadableStream<Uint8Array> & TransportStreamExtensions;
3
- type BufferPayload = Uint8Array & TransportStreamExtensions;
4
- /**
5
- * @ru Декомпрессирует буфер с поддержкой множественных кодировок.
6
- * Сначала пытается Web API, затем fallback на node:zlib для серверных сред.
7
- * @en Decompresses a buffer with support for multiple encodings.
8
- * Tries Web API first, then falls back to node:zlib for server environments.
9
- */
10
- export declare function decompressBuffer(body: Uint8Array, encoding: string): Promise<BufferPayload>;
11
- /**
12
- * @ru Создаёт декомпрессированный стрим с поддержкой множественных кодировок.
13
- * Использует DecompressionStream для Web и node:zlib для Node.js.
14
- * @en Creates a decompressed stream with support for multiple encodings.
15
- * Uses DecompressionStream for Web and node:zlib for Node.js.
16
- */
17
- export declare function createDecompressStream(body: ReadableStream<Uint8Array>, encoding: string): Promise<StreamPayload>;
18
- export {};
19
- //# sourceMappingURL=decompress.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decompress.d.ts","sourceRoot":"","sources":["../../src/utils/decompress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAGjE,KAAK,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,yBAAyB,CAAC;AAC5E,KAAK,aAAa,GAAG,UAAU,GAAG,yBAAyB,CAAC;AAgK5D;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAsBjG;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAyCxB"}
@@ -1,195 +0,0 @@
1
- import { runtimeImport } from "../transports/manager.js";
2
- /**
3
- * @ru Флаг серверного окружения (Node.js/Bun/Deno).
4
- * @en Server environment flag (Node.js/Bun/Deno).
5
- */
6
- const IS_SERVER = typeof window === "undefined" && typeof self === "undefined";
7
- /**
8
- * @ru No-op функция для dump() буферов. Буферы не требуют освобождения ресурсов.
9
- * @en No-op function for buffer dump(). Buffers don't require resource cleanup.
10
- */
11
- const NOOP_DUMP = async () => { };
12
- /**
13
- * @ru Кэш промисов импорта Node.js модулей для избежания повторных загрузок.
14
- * @en Cache of Node.js module import promises to avoid repeated loads.
15
- */
16
- let zlibModulePromise = null;
17
- let streamModulePromise = null;
18
- /**
19
- * @ru Лениво загружает и кэширует модуль node:zlib.
20
- * @en Lazily loads and caches the node:zlib module.
21
- */
22
- async function getZlibModule() {
23
- if (!zlibModulePromise) {
24
- zlibModulePromise = runtimeImport("node:zlib");
25
- }
26
- return zlibModulePromise;
27
- }
28
- /**
29
- * @ru Лениво загружает и кэширует модуль node:stream.
30
- * @en Lazily loads and caches the node:stream module.
31
- */
32
- async function getStreamModule() {
33
- if (!streamModulePromise) {
34
- streamModulePromise = runtimeImport("node:stream");
35
- }
36
- return streamModulePromise;
37
- }
38
- /**
39
- * @ru Парсит строку Content-Encoding в массив кодировок за один проход.
40
- * Игнорирует 'identity' (без сжатия) и пустые значения.
41
- * @en Parses Content-Encoding string into an array of encodings in a single pass.
42
- * Ignores 'identity' (no compression) and empty values.
43
- */
44
- function parseEncodings(encoding) {
45
- const result = [];
46
- let start = 0;
47
- const len = encoding.length;
48
- for (let i = 0; i <= len; i++) {
49
- if (i === len || encoding[i] === ",") {
50
- let part = encoding.slice(start, i).trim().toLowerCase();
51
- if (part && part !== "identity") {
52
- result.push(part);
53
- }
54
- start = i + 1;
55
- }
56
- }
57
- return result;
58
- }
59
- /**
60
- * @ru Добавляет no-op метод dump() к буферу.
61
- * @en Attaches a no-op dump() method to the buffer.
62
- */
63
- function attachNoopDump(buffer) {
64
- const payload = buffer;
65
- payload.dump = NOOP_DUMP;
66
- return payload;
67
- }
68
- /**
69
- * @ru Добавляет метод dump() к стриму для отмены и освобождения сокета.
70
- * @en Attaches a dump() method to the stream for cancellation and socket release.
71
- */
72
- function attachStreamDump(stream) {
73
- const payload = stream;
74
- payload.dump = async () => {
75
- try {
76
- await payload.cancel();
77
- }
78
- catch {
79
- //
80
- }
81
- };
82
- return payload;
83
- }
84
- /**
85
- * @ru Декомпрессирует буфер с использованием Web API (DecompressionStream).
86
- * Поддерживает gzip и deflate. Возвращает исходный буфер, если декомпрессия невозможна.
87
- * @en Decompresses a buffer using Web API (DecompressionStream).
88
- * Supports gzip and deflate. Returns the original buffer if decompression is not possible.
89
- */
90
- async function decompressOnceWeb(input, encoding) {
91
- const enc = encoding.trim().toLowerCase();
92
- if (typeof globalThis.DecompressionStream === "undefined")
93
- return input;
94
- const format = enc === "gzip" || enc === "x-gzip" ? "gzip" : enc === "deflate" ? "deflate" : null;
95
- if (!format)
96
- return input;
97
- const blob = new Blob([input]);
98
- const response = new Response(blob);
99
- const decompressedStream = response.body.pipeThrough(new globalThis.DecompressionStream(format));
100
- const buf = await new Response(decompressedStream).arrayBuffer();
101
- return new Uint8Array(buf);
102
- }
103
- /**
104
- * @ru Декомпрессирует буфер с использованием node:zlib.
105
- * Поддерживает gzip, deflate и brotli.
106
- * @en Decompresses a buffer using node:zlib.
107
- * Supports gzip, deflate, and brotli.
108
- */
109
- async function decompressOnceNode(input, encoding) {
110
- const enc = encoding.trim().toLowerCase();
111
- const zlib = await getZlibModule();
112
- switch (enc) {
113
- case "gzip":
114
- case "x-gzip":
115
- return zlib.gunzipSync(input);
116
- case "deflate":
117
- return zlib.inflateSync(input);
118
- case "br":
119
- return zlib.brotliDecompressSync(input);
120
- default:
121
- return input;
122
- }
123
- }
124
- /**
125
- * @ru Декомпрессирует буфер с поддержкой множественных кодировок.
126
- * Сначала пытается Web API, затем fallback на node:zlib для серверных сред.
127
- * @en Decompresses a buffer with support for multiple encodings.
128
- * Tries Web API first, then falls back to node:zlib for server environments.
129
- */
130
- export async function decompressBuffer(body, encoding) {
131
- let current = body;
132
- const encodings = parseEncodings(encoding);
133
- for (let i = 0; i < encodings.length; i++) {
134
- const enc = encodings[i];
135
- const webResult = await decompressOnceWeb(current, enc);
136
- if (webResult !== current) {
137
- current = webResult;
138
- continue;
139
- }
140
- if (IS_SERVER && (enc === "br" || enc === "gzip" || enc === "deflate" || enc === "x-gzip")) {
141
- try {
142
- current = await decompressOnceNode(current, enc);
143
- }
144
- catch {
145
- continue;
146
- }
147
- }
148
- }
149
- return attachNoopDump(current);
150
- }
151
- /**
152
- * @ru Создаёт декомпрессированный стрим с поддержкой множественных кодировок.
153
- * Использует DecompressionStream для Web и node:zlib для Node.js.
154
- * @en Creates a decompressed stream with support for multiple encodings.
155
- * Uses DecompressionStream for Web and node:zlib for Node.js.
156
- */
157
- export async function createDecompressStream(body, encoding) {
158
- const encodings = parseEncodings(encoding);
159
- if (encodings.length === 0)
160
- return attachStreamDump(body);
161
- let current = body;
162
- for (let i = 0; i < encodings.length; i++) {
163
- const enc = encodings[i];
164
- const isGzip = enc === "gzip" || enc === "x-gzip";
165
- const isDeflate = enc === "deflate";
166
- const isBrotli = enc === "br";
167
- if ((isGzip || isDeflate) && typeof globalThis.DecompressionStream !== "undefined") {
168
- const format = isGzip ? "gzip" : "deflate";
169
- current = current.pipeThrough(new globalThis.DecompressionStream(format));
170
- }
171
- else if (IS_SERVER) {
172
- try {
173
- const streamMod = await getStreamModule();
174
- const zlibMod = await getZlibModule();
175
- const nodeReadableStream = streamMod.Readable.fromWeb(current);
176
- let transformer = nodeReadableStream;
177
- if (isGzip) {
178
- transformer = nodeReadableStream.pipe(zlibMod.createGunzip());
179
- }
180
- else if (isDeflate) {
181
- transformer = nodeReadableStream.pipe(zlibMod.createInflate());
182
- }
183
- else if (isBrotli) {
184
- transformer = nodeReadableStream.pipe(zlibMod.createBrotliDecompress());
185
- }
186
- current = streamMod.Readable.toWeb(transformer);
187
- }
188
- catch {
189
- continue;
190
- }
191
- }
192
- }
193
- return attachStreamDump(current);
194
- }
195
- //# sourceMappingURL=decompress.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decompress.js","sourceRoot":"","sources":["../../src/utils/decompress.ts"],"names":[],"mappings":"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"}