@hyperttp/transport-bun 0.2.3 → 0.3.0

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/README.md CHANGED
@@ -1,26 +1,27 @@
1
1
  # BunTransport
2
2
 
3
- `BunTransport` is a network transport implementation for `HyperTransport`, designed to run in the **Bun runtime**.
3
+ `BunTransport` is a high-performance HTTP transport for the
4
+ [HyperTransport](https://github.com/IT-IF-OR) ecosystem, designed for the **Bun runtime**.
4
5
 
5
- It wraps `fetch` and adds:
6
+ It wraps native `fetch` and adds:
6
7
 
7
- - concurrency limiting
8
+ - concurrency limiting with FIFO queue
8
9
  - request timeouts via `AbortSignal`
9
- - automatic cookie handling
10
+ - automatic cookie handling with TTL and LRU eviction
11
+ - response caching for GET/HEAD requests
12
+ - stealth / fingerprint mimicry (JA3/JA4)
10
13
  - header normalization
11
14
  - `keepalive` support
12
- - access to Bun `tls` options
15
+ - TLS configuration (ciphers, `rejectUnauthorized`)
13
16
 
14
17
  ---
15
18
 
16
19
  ## Interface
17
20
 
18
21
  ```ts
19
- /**
20
- * @ru Общий интерфейс для реализации сетевых транспортов.
21
- * @en Unified interface for building runtime-specific network transports.
22
- */
23
22
  export interface HyperTransport {
23
+ readonly protocols?: readonly string[];
24
+ supports?(protocol: string): boolean;
24
25
  execute(req: TransportRequest): Promise<TransportResponse>;
25
26
  close?(): Promise<void>;
26
27
  destroy?(): Promise<void>;
@@ -34,12 +35,13 @@ export interface HyperTransport {
34
35
  ## Features
35
36
 
36
37
  - `fetch`-based implementation with `signal` support
37
- - `redirect: "manual"`
38
38
  - automatic merging of cookies from responses and subsequent requests
39
- - cookie cache per domain
40
- - request concurrency limiting
39
+ - cookie cache per domain with configurable TTL
40
+ - response cache for GET/HEAD requests (optional, via `hcacher`)
41
+ - request concurrency limiting with FIFO queue
41
42
  - request timeout support
42
- - automatic `User-Agent` injection from config (if not provided manually)
43
+ - stealth mode: browser-like TLS fingerprint emulation (Chrome, Firefox, Safari, Edge)
44
+ - `baseUrl` support for relative URLs
43
45
  - compatibility with `TransportRequest` / `TransportResponse`
44
46
 
45
47
  ---
@@ -49,90 +51,112 @@ export interface HyperTransport {
49
51
  `BunTransport` is designed for Bun, so the project must run in the Bun runtime.
50
52
 
51
53
  ```bash
52
- bun install
54
+ bun add @hyperttp/transport-bun
53
55
  ```
54
56
 
57
+ Peer dependencies: `@hyperttp/types`, `hcacher`.
58
+
55
59
  ---
56
60
 
57
61
  ## Usage
58
62
 
59
63
  ```ts
60
- import { BunTransport } from "./BunTransport";
64
+ import { BunTransport } from "@hyperttp/transport-bun";
61
65
 
62
66
  const transport = new BunTransport({
67
+ baseUrl: "https://api.example.com",
63
68
  network: {
64
69
  timeout: 10_000,
65
70
  maxConcurrent: 32,
66
- userAgent: "Hyperttp/1.0",
67
71
  keepAliveTimeout: 30_000,
68
72
  rejectUnauthorized: true,
69
73
  },
70
74
  });
71
75
 
72
76
  const response = await transport.execute({
73
- url: "https://example.com",
77
+ url: "/users",
74
78
  method: "GET",
79
+ protocol: "rest",
75
80
  headers: {},
76
81
  body: null,
77
82
  });
78
83
 
79
84
  console.log(response.status);
80
- console.log(await response.text());
85
+ console.log(await new Response(response.body).text());
81
86
  ```
82
87
 
83
88
  ---
84
89
 
85
90
  ## Configuration
86
91
 
87
- `BunTransport` reads configuration from `HttpClientOptions.network`.
92
+ `BunTransport` accepts a `BunTransportConfig` object:
93
+
94
+ ```ts
95
+ interface BunTransportConfig {
96
+ baseUrl?: string;
97
+ stealth?: StealthOptions;
98
+ }
99
+ ```
88
100
 
89
- Supported options:
101
+ ### Network options
90
102
 
91
103
  ```ts
92
104
  network?: {
93
105
  maxConcurrent?: number;
94
106
  timeout?: number;
95
- userAgent?: string;
96
107
  keepAliveTimeout?: number;
97
108
  rejectUnauthorized?: boolean;
109
+ cookieCache?: {
110
+ enabled?: boolean;
111
+ maxSize?: number;
112
+ ttl?: number;
113
+ };
114
+ cache?: {
115
+ enabled?: boolean;
116
+ maxSize?: number;
117
+ ttl?: number;
118
+ };
98
119
  }
99
120
  ```
100
121
 
101
- ### Option behavior
102
-
103
- - `maxConcurrent` — maximum number of concurrent active requests.
104
- - `timeout` — global request timeout in milliseconds.
105
- - `userAgent` — injected into `User-Agent` header if not explicitly set.
106
- - `keepAliveTimeout` — enables `keepalive` mode when provided.
107
- - `rejectUnauthorized` — passed to Bun `fetch` via `tls` configuration.
122
+ | Option | Description |
123
+ | -------------------- | ---------------------------------------------------------------------------------------------- |
124
+ | `maxConcurrent` | Maximum number of concurrent active requests (0 = unlimited) |
125
+ | `timeout` | Global request timeout in milliseconds (0 = no timeout) |
126
+ | `keepAliveTimeout` | Enables `keepalive` mode when provided |
127
+ | `rejectUnauthorized` | Passed to Bun `fetch` via `tls` configuration |
128
+ | `cookieCache` | Cookie cache settings: `enabled` (default true), `maxSize` (default 256), `ttl` (default 300s) |
129
+ | `cache` | Response cache settings for GET/HEAD: `enabled`, `maxSize` (default 256), `ttl` (default 30s) |
108
130
 
109
131
  ---
110
132
 
111
133
  ## Cookies
112
134
 
113
- The transport supports persistent cookie storage and reuse between requests.
135
+ The transport supports persistent cookie storage with TTL and LRU eviction, backed by `hcacher`.
114
136
 
115
137
  ### How it works
116
138
 
117
- 1. When the server returns `Set-Cookie`, cookies are stored per domain.
139
+ 1. When the server returns `Set-Cookie`, cookies are stored per domain with a TTL.
118
140
  2. On subsequent requests to the same domain, cookies are automatically attached to the `Cookie` header.
119
141
  3. If the user provides their own `Cookie` header, it is merged with stored cookies.
142
+ 4. Expired entries are evicted automatically (LRU).
120
143
 
121
144
  ### Example
122
145
 
123
146
  ```ts
124
147
  await transport.execute({
125
- url: "https://example.com/login",
148
+ url: "/login",
126
149
  method: "POST",
127
- headers: {
128
- "Content-Type": "application/json",
129
- },
150
+ protocol: "rest",
151
+ headers: { "Content-Type": "application/json" },
130
152
  body: JSON.stringify({ login: "demo", password: "secret" }),
131
153
  });
132
154
 
155
+ // Cookies from /login are automatically sent
133
156
  const res = await transport.execute({
134
- url: "https://example.com/profile",
157
+ url: "/profile",
135
158
  method: "GET",
159
+ protocol: "rest",
136
160
  headers: {},
137
161
  body: null,
138
162
  });
@@ -140,6 +164,26 @@ const res = await transport.execute({
140
164
 
141
165
  ---
142
166
 
167
+ ## Response caching
168
+
169
+ When `network.cache` is configured, GET and HEAD requests are cached automatically with TTL and LRU eviction.
170
+
171
+ ```ts
172
+ const transport = new BunTransport({
173
+ network: {
174
+ cache: {
175
+ enabled: true,
176
+ maxSize: 512,
177
+ ttl: 60_000, // 1 minute
178
+ },
179
+ },
180
+ });
181
+ ```
182
+
183
+ Cached responses are returned instantly on repeated requests to the same URL within the TTL window.
184
+
185
+ ---
186
+
143
187
  ## Concurrency limiting
144
188
 
145
189
  If `maxConcurrent > 0`, incoming requests are queued until a slot becomes available.
@@ -164,20 +208,50 @@ If a request is aborted, the signal reason (or a default `AbortError`) is thrown
164
208
 
165
209
  ---
166
210
 
211
+ ## Stealth / fingerprint mimicry
212
+
213
+ `BunTransport` supports browser-like TLS fingerprint emulation to bypass fingerprint-based protections (JA3/JA4).
214
+
215
+ ### Supported profiles
216
+
217
+ | Profile | TLS ciphers | sec-ch-ua | User-Agent |
218
+ | ------- | ------------- | ------------- | ----------- |
219
+ | chrome | Chrome suite | Chrome 126 | Chrome 126 |
220
+ | firefox | Firefox suite | Firefox-style | Firefox 126 |
221
+ | safari | Safari suite | — | Safari 17.0 |
222
+ | edge | Chrome suite | Chrome 126 | Edge 126 |
223
+
224
+ ### Example
225
+
226
+ ```ts
227
+ const transport = new BunTransport({
228
+ stealth: {
229
+ fingerprint: "chrome",
230
+ },
231
+ });
232
+ ```
233
+
234
+ Stealth presets are applied per-request. Manual headers always take priority over preset values.
235
+
236
+ ---
237
+
167
238
  ## Response API
168
239
 
169
- `BunTransportResponse` wraps the native `Response` and provides:
240
+ `execute()` returns a plain `TransportResponse` object:
170
241
 
171
- - `status`
172
- - `url`
173
- - `body`
174
- - `text()`
175
- - `json()`
176
- - `headers`
242
+ ```ts
243
+ interface TransportResponse {
244
+ status: number;
245
+ statusText?: string;
246
+ url?: string;
247
+ headers: Readonly<Record<string, string | string[]>>;
248
+ body: unknown;
249
+ }
250
+ ```
177
251
 
178
252
  ### Body behavior
179
253
 
180
- If `body` exists, a `dump()` method may be attached to it, allowing safe stream consumption and resource cleanup.
254
+ `body` is the raw native `ReadableStream` returned by Bun. Parse or consume it in the core layer, for example with `new Response(response.body).text()`.
181
255
 
182
256
  ---
183
257
 
@@ -185,22 +259,15 @@ If `body` exists, a `dump()` method may be attached to it, allowing safe stream
185
259
 
186
260
  ### `fastGetHostname(url: string): string`
187
261
 
188
- Fast hostname extraction from a URL without full parsing.
189
-
190
- ### `normalizeHeaderValue(name, value)`
191
-
192
- Normalizes header values:
193
-
194
- - `Cookie` headers are joined using `;`
195
- - other arrays are joined using `,`
262
+ Fast hostname extraction from a URL with single-entry LRU cache. Handles `//`, `scheme://`, `user@host`, and port stripping.
196
263
 
197
- ### `normalizeCookieHeader(value)`
264
+ ### `resolveUrl(baseUrl: string, url: string): string`
198
265
 
199
- Converts cookie header values into a normalized string.
266
+ Resolves a relative URL against a `baseUrl`. Absolute URLs are returned as-is.
200
267
 
201
- ### `throwIfAborted(signal)`
268
+ ### `normalizeHeaders(headers): Record<string, string>`
202
269
 
203
- Checks whether an operation has been aborted and throws if so.
270
+ Normalizes headers: lowercases all keys, joins arrays (`;` for `cookie`, `,` for others).
204
271
 
205
272
  ---
206
273
 
@@ -216,8 +283,10 @@ await transport.destroy();
216
283
  Both methods clear:
217
284
 
218
285
  - pending request queue
219
- - cookie jar
220
- - cookie cache
286
+ - cookie store
287
+ - cookie string cache
288
+ - response cache
289
+ - active request counter
221
290
 
222
291
  ---
223
292
 
@@ -226,7 +295,7 @@ Both methods clear:
226
295
  - Designed specifically for the **Bun runtime**, not Node.js.
227
296
  - Uses `redirect: "manual"` for fetch requests.
228
297
  - Minimal interference with request data; only headers, cookies, and signals are normalized or extended.
229
- - `TransportRequest.body` is treated as `BodyInit | null`.
298
+ - `TransportRequest.body` is passed directly as `BodyInit | null`.
230
299
 
231
300
  ---
232
301
 
package/bun.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { HyperTransport, TransportRequest, TransportResponse } from "@hyperttp/types";
2
- import type { BunTransportConfig } from "./types/index.js";
2
+ import type { BunTransportConfig, StealthOptions } from "./types/index.js";
3
3
  /**
4
4
  * @ru Высокопроизводительный HTTP-транспорт для Bun с нативными оптимизациями и поддержкой Stealth-мимикрии.
5
5
  * Включает управление параллелизмом, cookie jar и кэширование доменов.
@@ -7,31 +7,38 @@ import type { BunTransportConfig } from "./types/index.js";
7
7
  * Includes concurrency management, cookie jar, and domain caching.
8
8
  */
9
9
  export declare class BunTransport implements HyperTransport {
10
+ readonly protocols: readonly ["rest"];
11
+ supports(protocol: string): boolean;
10
12
  /**
11
13
  * @ru Конфигурация транспорта.
12
14
  * @en Transport configuration.
13
15
  */
14
16
  config: BunTransportConfig;
15
17
  /**
16
- * @ru Хранилище cookies по доменам (domain -> name -> value).
17
- * @en Cookie storage by domain (domain -> name -> value).
18
+ * @ru Кэш cookies по доменам с TTL и LRU-эвикцией (domain -> name -> value).
19
+ * @en Cookie cache by domain with TTL and LRU eviction (domain -> name -> value).
18
20
  */
19
- private cookieJar;
21
+ private readonly cookieStore;
20
22
  /**
21
- * @ru Список всех доменов, для которых хранятся cookies.
22
- * @en List of all domains for which cookies are stored.
23
+ * @ru Кэш сгенерированных строк cookies с TTL.
24
+ * @en Cache of generated cookie strings with TTL.
23
25
  */
24
- private readonly cookieDomains;
26
+ private readonly cookieStringCache;
25
27
  /**
26
- * @ru Кэш сгенерированных строк cookies для быстрого доступа.
27
- * @en Cache of generated cookie strings for fast access.
28
+ * @ru Наличие cookies в jar. Пока сервер не установил cookie, полностью пропускаем cookie hot path.
29
+ * @en Whether the jar contains cookies. Skip the cookie hot path until a server sets one.
28
30
  */
29
- private cookieCache;
31
+ private hasCookies;
30
32
  /**
31
- * @ru Текущий размер кэша cookies.
32
- * @en Current size of the cookie cache.
33
+ * @ru Включено ли cookie-хранилище. При отключении исключаем cookie work из hot path.
34
+ * @en Whether the cookie store is enabled. When disabled, skip cookie work in the hot path.
33
35
  */
34
- private cookieCacheSize;
36
+ private readonly cookiesEnabled;
37
+ /**
38
+ * @ru Опциональный кэш HTTP-ответов для GET/HEAD запросов.
39
+ * @en Optional HTTP response cache for GET/HEAD requests.
40
+ */
41
+ private readonly responseCache?;
35
42
  /**
36
43
  * @ru Счётчик активных (выполняющихся) запросов.
37
44
  * @en Counter of active (in-flight) requests.
@@ -92,7 +99,9 @@ export declare class BunTransport implements HyperTransport {
92
99
  * @returns Promise resolving to the transport response.
93
100
  * @throws Error if the request is aborted or times out.
94
101
  */
95
- execute(req: TransportRequest): Promise<TransportResponse>;
102
+ execute(req: TransportRequest & {
103
+ stealth?: StealthOptions;
104
+ }): Promise<TransportResponse>;
96
105
  /**
97
106
  * @ru Получает строку cookies для указанного домена с учётом родительских доменов.
98
107
  * @en Gets the cookie string for the specified domain, considering parent domains.
@@ -100,6 +109,11 @@ export declare class BunTransport implements HyperTransport {
100
109
  * @returns Semicolon-separated cookie string.
101
110
  */
102
111
  private getCookiesForDomain;
112
+ /**
113
+ * @ru Возвращает все домены из cookie store.
114
+ * @en Returns all domains from the cookie store.
115
+ */
116
+ private getAllCookieDomains;
103
117
  /**
104
118
  * @ru Сохраняет cookies из заголовков Set-Cookie ответа в cookie jar.
105
119
  * @en Stores cookies from response Set-Cookie headers into the cookie jar.
package/bun.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bun.d.ts","sourceRoot":"","sources":["../src/bun.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EAIlB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAgI3D;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,cAAc;IACjD;;;OAGG;IACI,MAAM,EAAE,kBAAkB,CAAC;IAElC;;;OAGG;IACH,OAAO,CAAC,SAAS,CAA+D;IAEhF;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C;;;OAGG;IACH,OAAO,CAAC,WAAW,CAA+C;IAElE;;;OAGG;IACH,OAAO,CAAC,eAAe,CAAK;IAE5B;;;OAGG;IACH,OAAO,CAAC,cAAc,CAAK;IAE3B;;;OAGG;IACH,OAAO,CAAC,gBAAgB,CAAmD;IAE3E;;;OAGG;IACH,OAAO,CAAC,SAAS,CAAK;IAEtB;;;OAGG;IACH,OAAO,CAAC,SAAS,CAAK;IAEtB;;;OAGG;IACH,OAAO,CAAC,cAAc,CAAK;IAE3B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAK;IAErB;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAS;IAE3B;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAkE;IAEpF;;;;OAIG;gBACS,MAAM,EAAE,kBAAkB;IAKtC;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;;;;OAMG;IACU,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAoHvE;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAgC3B;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAwDpB;;;;;;OAMG;YACW,WAAW;IAmBzB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAkBnB;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWnC;;;;OAIG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGtC"}
1
+ {"version":3,"file":"bun.d.ts","sourceRoot":"","sources":["../src/bun.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC3F,OAAO,KAAK,EAAE,kBAAkB,EAAe,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAiIxF;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,cAAc;IACjD,SAAgB,SAAS,YAAI,MAAM,EAAW;IAEvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzC;IAED;;;OAGG;IACI,MAAM,EAAE,kBAAkB,CAAC;IAElC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IAEnE;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuB;IAEzD;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAS;IAE3B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IAEzC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAkC;IAEjE;;;OAGG;IACH,OAAO,CAAC,cAAc,CAAK;IAE3B;;;OAGG;IACH,OAAO,CAAC,gBAAgB,CAAmD;IAE3E;;;OAGG;IACH,OAAO,CAAC,SAAS,CAAK;IAEtB;;;OAGG;IACH,OAAO,CAAC,SAAS,CAAK;IAEtB;;;OAGG;IACH,OAAO,CAAC,cAAc,CAAK;IAE3B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAK;IAErB;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAS;IAE3B;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAkE;IAEpF;;;;OAIG;IACH,YAAY,MAAM,EAAE,kBAAkB,EA8BrC;IAED;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;;;;OAMG;IACU,OAAO,CAClB,GAAG,EAAE,gBAAgB,GAAG;QAAE,OAAO,CAAC,EAAE,cAAc,CAAA;KAAE,GACnD,OAAO,CAAC,iBAAiB,CAAC,CAsI5B;IAED;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IA+CpB;;;;;;OAMG;YACW,WAAW;IAmBzB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAkBnB;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CASlC;IAED;;;;OAIG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpC;CACF"}
package/bun.js CHANGED
@@ -1,4 +1,5 @@
1
- import { fastGetHostname, getAbortError, normalizeBody, normalizeHeaders, resolveUrl, TIMEOUT_ERROR, } from "./utils/helpers.js";
1
+ import { fastGetHostname, getAbortError, EMPTY_HEADERS, normalizeHeaders, resolveUrl, TIMEOUT_ERROR, } from "./utils/helpers.js";
2
+ import { CacheManager } from "hcacher";
2
3
  /**
3
4
  * @ru Статические пресеты браузерных заголовков для маскировки под реальных пользователей.
4
5
  * Используются stealth-режимом для обхода fingerprint-защит.
@@ -109,31 +110,40 @@ function applyStealthHeaders(headers, stealth) {
109
110
  * Includes concurrency management, cookie jar, and domain caching.
110
111
  */
111
112
  export class BunTransport {
113
+ protocols = ["rest"];
114
+ supports(protocol) {
115
+ return protocol === "rest";
116
+ }
112
117
  /**
113
118
  * @ru Конфигурация транспорта.
114
119
  * @en Transport configuration.
115
120
  */
116
121
  config;
117
122
  /**
118
- * @ru Хранилище cookies по доменам (domain -> name -> value).
119
- * @en Cookie storage by domain (domain -> name -> value).
123
+ * @ru Кэш cookies по доменам с TTL и LRU-эвикцией (domain -> name -> value).
124
+ * @en Cookie cache by domain with TTL and LRU eviction (domain -> name -> value).
125
+ */
126
+ cookieStore;
127
+ /**
128
+ * @ru Кэш сгенерированных строк cookies с TTL.
129
+ * @en Cache of generated cookie strings with TTL.
120
130
  */
121
- cookieJar = Object.create(null);
131
+ cookieStringCache;
122
132
  /**
123
- * @ru Список всех доменов, для которых хранятся cookies.
124
- * @en List of all domains for which cookies are stored.
133
+ * @ru Наличие cookies в jar. Пока сервер не установил cookie, полностью пропускаем cookie hot path.
134
+ * @en Whether the jar contains cookies. Skip the cookie hot path until a server sets one.
125
135
  */
126
- cookieDomains = [];
136
+ hasCookies = false;
127
137
  /**
128
- * @ru Кэш сгенерированных строк cookies для быстрого доступа.
129
- * @en Cache of generated cookie strings for fast access.
138
+ * @ru Включено ли cookie-хранилище. При отключении исключаем cookie work из hot path.
139
+ * @en Whether the cookie store is enabled. When disabled, skip cookie work in the hot path.
130
140
  */
131
- cookieCache = Object.create(null);
141
+ cookiesEnabled;
132
142
  /**
133
- * @ru Текущий размер кэша cookies.
134
- * @en Current size of the cookie cache.
143
+ * @ru Опциональный кэш HTTP-ответов для GET/HEAD запросов.
144
+ * @en Optional HTTP response cache for GET/HEAD requests.
135
145
  */
136
- cookieCacheSize = 0;
146
+ responseCache;
137
147
  /**
138
148
  * @ru Счётчик активных (выполняющихся) запросов.
139
149
  * @en Counter of active (in-flight) requests.
@@ -181,6 +191,29 @@ export class BunTransport {
181
191
  */
182
192
  constructor(config) {
183
193
  this.config = config;
194
+ const cookieCfg = config?.network?.cookieCache;
195
+ this.cookiesEnabled = cookieCfg?.enabled ?? true;
196
+ this.cookieStore = new CacheManager({
197
+ enabled: this.cookiesEnabled,
198
+ maxSize: cookieCfg?.maxSize ?? 256,
199
+ ttl: cookieCfg?.ttl ?? 300_000,
200
+ touchOnGet: true,
201
+ });
202
+ this.cookieStringCache = new CacheManager({
203
+ enabled: this.cookiesEnabled,
204
+ maxSize: cookieCfg?.maxSize ?? 1024,
205
+ ttl: cookieCfg?.ttl ?? 60_000,
206
+ touchOnGet: true,
207
+ });
208
+ const cacheCfg = config?.network?.cache;
209
+ if (cacheCfg?.enabled !== false && (cacheCfg?.maxSize || cacheCfg?.ttl)) {
210
+ this.responseCache = new CacheManager({
211
+ enabled: cacheCfg?.enabled ?? true,
212
+ maxSize: cacheCfg?.maxSize ?? 256,
213
+ ttl: cacheCfg?.ttl ?? 30_000,
214
+ touchOnGet: true,
215
+ });
216
+ }
184
217
  this.invalidateConfig();
185
218
  }
186
219
  /**
@@ -208,6 +241,8 @@ export class BunTransport {
208
241
  const timeoutMs = this._timeout;
209
242
  let signal = req.signal;
210
243
  let timer = null;
244
+ let abortHandler = null;
245
+ let originalSignal = null;
211
246
  if (timeoutMs > 0) {
212
247
  if (!signal) {
213
248
  signal = AbortSignal.timeout(timeoutMs);
@@ -217,43 +252,74 @@ export class BunTransport {
217
252
  }
218
253
  else {
219
254
  const controller = new AbortController();
220
- const originalSignal = signal;
221
- originalSignal.addEventListener("abort", () => controller.abort(originalSignal.reason), {
222
- once: true,
223
- });
255
+ originalSignal = signal;
256
+ abortHandler = () => controller.abort(originalSignal.reason);
257
+ originalSignal.addEventListener("abort", abortHandler);
224
258
  timer = setTimeout(() => controller.abort(TIMEOUT_ERROR), timeoutMs);
225
259
  signal = controller.signal;
226
260
  }
227
261
  }
228
- if (signal?.aborted)
262
+ if (signal?.aborted) {
263
+ if (timer !== null)
264
+ clearTimeout(timer);
265
+ if (originalSignal && abortHandler)
266
+ originalSignal.removeEventListener("abort", abortHandler);
229
267
  throw getAbortError(signal);
268
+ }
230
269
  if (maxConcurrent > 0 && this.activeRequests >= maxConcurrent) {
231
- await this.waitForSlot(signal);
232
- if (signal?.aborted)
270
+ try {
271
+ await this.waitForSlot(signal);
272
+ }
273
+ catch (err) {
274
+ if (timer !== null)
275
+ clearTimeout(timer);
276
+ if (originalSignal && abortHandler)
277
+ originalSignal.removeEventListener("abort", abortHandler);
278
+ throw err;
279
+ }
280
+ if (signal?.aborted) {
281
+ if (timer !== null)
282
+ clearTimeout(timer);
283
+ if (originalSignal && abortHandler)
284
+ originalSignal.removeEventListener("abort", abortHandler);
233
285
  throw getAbortError(signal);
286
+ }
234
287
  }
235
288
  this.activeRequests++;
236
289
  try {
237
290
  const fullUrl = resolveUrl(this.config?.baseUrl ?? "", req.url);
291
+ if (this.responseCache && (req.method === "GET" || req.method === "HEAD") && !req.body) {
292
+ const cacheKey = `${req.method}:${fullUrl}`;
293
+ const cached = this.responseCache.get(cacheKey);
294
+ if (cached !== undefined) {
295
+ return cached;
296
+ }
297
+ }
238
298
  let headers = normalizeHeaders(req.headers);
239
- const requestDomain = fastGetHostname(fullUrl);
240
- const activeCookies = this.getCookiesForDomain(requestDomain);
241
- if (activeCookies.length > 0) {
242
- headers["cookie"] = headers["cookie"]
243
- ? headers["cookie"] + "; " + activeCookies
244
- : activeCookies;
299
+ if (this.hasCookies) {
300
+ const activeCookies = this.getCookiesForDomain(fastGetHostname(fullUrl));
301
+ if (activeCookies.length > 0) {
302
+ if (headers === EMPTY_HEADERS)
303
+ headers = Object.create(null);
304
+ headers["cookie"] = headers["cookie"]
305
+ ? headers["cookie"] + "; " + activeCookies
306
+ : activeCookies;
307
+ }
245
308
  }
246
309
  const stealth = req.stealth || this.config.stealth ? { ...this.config.stealth, ...req.stealth } : undefined;
247
310
  if (stealth) {
311
+ if (headers === EMPTY_HEADERS)
312
+ headers = Object.create(null);
248
313
  headers = applyStealthHeaders(headers, stealth);
249
314
  }
250
315
  const init = {
251
316
  method: req.method,
252
- redirect: "manual",
253
- headers: headers,
317
+ redirect: req.redirect ?? "manual",
254
318
  };
319
+ if (headers !== EMPTY_HEADERS)
320
+ init.headers = headers;
255
321
  if (req.body !== undefined)
256
- init.body = normalizeBody(req.body);
322
+ init.body = req.body;
257
323
  if (signal !== undefined)
258
324
  init.signal = signal;
259
325
  if (this._keepalive)
@@ -270,41 +336,31 @@ export class BunTransport {
270
336
  if (requestTlsConfig !== null)
271
337
  init.tls = requestTlsConfig;
272
338
  const nativeRes = await fetch(fullUrl, init);
273
- if (timer !== null) {
274
- clearTimeout(timer);
275
- timer = null;
276
- }
277
339
  this.storeCookies(fullUrl, nativeRes.headers);
278
340
  const bodyStream = nativeRes.body;
279
- if (bodyStream !== null && typeof bodyStream.dump !== "function") {
280
- Object.defineProperty(bodyStream, "dump", {
281
- value: function () {
282
- return this.cancel();
283
- },
284
- enumerable: false,
285
- configurable: true,
286
- });
287
- }
288
- const responseHeaders = (() => {
289
- const resH = Object.create(null);
290
- nativeRes.headers.forEach((value, key) => {
291
- resH[key.toLowerCase()] = value;
292
- });
293
- return resH;
294
- })();
295
- return {
341
+ const responseHeaders = Object.create(null);
342
+ nativeRes.headers.forEach((value, key) => {
343
+ responseHeaders[key] = value;
344
+ });
345
+ const response = {
296
346
  status: nativeRes.status,
297
347
  url: nativeRes.url,
298
348
  body: bodyStream,
299
349
  headers: responseHeaders,
300
350
  };
301
- }
302
- catch (err) {
303
- if (timer !== null)
304
- clearTimeout(timer);
305
- throw err;
351
+ if (this.responseCache && (req.method === "GET" || req.method === "HEAD") && !req.body) {
352
+ const cacheKey = `${req.method}:${fullUrl}`;
353
+ this.responseCache.set(cacheKey, response);
354
+ }
355
+ return response;
306
356
  }
307
357
  finally {
358
+ if (timer !== null) {
359
+ clearTimeout(timer);
360
+ }
361
+ if (originalSignal && abortHandler) {
362
+ originalSignal.removeEventListener("abort", abortHandler);
363
+ }
308
364
  this.activeRequests--;
309
365
  if (maxConcurrent > 0)
310
366
  this.releaseSlot();
@@ -317,18 +373,16 @@ export class BunTransport {
317
373
  * @returns Semicolon-separated cookie string.
318
374
  */
319
375
  getCookiesForDomain(requestDomain) {
320
- const cached = this.cookieCache[requestDomain];
376
+ const cached = this.cookieStringCache.get(requestDomain);
321
377
  if (cached !== undefined)
322
378
  return cached;
323
379
  let result = "";
324
- const domainsLen = this.cookieDomains.length;
325
- for (let i = 0; i < domainsLen; i++) {
326
- const storedDomain = this.cookieDomains[i];
327
- if (!storedDomain)
328
- continue;
380
+ const domains = this.cookieStore.size > 0 ? this.getAllCookieDomains() : [];
381
+ for (let i = 0; i < domains.length; i++) {
382
+ const storedDomain = domains[i];
329
383
  if (requestDomain !== storedDomain && !requestDomain.endsWith("." + storedDomain))
330
384
  continue;
331
- const cookiesMap = this.cookieJar[storedDomain];
385
+ const cookiesMap = this.cookieStore.get(storedDomain);
332
386
  if (!cookiesMap)
333
387
  continue;
334
388
  for (const key in cookiesMap) {
@@ -337,14 +391,21 @@ export class BunTransport {
337
391
  result += key + "=" + cookiesMap[key];
338
392
  }
339
393
  }
340
- if (this.cookieCacheSize > 1024) {
341
- this.cookieCache = Object.create(null);
342
- this.cookieCacheSize = 0;
343
- }
344
- this.cookieCache[requestDomain] = result;
345
- this.cookieCacheSize++;
394
+ this.cookieStringCache.set(requestDomain, result);
346
395
  return result;
347
396
  }
397
+ /**
398
+ * @ru Возвращает все домены из cookie store.
399
+ * @en Returns all domains from the cookie store.
400
+ */
401
+ getAllCookieDomains() {
402
+ const domains = [];
403
+ const store = this.cookieStore.storage;
404
+ for (const key of store.keys()) {
405
+ domains.push(key);
406
+ }
407
+ return domains;
408
+ }
348
409
  /**
349
410
  * @ru Сохраняет cookies из заголовков Set-Cookie ответа в cookie jar.
350
411
  * @en Stores cookies from response Set-Cookie headers into the cookie jar.
@@ -352,13 +413,12 @@ export class BunTransport {
352
413
  * @param headers - Response headers containing Set-Cookie values.
353
414
  */
354
415
  storeCookies(requestUrl, headers) {
355
- if (typeof headers.getSetCookie !== "function")
416
+ if (!this.cookiesEnabled || typeof headers.getSetCookie !== "function")
356
417
  return;
357
418
  const setCookies = headers.getSetCookie();
358
419
  if (setCookies.length === 0)
359
420
  return;
360
421
  const defaultDomain = fastGetHostname(requestUrl);
361
- let hasChanges = false;
362
422
  for (let i = 0; i < setCookies.length; i++) {
363
423
  const rawCookie = setCookies[i];
364
424
  if (!rawCookie)
@@ -386,18 +446,11 @@ export class BunTransport {
386
446
  }
387
447
  }
388
448
  }
389
- if (this.cookieJar[domain] === undefined) {
390
- this.cookieJar[domain] = Object.create(null);
391
- if (!this.cookieDomains.includes(domain)) {
392
- this.cookieDomains.push(domain);
393
- }
394
- }
395
- this.cookieJar[domain][name] = value;
396
- hasChanges = true;
397
- }
398
- if (hasChanges) {
399
- this.cookieCache = Object.create(null);
400
- this.cookieCacheSize = 0;
449
+ const existing = this.cookieStore.get(domain) ?? Object.create(null);
450
+ existing[name] = value;
451
+ this.cookieStore.set(domain, existing);
452
+ this.hasCookies = true;
453
+ this.cookieStringCache.delete(domain);
401
454
  }
402
455
  }
403
456
  /**
@@ -452,10 +505,10 @@ export class BunTransport {
452
505
  this.concurrencyQueue = Object.create(null);
453
506
  this.queueHead = 0;
454
507
  this.queueTail = 0;
455
- this.cookieJar = Object.create(null);
456
- this.cookieDomains.length = 0;
457
- this.cookieCache = Object.create(null);
458
- this.cookieCacheSize = 0;
508
+ this.cookieStore.clear();
509
+ this.cookieStringCache.clear();
510
+ this.hasCookies = false;
511
+ this.responseCache?.clear();
459
512
  this.activeRequests = 0;
460
513
  }
461
514
  /**
package/bun.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bun.js","sourceRoot":"","sources":["../src/bun.ts"],"names":[],"mappings":"AASA,OAAO,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,aAAa,GACd,MAAM,oBAAoB,CAAC;AAE5B;;;;;GAKG;AACH,MAAM,sBAAsB,GAA2C;IACrE,MAAM,EAAE;QACN,WAAW,EAAE,kEAAkE;QAC/E,kBAAkB,EAAE,IAAI;QACxB,oBAAoB,EAAE,SAAS;QAC/B,gBAAgB,EAAE,UAAU;QAC5B,gBAAgB,EAAE,UAAU;QAC5B,gBAAgB,EAAE,MAAM;QACxB,gBAAgB,EAAE,IAAI;QACtB,2BAA2B,EAAE,GAAG;QAChC,iBAAiB,EAAE,gBAAgB;KACpC;IACD,OAAO,EAAE;QACP,gBAAgB,EAAE,UAAU;QAC5B,gBAAgB,EAAE,UAAU;QAC5B,gBAAgB,EAAE,MAAM;QACxB,iBAAiB,EAAE,gBAAgB;QACnC,2BAA2B,EAAE,GAAG;KACjC;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,kBAAkB,GAA2B;IACjD,MAAM,EACJ,uGAAuG;IACzG,OAAO,EAAE,iEAAiE;IAC1E,MAAM,EACJ,uHAAuH;IACzH,IAAI,EAAE,qHAAqH;CAC5H,CAAC;AAEF;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,WAAoC;IAChE,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAE5B,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACT,OAAO;gBACL,wBAAwB;gBACxB,wBAAwB;gBACxB,8BAA8B;gBAC9B,+BAA+B;gBAC/B,6BAA6B;aAC9B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEd,KAAK,SAAS;YACZ,OAAO;gBACL,wBAAwB;gBACxB,8BAA8B;gBAC9B,wBAAwB;gBACxB,+BAA+B;gBAC/B,6BAA6B;aAC9B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEd,KAAK,QAAQ;YACX,OAAO;gBACL,wBAAwB;gBACxB,8BAA8B;gBAC9B,wBAAwB;gBACxB,+BAA+B;gBAC/B,6BAA6B;aAC9B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEd;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAC1B,OAA+B,EAC/B,OAAuB;IAEvB,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW;QAAE,OAAO,OAAO,CAAC;IAErD,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IACvC,MAAM,aAAa,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAEzD,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAE,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,cAAc,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;QAC5F,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;QACpC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IACvB;;;OAGG;IACI,MAAM,CAAqB;IAElC;;;OAGG;IACK,SAAS,GAA2C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEhF;;;OAGG;IACc,aAAa,GAAa,EAAE,CAAC;IAE9C;;;OAGG;IACK,WAAW,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAElE;;;OAGG;IACK,eAAe,GAAG,CAAC,CAAC;IAE5B;;;OAGG;IACK,cAAc,GAAG,CAAC,CAAC;IAE3B;;;OAGG;IACK,gBAAgB,GAA+B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE3E;;;OAGG;IACK,SAAS,GAAG,CAAC,CAAC;IAEtB;;;OAGG;IACK,SAAS,GAAG,CAAC,CAAC;IAEtB;;;OAGG;IACK,cAAc,GAAG,CAAC,CAAC;IAE3B;;;OAGG;IACK,QAAQ,GAAG,CAAC,CAAC;IAErB;;;OAGG;IACK,UAAU,GAAG,KAAK,CAAC;IAE3B;;;OAGG;IACK,UAAU,GAA6D,IAAI,CAAC;IAEpF;;;;OAIG;IACH,YAAY,MAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACK,gBAAgB;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,GAAG,EAAE,aAAa,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,OAAO,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,EAAE,gBAAgB,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,EAAE,kBAAkB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;IAC7F,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,OAAO,CAAC,GAAqB;QACxC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEhC,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACxB,IAAI,KAAK,GAAyC,IAAI,CAAC;QAEvD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC1B,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;gBACzC,MAAM,cAAc,GAAG,MAAM,CAAC;gBAE9B,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;oBACtF,IAAI,EAAE,IAAI;iBACX,CAAC,CAAC;gBACH,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC;gBACrE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,aAAa,EAAE,CAAC;YAC9D,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAChE,IAAI,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAA2B,CAAC;YAEtE,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;YAC9D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;oBACnC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,aAAa;oBAC1C,CAAC,CAAC,aAAa,CAAC;YACpB,CAAC;YAED,MAAM,OAAO,GACX,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAE9F,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,IAAI,GAAoC;gBAC5C,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,OAAsB;aAChC,CAAC;YAEF,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAC/C,IAAI,IAAI,CAAC,UAAU;gBAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAE3C,IAAI,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC;YACvC,IAAI,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;gBAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC7E,IAAI,OAAO,EAAE,CAAC;oBACZ,gBAAgB,GAAG,gBAAgB;wBACjC,CAAC,CAAC,EAAE,GAAG,gBAAgB,EAAE,OAAO,EAAE;wBAClC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC5C,CAAC;YACH,CAAC;YACD,IAAI,gBAAgB,KAAK,IAAI;gBAAE,IAAI,CAAC,GAAG,GAAG,gBAAgB,CAAC;YAE3D,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAE7C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;YAE9C,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC;YAClC,IAAI,UAAU,KAAK,IAAI,IAAI,OAAQ,UAAkB,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC1E,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE;oBACxC,KAAK,EAAE;wBACL,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;oBACvB,CAAC;oBACD,UAAU,EAAE,KAAK;oBACjB,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE;gBAC5B,MAAM,IAAI,GAAsC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACpE,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBACvC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;gBAClC,CAAC,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,EAAE,CAAC;YAEL,OAAO;gBACL,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,IAAI,EAAE,UAAiD;gBACvD,OAAO,EAAE,eAAe;aACzB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,KAAK,IAAI;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,aAAa,GAAG,CAAC;gBAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,mBAAmB,CAAC,aAAqB;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAExC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAE7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,YAAY;gBAAE,SAAS;YAE5B,IAAI,aAAa,KAAK,YAAY,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,GAAG,YAAY,CAAC;gBAAE,SAAS;YAE5F,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAChD,IAAI,CAAC,UAAU;gBAAE,SAAS;YAE1B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;oBAAE,MAAM,IAAI,IAAI,CAAC;gBACtC,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC;QACzC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACK,YAAY,CAAC,UAAkB,EAAE,OAAgB;QACvD,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,UAAU;YAAE,OAAO;QAEvD,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEpC,MAAM,aAAa,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,SAAS;gBAAE,SAAS;YAEzB,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YAExF,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,SAAS;YAE3B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,IAAI,MAAM,GAAG,aAAa,CAAC;YAE3B,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;oBAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;wBAChE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBACvC,IAAI,SAAS,EAAE,CAAC;4BACd,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBAC3E,CAAC;wBACD,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;gBACzC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC7C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACtC,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,WAAW,CAAC,MAAoB;QAC5C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAErC,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBAC1C,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC;YAEF,IAAI,MAAM;gBAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAEtE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,GAAG,EAAE;gBACxC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,WAAW;QACjB,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACnD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,EAAE,CAAC;gBACP,OAAO;YACT,CAAC;YACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAO;QAClB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"bun.js","sourceRoot":"","sources":["../src/bun.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperttp/transport-bun",
3
- "version": "0.2.3",
3
+ "version": "0.3.0",
4
4
  "description": "High-performance HTTP transport for Bun with native fetch optimizations",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -27,7 +27,8 @@
27
27
  "url": "git+https://github.com/IT-IF-OR/hyperttp-transport-bun.git"
28
28
  },
29
29
  "peerDependencies": {
30
- "@hyperttp/types": "^0.2.3"
30
+ "@hyperttp/types": "^0.3.0",
31
+ "hcacher": "^0.2.0"
31
32
  },
32
33
  "private": false
33
34
  }
package/types/index.d.ts CHANGED
@@ -1,9 +1,18 @@
1
- import type { HttpClientOptions, StealthOptions } from "@hyperttp/types";
1
+ export type Fingerprint = "chrome" | "firefox" | "safari" | "edge";
2
+ export interface StealthOptions {
3
+ fingerprint?: Fingerprint;
4
+ ciphers?: string;
5
+ }
6
+ export interface CacheOptions {
7
+ enabled?: boolean;
8
+ maxSize?: number;
9
+ ttl?: number;
10
+ }
2
11
  /**
3
12
  * @ru Конфигурация транспорта Bun.
4
13
  * @en Bun transport configuration.
5
14
  */
6
- export interface BunTransportConfig extends HttpClientOptions {
15
+ export interface BunTransportConfig {
7
16
  /**
8
17
  * @ru Базовый URL для всех запросов.
9
18
  * @en Base URL for all requests.
@@ -14,5 +23,13 @@ export interface BunTransportConfig extends HttpClientOptions {
14
23
  * @en Stealth options for TLS fingerprint emulation and DPI evasion strategies.
15
24
  */
16
25
  stealth?: StealthOptions;
26
+ network?: {
27
+ timeout?: number;
28
+ maxConcurrent?: number;
29
+ keepAliveTimeout?: number;
30
+ rejectUnauthorized?: boolean;
31
+ cache?: CacheOptions;
32
+ cookieCache?: CacheOptions;
33
+ };
17
34
  }
18
35
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEzE;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;IAEzB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,KAAK,CAAC,EAAE,YAAY,CAAC;QACrB,WAAW,CAAC,EAAE,YAAY,CAAC;KAC5B,CAAC;CACH"}
@@ -27,13 +27,7 @@ export declare const TIMEOUT_ERROR: DOMException;
27
27
  * @returns The abort error or reason.
28
28
  */
29
29
  export declare function getAbortError(signal?: AbortSignal): unknown;
30
- /**
31
- * @ru Нормализует тело запроса в формат, совместимый с fetch.
32
- * @en Normalizes request body to fetch-compatible format.
33
- * @param body - The request body to normalize.
34
- * @returns The normalized body or undefined.
35
- */
36
- export declare function normalizeBody(body: TransportRequest["body"]): BodyInit | undefined;
30
+ export declare const EMPTY_HEADERS: Record<string, string>;
37
31
  /**
38
32
  * @ru Нормализует заголовки, переводя все ключи в нижний регистр (lowercase).
39
33
  * @en Normalizes headers by transforming all keys into lowercase layout.
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAWxD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiDnD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,cAA+D,CAAC;AACxF,eAAO,MAAM,aAAa,cAGzB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,QAAQ,GAAG,SAAS,CAelF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoC7F"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAWxD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiDnD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,cAA+D,CAAC;AACxF,eAAO,MAAM,aAAa,cAGzB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAE3D;AAED,eAAO,MAAM,aAAa,EAAyC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE1F;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsC7F"}
package/utils/helpers.js CHANGED
@@ -89,70 +89,45 @@ export const TIMEOUT_ERROR = new DOMException("The operation was aborted due to
89
89
  export function getAbortError(signal) {
90
90
  return signal?.reason ?? ABORT_ERROR;
91
91
  }
92
- /**
93
- * @ru Нормализует тело запроса в формат, совместимый с fetch.
94
- * @en Normalizes request body to fetch-compatible format.
95
- * @param body - The request body to normalize.
96
- * @returns The normalized body or undefined.
97
- */
98
- export function normalizeBody(body) {
99
- if (body == null)
100
- return undefined;
101
- if (typeof body === "string")
102
- return body;
103
- if (body instanceof Uint8Array)
104
- return body;
105
- if (body instanceof ArrayBuffer)
106
- return body;
107
- if (ArrayBuffer.isView(body))
108
- return body;
109
- if (typeof ReadableStream !== "undefined" && body instanceof ReadableStream)
110
- return body;
111
- if (typeof URLSearchParams !== "undefined" && body instanceof URLSearchParams)
112
- return body;
113
- if (typeof FormData !== "undefined" && body instanceof FormData)
114
- return body;
115
- if (typeof Blob !== "undefined" && body instanceof Blob)
116
- return body;
117
- if (typeof body === "object")
118
- return JSON.stringify(body);
119
- return String(body);
120
- }
92
+ export const EMPTY_HEADERS = Object.freeze(Object.create(null));
121
93
  /**
122
94
  * @ru Нормализует заголовки, переводя все ключи в нижний регистр (lowercase).
123
95
  * @en Normalizes headers by transforming all keys into lowercase layout.
124
96
  */
125
97
  export function normalizeHeaders(headers) {
126
98
  if (!headers)
127
- return Object.create(null);
128
- const out = Object.create(null);
99
+ return EMPTY_HEADERS;
129
100
  if (headers instanceof Headers) {
101
+ let out;
130
102
  headers.forEach((value, key) => {
131
- out[key.toLowerCase()] = value;
103
+ (out ??= Object.create(null))[key.toLowerCase()] = value;
132
104
  });
133
- return out;
105
+ return out ?? EMPTY_HEADERS;
134
106
  }
135
107
  if (Array.isArray(headers)) {
108
+ let out;
136
109
  for (let i = 0; i < headers.length; i++) {
137
110
  const pair = headers[i];
138
111
  if (!pair)
139
112
  continue;
140
- out[pair[0].toLowerCase()] = pair[1];
113
+ (out ??= Object.create(null))[pair[0].toLowerCase()] = pair[1];
141
114
  }
142
- return out;
115
+ return out ?? EMPTY_HEADERS;
143
116
  }
144
117
  const src = headers;
118
+ let out;
145
119
  for (const key in src) {
146
120
  const value = src[key];
147
121
  if (value == null)
148
122
  continue;
149
123
  const lowerKey = key.toLowerCase();
124
+ const target = out ??= Object.create(null);
150
125
  if (Array.isArray(value)) {
151
- out[lowerKey] = lowerKey === "cookie" ? value.join("; ") : value.join(", ");
126
+ target[lowerKey] = lowerKey === "cookie" ? value.join("; ") : value.join(", ");
152
127
  continue;
153
128
  }
154
- out[lowerKey] = String(value);
129
+ target[lowerKey] = String(value);
155
130
  }
156
- return out;
131
+ return out ?? EMPTY_HEADERS;
157
132
  }
158
133
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"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"}