@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 +127 -58
- package/bun.d.ts +28 -14
- package/bun.d.ts.map +1 -1
- package/bun.js +139 -86
- package/bun.js.map +1 -1
- package/package.json +3 -2
- package/types/index.d.ts +19 -2
- package/types/index.d.ts.map +1 -1
- package/utils/helpers.d.ts +1 -7
- package/utils/helpers.d.ts.map +1 -1
- package/utils/helpers.js +13 -38
- package/utils/helpers.js.map +1 -1
package/README.md
CHANGED
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
# BunTransport
|
|
2
2
|
|
|
3
|
-
`BunTransport` is a
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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
|
|
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 "
|
|
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: "
|
|
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`
|
|
92
|
+
`BunTransport` accepts a `BunTransportConfig` object:
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
interface BunTransportConfig {
|
|
96
|
+
baseUrl?: string;
|
|
97
|
+
stealth?: StealthOptions;
|
|
98
|
+
}
|
|
99
|
+
```
|
|
88
100
|
|
|
89
|
-
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
|
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: "
|
|
148
|
+
url: "/login",
|
|
126
149
|
method: "POST",
|
|
127
|
-
|
|
128
|
-
|
|
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: "
|
|
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
|
-
`
|
|
240
|
+
`execute()` returns a plain `TransportResponse` object:
|
|
170
241
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
### `
|
|
264
|
+
### `resolveUrl(baseUrl: string, url: string): string`
|
|
198
265
|
|
|
199
|
-
|
|
266
|
+
Resolves a relative URL against a `baseUrl`. Absolute URLs are returned as-is.
|
|
200
267
|
|
|
201
|
-
### `
|
|
268
|
+
### `normalizeHeaders(headers): Record<string, string>`
|
|
202
269
|
|
|
203
|
-
|
|
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
|
|
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
|
|
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
|
|
17
|
-
* @en Cookie
|
|
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
|
|
21
|
+
private readonly cookieStore;
|
|
20
22
|
/**
|
|
21
|
-
* @ru
|
|
22
|
-
* @en
|
|
23
|
+
* @ru Кэш сгенерированных строк cookies с TTL.
|
|
24
|
+
* @en Cache of generated cookie strings with TTL.
|
|
23
25
|
*/
|
|
24
|
-
private readonly
|
|
26
|
+
private readonly cookieStringCache;
|
|
25
27
|
/**
|
|
26
|
-
* @ru
|
|
27
|
-
* @en
|
|
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
|
|
31
|
+
private hasCookies;
|
|
30
32
|
/**
|
|
31
|
-
* @ru
|
|
32
|
-
* @en
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
119
|
-
* @en Cookie
|
|
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
|
-
|
|
131
|
+
cookieStringCache;
|
|
122
132
|
/**
|
|
123
|
-
* @ru
|
|
124
|
-
* @en
|
|
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
|
-
|
|
136
|
+
hasCookies = false;
|
|
127
137
|
/**
|
|
128
|
-
* @ru
|
|
129
|
-
* @en
|
|
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
|
-
|
|
141
|
+
cookiesEnabled;
|
|
132
142
|
/**
|
|
133
|
-
* @ru
|
|
134
|
-
* @en
|
|
143
|
+
* @ru Опциональный кэш HTTP-ответов для GET/HEAD запросов.
|
|
144
|
+
* @en Optional HTTP response cache for GET/HEAD requests.
|
|
135
145
|
*/
|
|
136
|
-
|
|
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
|
-
|
|
221
|
-
|
|
222
|
-
|
|
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
|
-
|
|
232
|
-
|
|
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
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
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 =
|
|
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
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
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
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
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.
|
|
376
|
+
const cached = this.cookieStringCache.get(requestDomain);
|
|
321
377
|
if (cached !== undefined)
|
|
322
378
|
return cached;
|
|
323
379
|
let result = "";
|
|
324
|
-
const
|
|
325
|
-
for (let i = 0; i <
|
|
326
|
-
const storedDomain =
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
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.
|
|
456
|
-
this.
|
|
457
|
-
this.
|
|
458
|
-
this.
|
|
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":"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"}
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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"}
|
package/utils/helpers.d.ts
CHANGED
|
@@ -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.
|
package/utils/helpers.d.ts.map
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
126
|
+
target[lowerKey] = lowerKey === "cookie" ? value.join("; ") : value.join(", ");
|
|
152
127
|
continue;
|
|
153
128
|
}
|
|
154
|
-
|
|
129
|
+
target[lowerKey] = String(value);
|
|
155
130
|
}
|
|
156
|
-
return out;
|
|
131
|
+
return out ?? EMPTY_HEADERS;
|
|
157
132
|
}
|
|
158
133
|
//# sourceMappingURL=helpers.js.map
|
package/utils/helpers.js.map
CHANGED
|
@@ -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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"}
|