nlcurl 0.1.0 → 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 +5 -13
- package/dist/cli/args.d.ts +37 -5
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +6 -17
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/index.d.ts +3 -3
- package/dist/cli/index.js +25 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +24 -7
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +24 -12
- package/dist/cli/output.js.map +1 -1
- package/dist/cookies/jar.d.ts +45 -13
- package/dist/cookies/jar.d.ts.map +1 -1
- package/dist/cookies/jar.js +88 -29
- package/dist/cookies/jar.js.map +1 -1
- package/dist/cookies/parser.d.ts +25 -3
- package/dist/cookies/parser.d.ts.map +1 -1
- package/dist/cookies/parser.js +12 -7
- package/dist/cookies/parser.js.map +1 -1
- package/dist/core/client.d.ts +49 -33
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +65 -38
- package/dist/core/client.js.map +1 -1
- package/dist/core/errors.d.ts +94 -6
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +95 -6
- package/dist/core/errors.js.map +1 -1
- package/dist/core/request.d.ts +99 -32
- package/dist/core/request.d.ts.map +1 -1
- package/dist/core/request.js +0 -3
- package/dist/core/request.js.map +1 -1
- package/dist/core/response.d.ts +92 -8
- package/dist/core/response.d.ts.map +1 -1
- package/dist/core/response.js +92 -7
- package/dist/core/response.js.map +1 -1
- package/dist/core/session.d.ts +109 -14
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +143 -49
- package/dist/core/session.js.map +1 -1
- package/dist/fingerprints/akamai.d.ts +11 -11
- package/dist/fingerprints/akamai.d.ts.map +1 -1
- package/dist/fingerprints/akamai.js +10 -14
- package/dist/fingerprints/akamai.js.map +1 -1
- package/dist/fingerprints/database.d.ts +14 -15
- package/dist/fingerprints/database.d.ts.map +1 -1
- package/dist/fingerprints/database.js +14 -19
- package/dist/fingerprints/database.js.map +1 -1
- package/dist/fingerprints/extensions.d.ts +121 -27
- package/dist/fingerprints/extensions.d.ts.map +1 -1
- package/dist/fingerprints/extensions.js +132 -49
- package/dist/fingerprints/extensions.js.map +1 -1
- package/dist/fingerprints/ja3.d.ts +34 -18
- package/dist/fingerprints/ja3.d.ts.map +1 -1
- package/dist/fingerprints/ja3.js +34 -18
- package/dist/fingerprints/ja3.js.map +1 -1
- package/dist/fingerprints/profiles/chrome.d.ts +21 -10
- package/dist/fingerprints/profiles/chrome.d.ts.map +1 -1
- package/dist/fingerprints/profiles/chrome.js +25 -22
- package/dist/fingerprints/profiles/chrome.js.map +1 -1
- package/dist/fingerprints/profiles/edge.d.ts +10 -7
- package/dist/fingerprints/profiles/edge.d.ts.map +1 -1
- package/dist/fingerprints/profiles/edge.js +10 -10
- package/dist/fingerprints/profiles/edge.js.map +1 -1
- package/dist/fingerprints/profiles/firefox.d.ts +11 -3
- package/dist/fingerprints/profiles/firefox.d.ts.map +1 -1
- package/dist/fingerprints/profiles/firefox.js +15 -14
- package/dist/fingerprints/profiles/firefox.js.map +1 -1
- package/dist/fingerprints/profiles/safari.d.ts +14 -3
- package/dist/fingerprints/profiles/safari.d.ts.map +1 -1
- package/dist/fingerprints/profiles/safari.js +16 -13
- package/dist/fingerprints/profiles/safari.js.map +1 -1
- package/dist/fingerprints/profiles/tor.d.ts +8 -7
- package/dist/fingerprints/profiles/tor.d.ts.map +1 -1
- package/dist/fingerprints/profiles/tor.js +8 -14
- package/dist/fingerprints/profiles/tor.js.map +1 -1
- package/dist/fingerprints/types.d.ts +70 -47
- package/dist/fingerprints/types.d.ts.map +1 -1
- package/dist/fingerprints/types.js +0 -7
- package/dist/fingerprints/types.js.map +1 -1
- package/dist/http/h1/client.d.ts +30 -9
- package/dist/http/h1/client.d.ts.map +1 -1
- package/dist/http/h1/client.js +153 -20
- package/dist/http/h1/client.js.map +1 -1
- package/dist/http/h1/encoder.d.ts +9 -6
- package/dist/http/h1/encoder.d.ts.map +1 -1
- package/dist/http/h1/encoder.js +14 -13
- package/dist/http/h1/encoder.js.map +1 -1
- package/dist/http/h1/parser.d.ts +68 -14
- package/dist/http/h1/parser.d.ts.map +1 -1
- package/dist/http/h1/parser.js +92 -37
- package/dist/http/h1/parser.js.map +1 -1
- package/dist/http/h2/client.d.ts +87 -14
- package/dist/http/h2/client.d.ts.map +1 -1
- package/dist/http/h2/client.js +496 -74
- package/dist/http/h2/client.js.map +1 -1
- package/dist/http/h2/frames.d.ts +103 -6
- package/dist/http/h2/frames.d.ts.map +1 -1
- package/dist/http/h2/frames.js +96 -17
- package/dist/http/h2/frames.js.map +1 -1
- package/dist/http/h2/hpack.d.ts +40 -5
- package/dist/http/h2/hpack.d.ts.map +1 -1
- package/dist/http/h2/hpack.js +50 -36
- package/dist/http/h2/hpack.js.map +1 -1
- package/dist/http/negotiator.d.ts +36 -12
- package/dist/http/negotiator.d.ts.map +1 -1
- package/dist/http/negotiator.js +96 -24
- package/dist/http/negotiator.js.map +1 -1
- package/dist/http/pool.d.ts +66 -17
- package/dist/http/pool.d.ts.map +1 -1
- package/dist/http/pool.js +47 -20
- package/dist/http/pool.js.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -13
- package/dist/index.js.map +1 -1
- package/dist/middleware/interceptor.d.ts +40 -8
- package/dist/middleware/interceptor.d.ts.map +1 -1
- package/dist/middleware/interceptor.js +28 -6
- package/dist/middleware/interceptor.js.map +1 -1
- package/dist/middleware/rate-limiter.d.ts +18 -5
- package/dist/middleware/rate-limiter.d.ts.map +1 -1
- package/dist/middleware/rate-limiter.js +12 -7
- package/dist/middleware/rate-limiter.js.map +1 -1
- package/dist/middleware/retry.d.ts +17 -5
- package/dist/middleware/retry.d.ts.map +1 -1
- package/dist/middleware/retry.js +13 -11
- package/dist/middleware/retry.js.map +1 -1
- package/dist/proxy/http-proxy.d.ts +17 -9
- package/dist/proxy/http-proxy.d.ts.map +1 -1
- package/dist/proxy/http-proxy.js +9 -13
- package/dist/proxy/http-proxy.js.map +1 -1
- package/dist/proxy/socks.d.ts +20 -9
- package/dist/proxy/socks.d.ts.map +1 -1
- package/dist/proxy/socks.js +20 -31
- package/dist/proxy/socks.js.map +1 -1
- package/dist/tls/constants.d.ts +74 -4
- package/dist/tls/constants.d.ts.map +1 -1
- package/dist/tls/constants.js +75 -21
- package/dist/tls/constants.js.map +1 -1
- package/dist/tls/node-engine.d.ts +17 -16
- package/dist/tls/node-engine.d.ts.map +1 -1
- package/dist/tls/node-engine.js +20 -27
- package/dist/tls/node-engine.js.map +1 -1
- package/dist/tls/stealth/client-hello.d.ts +32 -16
- package/dist/tls/stealth/client-hello.d.ts.map +1 -1
- package/dist/tls/stealth/client-hello.js +13 -37
- package/dist/tls/stealth/client-hello.js.map +1 -1
- package/dist/tls/stealth/engine.d.ts +18 -10
- package/dist/tls/stealth/engine.d.ts.map +1 -1
- package/dist/tls/stealth/engine.js +55 -40
- package/dist/tls/stealth/engine.js.map +1 -1
- package/dist/tls/stealth/handshake.d.ts +31 -17
- package/dist/tls/stealth/handshake.d.ts.map +1 -1
- package/dist/tls/stealth/handshake.js +173 -74
- package/dist/tls/stealth/handshake.js.map +1 -1
- package/dist/tls/stealth/key-schedule.d.ts +90 -32
- package/dist/tls/stealth/key-schedule.d.ts.map +1 -1
- package/dist/tls/stealth/key-schedule.js +80 -46
- package/dist/tls/stealth/key-schedule.js.map +1 -1
- package/dist/tls/stealth/record-layer.d.ts +76 -25
- package/dist/tls/stealth/record-layer.d.ts.map +1 -1
- package/dist/tls/stealth/record-layer.js +66 -36
- package/dist/tls/stealth/record-layer.js.map +1 -1
- package/dist/tls/types.d.ts +33 -25
- package/dist/tls/types.d.ts.map +1 -1
- package/dist/tls/types.js +0 -4
- package/dist/tls/types.js.map +1 -1
- package/dist/utils/buffer-reader.d.ts +99 -7
- package/dist/utils/buffer-reader.d.ts.map +1 -1
- package/dist/utils/buffer-reader.js +99 -7
- package/dist/utils/buffer-reader.js.map +1 -1
- package/dist/utils/buffer-writer.d.ts +99 -10
- package/dist/utils/buffer-writer.d.ts.map +1 -1
- package/dist/utils/buffer-writer.js +101 -12
- package/dist/utils/buffer-writer.js.map +1 -1
- package/dist/utils/encoding.d.ts +33 -8
- package/dist/utils/encoding.d.ts.map +1 -1
- package/dist/utils/encoding.js +58 -13
- package/dist/utils/encoding.js.map +1 -1
- package/dist/utils/logger.d.ts +61 -2
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +52 -4
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/url.d.ts +47 -7
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +47 -7
- package/dist/utils/url.js.map +1 -1
- package/dist/ws/client.d.ts +60 -15
- package/dist/ws/client.d.ts.map +1 -1
- package/dist/ws/client.js +38 -27
- package/dist/ws/client.js.map +1 -1
- package/dist/ws/frame.d.ts +43 -9
- package/dist/ws/frame.d.ts.map +1 -1
- package/dist/ws/frame.js +35 -19
- package/dist/ws/frame.js.map +1 -1
- package/package.json +4 -4
package/dist/core/session.js
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NLcURL Session.
|
|
3
|
-
*
|
|
4
|
-
* A persistent session that maintains cookies, connection pools,
|
|
5
|
-
* default configuration, and middleware across multiple requests.
|
|
6
|
-
*/
|
|
7
1
|
import { NLcURLResponse } from './response.js';
|
|
8
2
|
import { AbortError, NLcURLError } from './errors.js';
|
|
9
3
|
import { ProtocolNegotiator } from '../http/negotiator.js';
|
|
10
4
|
import { CookieJar } from '../cookies/jar.js';
|
|
11
5
|
import { InterceptorChain } from '../middleware/interceptor.js';
|
|
12
6
|
import { RateLimiter } from '../middleware/rate-limiter.js';
|
|
7
|
+
import { withRetry } from '../middleware/retry.js';
|
|
13
8
|
import { getProfile } from '../fingerprints/database.js';
|
|
14
9
|
import { resolveURL, appendParams } from '../utils/url.js';
|
|
15
10
|
const MAX_REDIRECTS = 20;
|
|
11
|
+
/**
|
|
12
|
+
* Stateful HTTP client session that persists connections, cookies, interceptors,
|
|
13
|
+
* and configuration across multiple requests. Prefer using a session when making
|
|
14
|
+
* many requests to the same origin, or when you need shared cookie state.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const session = new NLcURLSession({ impersonate: 'chrome136' });
|
|
18
|
+
* const response = await session.get('https://example.com');
|
|
19
|
+
* session.close();
|
|
20
|
+
*/
|
|
16
21
|
export class NLcURLSession {
|
|
17
22
|
config;
|
|
18
23
|
negotiator;
|
|
@@ -20,111 +25,204 @@ export class NLcURLSession {
|
|
|
20
25
|
interceptors;
|
|
21
26
|
rateLimiter = null;
|
|
22
27
|
closed = false;
|
|
28
|
+
/**
|
|
29
|
+
* Creates a new NLcURLSession.
|
|
30
|
+
*
|
|
31
|
+
* @param {NLcURLSessionConfig} [config={}] - Session-level defaults applied to every request.
|
|
32
|
+
*/
|
|
23
33
|
constructor(config = {}) {
|
|
24
34
|
this.config = config;
|
|
25
35
|
this.negotiator = new ProtocolNegotiator();
|
|
26
36
|
this.interceptors = new InterceptorChain();
|
|
27
|
-
// Cookie jar: true = create internal jar, string = unsupported (reserved)
|
|
28
37
|
if (config.cookieJar === true || config.cookieJar === undefined) {
|
|
29
38
|
this.cookieJar = new CookieJar();
|
|
30
39
|
}
|
|
31
40
|
else if (config.cookieJar === false) {
|
|
32
41
|
this.cookieJar = null;
|
|
33
42
|
}
|
|
43
|
+
else if (config.cookieJar instanceof CookieJar) {
|
|
44
|
+
this.cookieJar = config.cookieJar;
|
|
45
|
+
}
|
|
34
46
|
else {
|
|
35
47
|
this.cookieJar = new CookieJar();
|
|
36
48
|
}
|
|
37
49
|
}
|
|
38
|
-
// ---- Middleware registration ----
|
|
39
50
|
/**
|
|
40
|
-
*
|
|
51
|
+
* Registers a request interceptor that is invoked (in registration order)
|
|
52
|
+
* before each request is dispatched. The interceptor may return a modified
|
|
53
|
+
* request object or a `Promise` that resolves to one.
|
|
41
54
|
*
|
|
42
|
-
*
|
|
55
|
+
* @param {RequestInterceptor} fn - The interceptor function to add.
|
|
56
|
+
* @returns {this} The session instance, enabling a fluent call chain.
|
|
43
57
|
*/
|
|
44
58
|
onRequest(fn) {
|
|
45
59
|
this.interceptors.addRequestInterceptor(fn);
|
|
46
60
|
return this;
|
|
47
61
|
}
|
|
48
62
|
/**
|
|
49
|
-
*
|
|
63
|
+
* Registers a response interceptor that is invoked (in registration order)
|
|
64
|
+
* after each response is received. The interceptor may return a modified
|
|
65
|
+
* response object or a `Promise` that resolves to one.
|
|
50
66
|
*
|
|
51
|
-
*
|
|
67
|
+
* @param {ResponseInterceptor} fn - The interceptor function to add.
|
|
68
|
+
* @returns {this} The session instance, enabling a fluent call chain.
|
|
52
69
|
*/
|
|
53
70
|
onResponse(fn) {
|
|
54
71
|
this.interceptors.addResponseInterceptor(fn);
|
|
55
72
|
return this;
|
|
56
73
|
}
|
|
57
74
|
/**
|
|
58
|
-
*
|
|
75
|
+
* Applies a token-bucket rate limit to all requests issued by this session.
|
|
76
|
+
* Requests that exceed the configured rate will wait until a token becomes
|
|
77
|
+
* available before proceeding.
|
|
78
|
+
*
|
|
79
|
+
* @param {RateLimitConfig} config - Rate limit parameters (`maxRequests` per `windowMs`).
|
|
80
|
+
* @returns {this} The session instance, enabling a fluent call chain.
|
|
59
81
|
*/
|
|
60
82
|
setRateLimit(config) {
|
|
61
83
|
this.rateLimiter = new RateLimiter(config);
|
|
62
84
|
return this;
|
|
63
85
|
}
|
|
64
|
-
|
|
86
|
+
/**
|
|
87
|
+
* Issues a `GET` request and resolves with the complete response.
|
|
88
|
+
*
|
|
89
|
+
* @param {string} url - The URL to request.
|
|
90
|
+
* @param {RequestOptions} [options] - Optional per-request settings.
|
|
91
|
+
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
92
|
+
*/
|
|
65
93
|
get(url, options) {
|
|
66
94
|
return this.request({ ...options, url, method: 'GET' });
|
|
67
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Issues a `POST` request and resolves with the complete response.
|
|
98
|
+
*
|
|
99
|
+
* @param {string} url - The URL to request.
|
|
100
|
+
* @param {RequestBody} [body] - Request body payload.
|
|
101
|
+
* @param {RequestOptions} [options] - Optional per-request settings.
|
|
102
|
+
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
103
|
+
*/
|
|
68
104
|
post(url, body, options) {
|
|
69
105
|
return this.request({ ...options, url, method: 'POST', body });
|
|
70
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Issues a `PUT` request and resolves with the complete response.
|
|
109
|
+
*
|
|
110
|
+
* @param {string} url - The URL to request.
|
|
111
|
+
* @param {RequestBody} [body] - Request body payload.
|
|
112
|
+
* @param {RequestOptions} [options] - Optional per-request settings.
|
|
113
|
+
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
114
|
+
*/
|
|
71
115
|
put(url, body, options) {
|
|
72
116
|
return this.request({ ...options, url, method: 'PUT', body });
|
|
73
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Issues a `PATCH` request and resolves with the complete response.
|
|
120
|
+
*
|
|
121
|
+
* @param {string} url - The URL to request.
|
|
122
|
+
* @param {RequestBody} [body] - Request body payload.
|
|
123
|
+
* @param {RequestOptions} [options] - Optional per-request settings.
|
|
124
|
+
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
125
|
+
*/
|
|
74
126
|
patch(url, body, options) {
|
|
75
127
|
return this.request({ ...options, url, method: 'PATCH', body });
|
|
76
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Issues a `DELETE` request and resolves with the complete response.
|
|
131
|
+
*
|
|
132
|
+
* @param {string} url - The URL to request.
|
|
133
|
+
* @param {RequestOptions} [options] - Optional per-request settings.
|
|
134
|
+
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
135
|
+
*/
|
|
77
136
|
delete(url, options) {
|
|
78
137
|
return this.request({ ...options, url, method: 'DELETE' });
|
|
79
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Issues a `HEAD` request and resolves with the complete response (no body).
|
|
141
|
+
*
|
|
142
|
+
* @param {string} url - The URL to request.
|
|
143
|
+
* @param {RequestOptions} [options] - Optional per-request settings.
|
|
144
|
+
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
145
|
+
*/
|
|
80
146
|
head(url, options) {
|
|
81
147
|
return this.request({ ...options, url, method: 'HEAD' });
|
|
82
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Issues an `OPTIONS` request and resolves with the complete response.
|
|
151
|
+
*
|
|
152
|
+
* @param {string} url - The URL to request.
|
|
153
|
+
* @param {RequestOptions} [options] - Optional per-request settings.
|
|
154
|
+
* @returns {Promise<NLcURLResponse>} Resolves with the server response.
|
|
155
|
+
*/
|
|
83
156
|
options(url, options) {
|
|
84
157
|
return this.request({ ...options, url, method: 'OPTIONS' });
|
|
85
158
|
}
|
|
86
|
-
|
|
159
|
+
/**
|
|
160
|
+
* Executes a fully described HTTP request, applying session defaults, request
|
|
161
|
+
* interceptors, redirect following, cookie management, and response
|
|
162
|
+
* interceptors in sequence.
|
|
163
|
+
*
|
|
164
|
+
* @param {NLcURLRequest} input - The request descriptor.
|
|
165
|
+
* @returns {Promise<NLcURLResponse>} Resolves with the final response after all redirects.
|
|
166
|
+
* @throws {NLcURLError} If the session has been closed.
|
|
167
|
+
* @throws {AbortError} If the provided `AbortSignal` fires before completion.
|
|
168
|
+
* @throws {TimeoutError} If any configured timeout is exceeded.
|
|
169
|
+
* @throws {ConnectionError} If a TCP connection cannot be established.
|
|
170
|
+
* @throws {TLSError} If the TLS handshake fails.
|
|
171
|
+
* @throws {ProxyError} If the proxy tunnel cannot be established.
|
|
172
|
+
* @throws {NLcURLError} If the maximum number of redirects is exceeded (`ERR_MAX_REDIRECTS`).
|
|
173
|
+
*/
|
|
87
174
|
async request(input) {
|
|
88
175
|
if (this.closed) {
|
|
89
176
|
throw new NLcURLError('Session is closed', 'ERR_SESSION_CLOSED');
|
|
90
177
|
}
|
|
91
|
-
// Rate limiting
|
|
92
178
|
if (this.rateLimiter) {
|
|
93
179
|
await this.rateLimiter.acquire();
|
|
94
180
|
}
|
|
95
|
-
// Merge session defaults with per-request options
|
|
96
181
|
let req = this.mergeDefaults(input);
|
|
97
|
-
// Run request interceptors
|
|
98
182
|
req = await this.interceptors.processRequest(req);
|
|
99
|
-
// Resolve the profile
|
|
100
183
|
const profile = this.resolveProfile(req);
|
|
101
|
-
// Build negotiator options
|
|
102
184
|
const negotiatorOptions = {
|
|
103
185
|
stealth: req.stealth,
|
|
104
186
|
profile,
|
|
105
187
|
insecure: req.insecure,
|
|
106
188
|
};
|
|
107
|
-
|
|
108
|
-
let response
|
|
109
|
-
|
|
189
|
+
const totalStart = Date.now();
|
|
190
|
+
let response;
|
|
191
|
+
if (this.config.retry && this.config.retry.count && this.config.retry.count > 0) {
|
|
192
|
+
response = await withRetry({
|
|
193
|
+
count: this.config.retry.count,
|
|
194
|
+
delay: this.config.retry.delay ?? 1000,
|
|
195
|
+
backoff: this.config.retry.backoff ?? 'exponential',
|
|
196
|
+
jitter: this.config.retry.jitter ?? 200,
|
|
197
|
+
retryOn: this.config.retry.retryOn,
|
|
198
|
+
}, () => this.executeWithRedirects(req, negotiatorOptions));
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
response = await this.executeWithRedirects(req, negotiatorOptions);
|
|
202
|
+
}
|
|
203
|
+
if (response.timings) {
|
|
204
|
+
response.timings.total = Date.now() - totalStart;
|
|
205
|
+
}
|
|
110
206
|
if (this.cookieJar) {
|
|
111
207
|
const url = new URL(response.url);
|
|
112
208
|
this.cookieJar.setCookies(response.headers, url, response.rawHeaders);
|
|
113
209
|
}
|
|
114
|
-
// Run response interceptors
|
|
115
210
|
response = await this.interceptors.processResponse(response);
|
|
116
211
|
return response;
|
|
117
212
|
}
|
|
118
|
-
// ---- Cookie access ----
|
|
119
213
|
/**
|
|
120
|
-
*
|
|
214
|
+
* Returns the active {@link CookieJar} for this session, or `null` if
|
|
215
|
+
* cookie management was disabled via `cookieJar: false`.
|
|
216
|
+
*
|
|
217
|
+
* @returns {CookieJar|null} The shared cookie jar, or `null`.
|
|
121
218
|
*/
|
|
122
219
|
getCookies() {
|
|
123
220
|
return this.cookieJar;
|
|
124
221
|
}
|
|
125
|
-
// ---- Lifecycle ----
|
|
126
222
|
/**
|
|
127
|
-
*
|
|
223
|
+
* Closes the session, releasing any pooled connections. After calling this
|
|
224
|
+
* method, issuing further requests will throw an `NLcURLError` with code
|
|
225
|
+
* `ERR_SESSION_CLOSED`. Subsequent calls are no-ops.
|
|
128
226
|
*/
|
|
129
227
|
close() {
|
|
130
228
|
if (this.closed)
|
|
@@ -132,10 +230,8 @@ export class NLcURLSession {
|
|
|
132
230
|
this.closed = true;
|
|
133
231
|
this.negotiator.close();
|
|
134
232
|
}
|
|
135
|
-
// ---- Internal helpers ----
|
|
136
233
|
mergeDefaults(input) {
|
|
137
234
|
const cfg = this.config;
|
|
138
|
-
// Resolve base URL
|
|
139
235
|
let url = input.url;
|
|
140
236
|
if (cfg.baseURL && !url.startsWith('http://') && !url.startsWith('https://')) {
|
|
141
237
|
url = resolveURL(cfg.baseURL, url);
|
|
@@ -143,11 +239,9 @@ export class NLcURLSession {
|
|
|
143
239
|
else if (input.baseURL && !url.startsWith('http://') && !url.startsWith('https://')) {
|
|
144
240
|
url = resolveURL(input.baseURL, url);
|
|
145
241
|
}
|
|
146
|
-
// Append query params
|
|
147
242
|
if (input.params) {
|
|
148
243
|
url = appendParams(url, input.params);
|
|
149
244
|
}
|
|
150
|
-
// Merge headers (session defaults first, request headers override)
|
|
151
245
|
const headers = {};
|
|
152
246
|
if (cfg.headers) {
|
|
153
247
|
for (const [k, v] of Object.entries(cfg.headers)) {
|
|
@@ -159,12 +253,10 @@ export class NLcURLSession {
|
|
|
159
253
|
headers[k.toLowerCase()] = v;
|
|
160
254
|
}
|
|
161
255
|
}
|
|
162
|
-
// Inject cookies
|
|
163
256
|
if (this.cookieJar) {
|
|
164
257
|
const parsedUrl = new URL(url);
|
|
165
258
|
const cookieHeader = this.cookieJar.getCookieHeader(parsedUrl);
|
|
166
259
|
if (cookieHeader) {
|
|
167
|
-
// Merge with any explicitly set cookie header
|
|
168
260
|
const existing = headers['cookie'];
|
|
169
261
|
headers['cookie'] = existing ? `${existing}; ${cookieHeader}` : cookieHeader;
|
|
170
262
|
}
|
|
@@ -186,6 +278,7 @@ export class NLcURLSession {
|
|
|
186
278
|
httpVersion: input.httpVersion ?? cfg.httpVersion,
|
|
187
279
|
timeout: input.timeout ?? cfg.timeout,
|
|
188
280
|
acceptEncoding: input.acceptEncoding ?? cfg.acceptEncoding,
|
|
281
|
+
dnsFamily: input.dnsFamily ?? cfg.dnsFamily,
|
|
189
282
|
};
|
|
190
283
|
}
|
|
191
284
|
resolveProfile(req) {
|
|
@@ -203,15 +296,23 @@ export class NLcURLSession {
|
|
|
203
296
|
const maxRedirects = req.maxRedirects ?? MAX_REDIRECTS;
|
|
204
297
|
const shouldFollow = req.followRedirects ?? true;
|
|
205
298
|
while (true) {
|
|
206
|
-
// Check abort signal
|
|
207
299
|
if (currentReq.signal?.aborted) {
|
|
208
300
|
throw new AbortError();
|
|
209
301
|
}
|
|
210
|
-
|
|
211
|
-
|
|
302
|
+
let response;
|
|
303
|
+
if (currentReq.signal) {
|
|
304
|
+
const sig = currentReq.signal;
|
|
305
|
+
response = await new Promise((resolve, reject) => {
|
|
306
|
+
const onAbort = () => reject(new AbortError());
|
|
307
|
+
sig.addEventListener('abort', onAbort, { once: true });
|
|
308
|
+
this.negotiator.send(currentReq, options).then((res) => { sig.removeEventListener('abort', onAbort); resolve(res); }, (err) => { sig.removeEventListener('abort', onAbort); reject(err); });
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
response = await this.negotiator.send(currentReq, options);
|
|
313
|
+
}
|
|
212
314
|
const isRedirect = [301, 302, 303, 307, 308].includes(response.status);
|
|
213
315
|
if (!isRedirect || !shouldFollow) {
|
|
214
|
-
// Attach redirect tracking to the final response
|
|
215
316
|
if (redirectCount > 0) {
|
|
216
317
|
return new NLcURLResponse({
|
|
217
318
|
status: response.status,
|
|
@@ -232,12 +333,10 @@ export class NLcURLSession {
|
|
|
232
333
|
if (redirectCount > maxRedirects) {
|
|
233
334
|
throw new NLcURLError(`Maximum redirect limit (${maxRedirects}) exceeded`, 'ERR_MAX_REDIRECTS');
|
|
234
335
|
}
|
|
235
|
-
// Extract Location header
|
|
236
336
|
const location = response.headers['location'];
|
|
237
337
|
if (!location) {
|
|
238
338
|
return response;
|
|
239
339
|
}
|
|
240
|
-
// Resolve redirect URL and validate protocol
|
|
241
340
|
let redirectUrl;
|
|
242
341
|
try {
|
|
243
342
|
redirectUrl = resolveURL(currentReq.url, location);
|
|
@@ -251,15 +350,10 @@ export class NLcURLSession {
|
|
|
251
350
|
throw err;
|
|
252
351
|
throw new NLcURLError(`Invalid redirect URL: ${location}`, 'ERR_INVALID_REDIRECT');
|
|
253
352
|
}
|
|
254
|
-
// Store cookies from redirect response
|
|
255
353
|
if (this.cookieJar) {
|
|
256
354
|
const url = new URL(response.url);
|
|
257
355
|
this.cookieJar.setCookies(response.headers, url, response.rawHeaders);
|
|
258
356
|
}
|
|
259
|
-
// Determine new method:
|
|
260
|
-
// 303: always GET
|
|
261
|
-
// 301/302: GET for POST (historical behavior), keep for others
|
|
262
|
-
// 307/308: keep method and body
|
|
263
357
|
let method = currentReq.method ?? 'GET';
|
|
264
358
|
let body = currentReq.body;
|
|
265
359
|
if (response.status === 303) {
|
|
@@ -271,10 +365,11 @@ export class NLcURLSession {
|
|
|
271
365
|
method = 'GET';
|
|
272
366
|
body = null;
|
|
273
367
|
}
|
|
274
|
-
// Inject cookies for the new URL
|
|
275
368
|
const headers = { ...currentReq.headers };
|
|
276
|
-
|
|
277
|
-
|
|
369
|
+
if (body === null) {
|
|
370
|
+
delete headers['content-type'];
|
|
371
|
+
delete headers['content-length'];
|
|
372
|
+
}
|
|
278
373
|
if (this.cookieJar) {
|
|
279
374
|
const parsedUrl = new URL(redirectUrl);
|
|
280
375
|
const cookieHeader = this.cookieJar.getCookieHeader(parsedUrl);
|
|
@@ -285,7 +380,6 @@ export class NLcURLSession {
|
|
|
285
380
|
delete headers['cookie'];
|
|
286
381
|
}
|
|
287
382
|
}
|
|
288
|
-
// Strip sensitive headers on cross-origin redirects
|
|
289
383
|
const originalOrigin = new URL(currentReq.url).origin;
|
|
290
384
|
const redirectOrigin = new URL(redirectUrl).origin;
|
|
291
385
|
if (originalOrigin !== redirectOrigin) {
|
package/dist/core/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAA0B,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAqD,MAAM,8BAA8B,CAAC;AACnH,OAAO,EAAE,WAAW,EAAwB,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,UAAU,EAAwC,MAAM,6BAA6B,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE3D,MAAM,aAAa,GAAG,EAAE,CAAC;AAOzB,MAAM,OAAO,aAAa;IACP,MAAM,CAAsB;IAC5B,UAAU,CAAqB;IAC/B,SAAS,CAAmB;IAC5B,YAAY,CAAmB;IACxC,WAAW,GAAuB,IAAI,CAAC;IACvC,MAAM,GAAG,KAAK,CAAC;IAEvB,YAAY,SAA8B,EAAE;QAC1C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAE3C,0EAA0E;QAC1E,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAChE,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QACnC,CAAC;aAAM,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YACtC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAED,oCAAoC;IAEpC;;;;OAIG;IACH,SAAS,CAAC,EAAsB;QAC9B,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,EAAuB;QAChC,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAuB;QAClC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kCAAkC;IAElC,GAAG,CAAC,GAAW,EAAE,OAAwB;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,IAAkB,EAAE,OAAwB;QAC5D,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,IAAkB,EAAE,OAAwB;QAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,IAAkB,EAAE,OAAwB;QAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,GAAW,EAAE,OAAwB;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,OAAwB;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,OAAwB;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,gCAAgC;IAEhC,KAAK,CAAC,OAAO,CAAC,KAAoB;QAChC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,WAAW,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC;QACnE,CAAC;QAED,gBAAgB;QAChB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACnC,CAAC;QAED,kDAAkD;QAClD,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEpC,2BAA2B;QAC3B,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAElD,sBAAsB;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAEzC,2BAA2B;QAC3B,MAAM,iBAAiB,GAAsB;YAC3C,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,OAAO;YACP,QAAQ,EAAE,GAAG,CAAC,QAAQ;SACvB,CAAC;QAEF,kCAAkC;QAClC,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;QAEvE,8BAA8B;QAC9B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QACxE,CAAC;QAED,4BAA4B;QAC5B,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAE7D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,0BAA0B;IAE1B;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,sBAAsB;IAEtB;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,6BAA6B;IAErB,aAAa,CAAC,KAAoB;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAExB,mBAAmB;QACnB,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;QACpB,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7E,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACrC,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACtF,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,sBAAsB;QACtB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,mEAAmE;QACnE,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjD,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAC/D,IAAI,YAAY,EAAE,CAAC;gBACjB,8CAA8C;gBAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;YAC/E,CAAC;QACH,CAAC;QAED,OAAO;YACL,GAAG,KAAK;YACR,GAAG;YACH,OAAO;YACP,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK;YAC7B,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW;YACjD,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG;YACzB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM;YAClC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO;YACrC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK;YAC/B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS;YAC3C,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,GAAG,CAAC,eAAe,IAAI,IAAI;YACrE,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,IAAI,aAAa;YACrE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,KAAK;YACjD,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW;YACjD,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO;YACrC,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,GAAG,CAAC,cAAc;SAC3D,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,GAAkB;QACvC,IAAI,CAAC,GAAG,CAAC,WAAW;YAAE,OAAO,SAAS,CAAC;QACvC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CACnB,6BAA6B,GAAG,CAAC,WAAW,GAAG,EAC/C,qBAAqB,CACtB,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,GAAkB,EAClB,OAA0B;QAE1B,IAAI,UAAU,GAAG,GAAG,CAAC;QACrB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,aAAa,CAAC;QACvD,MAAM,YAAY,GAAG,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC;QAEjD,OAAO,IAAI,EAAE,CAAC;YACZ,qBAAqB;YACrB,IAAI,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBAC/B,MAAM,IAAI,UAAU,EAAE,CAAC;YACzB,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEjE,uCAAuC;YACvC,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACvE,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;gBACjC,iDAAiD;gBACjD,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;oBACtB,OAAO,IAAI,cAAc,CAAC;wBACxB,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,WAAW,EAAE,QAAQ,CAAC,WAAW;wBACjC,GAAG,EAAE,UAAU,CAAC,GAAG;wBACnB,aAAa;wBACb,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;qBAC1B,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,aAAa,EAAE,CAAC;YAChB,IAAI,aAAa,GAAG,YAAY,EAAE,CAAC;gBACjC,MAAM,IAAI,WAAW,CACnB,2BAA2B,YAAY,YAAY,EACnD,mBAAmB,CACpB,CAAC;YACJ,CAAC;YAED,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,6CAA6C;YAC7C,IAAI,WAAmB,CAAC;YACxB,IAAI,CAAC;gBACH,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACnD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;gBACpC,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAChE,MAAM,IAAI,WAAW,CACnB,qCAAqC,MAAM,CAAC,QAAQ,EAAE,EACtD,sBAAsB,CACvB,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,WAAW;oBAAE,MAAM,GAAG,CAAC;gBAC1C,MAAM,IAAI,WAAW,CACnB,yBAAyB,QAAQ,EAAE,EACnC,sBAAsB,CACvB,CAAC;YACJ,CAAC;YAED,uCAAuC;YACvC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YACxE,CAAC;YAED,wBAAwB;YACxB,kBAAkB;YAClB,+DAA+D;YAC/D,gCAAgC;YAChC,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC;YACxC,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;YAE3B,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,GAAG,KAAK,CAAC;gBACf,IAAI,GAAG,IAAI,CAAC;YACd,CAAC;iBAAM,IACL,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC;gBACpD,MAAM,KAAK,MAAM,EACjB,CAAC;gBACD,MAAM,GAAG,KAAK,CAAC;gBACf,IAAI,GAAG,IAAI,CAAC;YACd,CAAC;YAED,iCAAiC;YACjC,MAAM,OAAO,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;YAC1C,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC;YAC/B,OAAO,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAEjC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;gBACvC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;gBAC/D,IAAI,YAAY,EAAE,CAAC;oBACjB,OAAO,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YAED,oDAAoD;YACpD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YACtD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;YACnD,IAAI,cAAc,KAAK,cAAc,EAAE,CAAC;gBACtC,OAAO,OAAO,CAAC,eAAe,CAAC,CAAC;gBAChC,OAAO,OAAO,CAAC,qBAAqB,CAAC,CAAC;YACxC,CAAC;YAED,UAAU,GAAG;gBACX,GAAG,UAAU;gBACb,GAAG,EAAE,WAAW;gBAChB,MAAM;gBACN,IAAI;gBACJ,OAAO;aACR,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
+
import type { H2Profile } from './types.js';
|
|
1
2
|
/**
|
|
2
|
-
* Akamai HTTP/2 fingerprint
|
|
3
|
+
* Computes the Akamai HTTP/2 fingerprint string for a browser profile. The
|
|
4
|
+
* string encodes the SETTINGS frame parameters, connection window update,
|
|
5
|
+
* optional PRIORITY frame configuration, and pseudo-header ordering,
|
|
6
|
+
* separated by pipe characters (`|`).
|
|
3
7
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
8
|
+
* @param {H2Profile} profile - The HTTP/2 profile to fingerprint.
|
|
9
|
+
* @returns {string} The Akamai fingerprint string in the format
|
|
10
|
+
* `"S1:V1;S2:V2|WU|P1:E1:D1:W1,...|:method,:path,..."`.
|
|
6
11
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* - PS: Pseudo-header order
|
|
11
|
-
*/
|
|
12
|
-
import type { H2Profile } from './types.js';
|
|
13
|
-
/**
|
|
14
|
-
* Build the Akamai HTTP/2 fingerprint string from an H2 profile.
|
|
12
|
+
* @example
|
|
13
|
+
* const fp = akamaiFingerprint(chromeLatest.h2);
|
|
14
|
+
* // => "1:65536;2:0;3:1000;4:6291456;6:262144|15663105|0:0:0:255|m,p,a,s"
|
|
15
15
|
*/
|
|
16
16
|
export declare function akamaiFingerprint(profile: H2Profile): string;
|
|
17
17
|
//# sourceMappingURL=akamai.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"akamai.d.ts","sourceRoot":"","sources":["../../src/fingerprints/akamai.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"akamai.d.ts","sourceRoot":"","sources":["../../src/fingerprints/akamai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAiB5D"}
|
|
@@ -1,29 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Akamai HTTP/2 fingerprint
|
|
2
|
+
* Computes the Akamai HTTP/2 fingerprint string for a browser profile. The
|
|
3
|
+
* string encodes the SETTINGS frame parameters, connection window update,
|
|
4
|
+
* optional PRIORITY frame configuration, and pseudo-header ordering,
|
|
5
|
+
* separated by pipe characters (`|`).
|
|
3
6
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
7
|
+
* @param {H2Profile} profile - The HTTP/2 profile to fingerprint.
|
|
8
|
+
* @returns {string} The Akamai fingerprint string in the format
|
|
9
|
+
* `"S1:V1;S2:V2|WU|P1:E1:D1:W1,...|:method,:path,..."`.
|
|
6
10
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* - PS: Pseudo-header order
|
|
11
|
-
*/
|
|
12
|
-
/**
|
|
13
|
-
* Build the Akamai HTTP/2 fingerprint string from an H2 profile.
|
|
11
|
+
* @example
|
|
12
|
+
* const fp = akamaiFingerprint(chromeLatest.h2);
|
|
13
|
+
* // => "1:65536;2:0;3:1000;4:6291456;6:262144|15663105|0:0:0:255|m,p,a,s"
|
|
14
14
|
*/
|
|
15
15
|
export function akamaiFingerprint(profile) {
|
|
16
|
-
// Settings section
|
|
17
16
|
const settings = profile.settings
|
|
18
17
|
.map((s) => `${s.id}:${s.value}`)
|
|
19
18
|
.join(';');
|
|
20
|
-
// Window update section
|
|
21
19
|
const wu = String(profile.windowUpdate);
|
|
22
|
-
// Priority frames section
|
|
23
20
|
const priority = (profile.priorityFrames ?? [])
|
|
24
21
|
.map((f) => `${f.streamId}:${f.exclusive ? 1 : 0}:${f.dependsOn}:${f.weight}`)
|
|
25
22
|
.join(',');
|
|
26
|
-
// Pseudo-header order section
|
|
27
23
|
const pseudo = profile.pseudoHeaderOrder.join(',');
|
|
28
24
|
return `${settings}|${wu}|${priority}|${pseudo}`;
|
|
29
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"akamai.js","sourceRoot":"","sources":["../../src/fingerprints/akamai.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"akamai.js","sourceRoot":"","sources":["../../src/fingerprints/akamai.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAkB;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;SAChC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;SAC5C,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,CACpE;SACA,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnD,OAAO,GAAG,QAAQ,IAAI,EAAE,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browser fingerprint database.
|
|
3
|
-
*
|
|
4
|
-
* Provides a unified lookup for all browser profiles by canonical name
|
|
5
|
-
* (e.g. "chrome136", "firefox138", "safari_latest").
|
|
6
|
-
*/
|
|
7
1
|
import type { BrowserProfile } from './types.js';
|
|
8
2
|
import { chromeLatest } from './profiles/chrome.js';
|
|
9
3
|
import { firefoxLatest } from './profiles/firefox.js';
|
|
@@ -11,22 +5,27 @@ import { safariLatest } from './profiles/safari.js';
|
|
|
11
5
|
import { edgeLatest } from './profiles/edge.js';
|
|
12
6
|
import { torLatest } from './profiles/tor.js';
|
|
13
7
|
/**
|
|
14
|
-
*
|
|
8
|
+
* Looks up a browser profile by name, accepting flexible casing and separators.
|
|
9
|
+
* Returns the latest version of the named browser when given a bare browser
|
|
10
|
+
* family name (e.g. `"chrome"`, `"firefox"`).
|
|
15
11
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* - Latest alias: "chrome_latest", "firefox_latest"
|
|
19
|
-
* - Family only: "chrome", "firefox" (resolves to latest)
|
|
12
|
+
* @param {string} name - Profile identifier such as `"chrome136"`, `"firefox"`, or `"safari"`. Case-insensitive; hyphens and spaces are ignored.
|
|
13
|
+
* @returns {BrowserProfile|undefined} The matching profile, or `undefined` if no profile is registered under that name.
|
|
20
14
|
*
|
|
21
|
-
*
|
|
15
|
+
* @example
|
|
16
|
+
* const profile = getProfile('chrome136');
|
|
17
|
+
* const latest = getProfile('chrome'); // resolves to the latest Chrome profile
|
|
22
18
|
*/
|
|
23
19
|
export declare function getProfile(name: string): BrowserProfile | undefined;
|
|
24
20
|
/**
|
|
25
|
-
*
|
|
21
|
+
* Returns a sorted list of all registered browser profile identifiers
|
|
22
|
+
* (e.g. `["chrome120", "chrome124", "firefox120", ...]`). Use these names
|
|
23
|
+
* with {@link getProfile} or the `impersonate` request option.
|
|
24
|
+
*
|
|
25
|
+
* @returns {string[]} Alphabetically sorted array of profile names.
|
|
26
26
|
*/
|
|
27
27
|
export declare function listProfiles(): string[];
|
|
28
|
-
/** The default profile used when `impersonate` is
|
|
29
|
-
* specific version. */
|
|
28
|
+
/** The default browser profile used when no `impersonate` option is specified. Points to the latest bundled Chrome profile. */
|
|
30
29
|
export declare const DEFAULT_PROFILE: BrowserProfile;
|
|
31
30
|
export { chromeLatest, firefoxLatest, safariLatest, edgeLatest, torLatest };
|
|
32
31
|
export type { BrowserProfile } from './types.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/fingerprints/database.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/fingerprints/database.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAkB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAmB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAkB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAgB,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAe,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAgB3D;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAoBnE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC;AAED,+HAA+H;AAC/H,eAAO,MAAM,eAAe,EAAE,cAA6B,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browser fingerprint database.
|
|
3
|
-
*
|
|
4
|
-
* Provides a unified lookup for all browser profiles by canonical name
|
|
5
|
-
* (e.g. "chrome136", "firefox138", "safari_latest").
|
|
6
|
-
*/
|
|
7
1
|
import { chromeProfiles, chromeLatest } from './profiles/chrome.js';
|
|
8
2
|
import { firefoxProfiles, firefoxLatest } from './profiles/firefox.js';
|
|
9
3
|
import { safariProfiles, safariLatest } from './profiles/safari.js';
|
|
10
4
|
import { edgeProfiles, edgeLatest } from './profiles/edge.js';
|
|
11
5
|
import { torProfiles, torLatest } from './profiles/tor.js';
|
|
12
|
-
// ---- Merged database ----
|
|
13
6
|
const allProfiles = new Map();
|
|
14
7
|
for (const source of [
|
|
15
8
|
chromeProfiles,
|
|
@@ -23,22 +16,22 @@ for (const source of [
|
|
|
23
16
|
}
|
|
24
17
|
}
|
|
25
18
|
/**
|
|
26
|
-
*
|
|
19
|
+
* Looks up a browser profile by name, accepting flexible casing and separators.
|
|
20
|
+
* Returns the latest version of the named browser when given a bare browser
|
|
21
|
+
* family name (e.g. `"chrome"`, `"firefox"`).
|
|
27
22
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* - Latest alias: "chrome_latest", "firefox_latest"
|
|
31
|
-
* - Family only: "chrome", "firefox" (resolves to latest)
|
|
23
|
+
* @param {string} name - Profile identifier such as `"chrome136"`, `"firefox"`, or `"safari"`. Case-insensitive; hyphens and spaces are ignored.
|
|
24
|
+
* @returns {BrowserProfile|undefined} The matching profile, or `undefined` if no profile is registered under that name.
|
|
32
25
|
*
|
|
33
|
-
*
|
|
26
|
+
* @example
|
|
27
|
+
* const profile = getProfile('chrome136');
|
|
28
|
+
* const latest = getProfile('chrome'); // resolves to the latest Chrome profile
|
|
34
29
|
*/
|
|
35
30
|
export function getProfile(name) {
|
|
36
31
|
const lower = name.toLowerCase().replace(/[-\s]/g, '');
|
|
37
|
-
// Direct match
|
|
38
32
|
const direct = allProfiles.get(lower);
|
|
39
33
|
if (direct)
|
|
40
34
|
return direct;
|
|
41
|
-
// Family-only shorthand
|
|
42
35
|
switch (lower) {
|
|
43
36
|
case 'chrome':
|
|
44
37
|
return chromeLatest;
|
|
@@ -55,14 +48,16 @@ export function getProfile(name) {
|
|
|
55
48
|
}
|
|
56
49
|
}
|
|
57
50
|
/**
|
|
58
|
-
*
|
|
51
|
+
* Returns a sorted list of all registered browser profile identifiers
|
|
52
|
+
* (e.g. `["chrome120", "chrome124", "firefox120", ...]`). Use these names
|
|
53
|
+
* with {@link getProfile} or the `impersonate` request option.
|
|
54
|
+
*
|
|
55
|
+
* @returns {string[]} Alphabetically sorted array of profile names.
|
|
59
56
|
*/
|
|
60
57
|
export function listProfiles() {
|
|
61
58
|
return [...allProfiles.keys()].sort();
|
|
62
59
|
}
|
|
63
|
-
/** The default profile used when `impersonate` is
|
|
64
|
-
* specific version. */
|
|
60
|
+
/** The default browser profile used when no `impersonate` option is specified. Points to the latest bundled Chrome profile. */
|
|
65
61
|
export const DEFAULT_PROFILE = chromeLatest;
|
|
66
|
-
// Re-exports for convenience
|
|
67
62
|
export { chromeLatest, firefoxLatest, safariLatest, edgeLatest, torLatest };
|
|
68
63
|
//# sourceMappingURL=database.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/fingerprints/database.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/fingerprints/database.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,WAAW,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEtD,KAAK,MAAM,MAAM,IAAI;IACnB,cAAc;IACd,eAAe;IACf,cAAc;IACd,YAAY;IACZ,WAAW;CACZ,EAAE,CAAC;IACF,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC;QACpC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC;QACtB,KAAK,SAAS;YACZ,OAAO,aAAa,CAAC;QACvB,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,UAAU,CAAC;QACpB,KAAK,KAAK;YACR,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACxC,CAAC;AAED,+HAA+H;AAC/H,MAAM,CAAC,MAAM,eAAe,GAAmB,YAAY,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC"}
|