nlcurl 0.6.0 → 0.8.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 +143 -140
- package/dist/cache/groups.d.ts +75 -0
- package/dist/cache/groups.d.ts.map +1 -0
- package/dist/cache/groups.js +118 -0
- package/dist/cache/groups.js.map +1 -0
- package/dist/cache/no-vary-search.d.ts +33 -0
- package/dist/cache/no-vary-search.d.ts.map +1 -0
- package/dist/cache/no-vary-search.js +148 -0
- package/dist/cache/no-vary-search.js.map +1 -0
- package/dist/cache/range.d.ts +120 -0
- package/dist/cache/range.d.ts.map +1 -0
- package/dist/cache/range.js +193 -0
- package/dist/cache/range.js.map +1 -0
- package/dist/cache/store.d.ts +111 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/store.js +414 -0
- package/dist/cache/store.js.map +1 -0
- package/dist/cache/types.d.ts +69 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +2 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/cli/args.d.ts +4 -37
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +3 -4
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/index.d.ts +0 -5
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +14 -20
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +14 -20
- package/dist/cli/output.js.map +1 -1
- package/dist/cookies/jar.d.ts +33 -31
- package/dist/cookies/jar.d.ts.map +1 -1
- package/dist/cookies/jar.js +69 -33
- package/dist/cookies/jar.js.map +1 -1
- package/dist/cookies/parser.d.ts +14 -16
- package/dist/cookies/parser.d.ts.map +1 -1
- package/dist/cookies/parser.js +30 -13
- package/dist/cookies/parser.js.map +1 -1
- package/dist/cookies/psl-data.d.ts +1 -1
- package/dist/cookies/psl-data.js +1 -1
- package/dist/cookies/public-suffix.d.ts +5 -27
- package/dist/cookies/public-suffix.d.ts.map +1 -1
- package/dist/cookies/public-suffix.js +5 -37
- package/dist/cookies/public-suffix.js.map +1 -1
- package/dist/core/auth.d.ts +30 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +34 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/client.d.ts +28 -40
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +34 -41
- package/dist/core/client.js.map +1 -1
- package/dist/core/errors.d.ts +64 -88
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +64 -88
- package/dist/core/errors.js.map +1 -1
- package/dist/core/request.d.ts +63 -85
- package/dist/core/request.d.ts.map +1 -1
- package/dist/core/response.d.ts +64 -59
- package/dist/core/response.d.ts.map +1 -1
- package/dist/core/response.js +70 -52
- package/dist/core/response.js.map +1 -1
- package/dist/core/session.d.ts +81 -70
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +198 -71
- package/dist/core/session.js.map +1 -1
- package/dist/core/validation.d.ts +44 -42
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +47 -58
- package/dist/core/validation.js.map +1 -1
- package/dist/dns/cache.d.ts +59 -0
- package/dist/dns/cache.d.ts.map +1 -0
- package/dist/dns/cache.js +99 -0
- package/dist/dns/cache.js.map +1 -0
- package/dist/dns/codec.d.ts +39 -0
- package/dist/dns/codec.d.ts.map +1 -0
- package/dist/dns/codec.js +238 -0
- package/dist/dns/codec.js.map +1 -0
- package/dist/dns/doh-resolver.d.ts +38 -0
- package/dist/dns/doh-resolver.d.ts.map +1 -0
- package/dist/dns/doh-resolver.js +191 -0
- package/dist/dns/doh-resolver.js.map +1 -0
- package/dist/dns/dot-resolver.d.ts +89 -0
- package/dist/dns/dot-resolver.d.ts.map +1 -0
- package/dist/dns/dot-resolver.js +158 -0
- package/dist/dns/dot-resolver.js.map +1 -0
- package/dist/dns/https-rr.d.ts +40 -0
- package/dist/dns/https-rr.d.ts.map +1 -0
- package/dist/dns/https-rr.js +109 -0
- package/dist/dns/https-rr.js.map +1 -0
- package/dist/dns/types.d.ts +82 -0
- package/dist/dns/types.d.ts.map +1 -0
- package/dist/dns/types.js +23 -0
- package/dist/dns/types.js.map +1 -0
- package/dist/fingerprints/akamai.d.ts +3 -11
- package/dist/fingerprints/akamai.d.ts.map +1 -1
- package/dist/fingerprints/akamai.js +3 -11
- package/dist/fingerprints/akamai.js.map +1 -1
- package/dist/fingerprints/database.d.ts +6 -14
- package/dist/fingerprints/database.d.ts.map +1 -1
- package/dist/fingerprints/database.js +6 -14
- package/dist/fingerprints/database.js.map +1 -1
- package/dist/fingerprints/extensions.d.ts +56 -71
- package/dist/fingerprints/extensions.d.ts.map +1 -1
- package/dist/fingerprints/extensions.js +58 -71
- package/dist/fingerprints/extensions.js.map +1 -1
- package/dist/fingerprints/ja3.d.ts +12 -30
- package/dist/fingerprints/ja3.d.ts.map +1 -1
- package/dist/fingerprints/ja3.js +12 -30
- package/dist/fingerprints/ja3.js.map +1 -1
- package/dist/fingerprints/ja4.d.ts +18 -0
- package/dist/fingerprints/ja4.d.ts.map +1 -0
- package/dist/fingerprints/ja4.js +83 -0
- package/dist/fingerprints/ja4.js.map +1 -0
- package/dist/fingerprints/profiles/chrome.d.ts +18 -21
- package/dist/fingerprints/profiles/chrome.d.ts.map +1 -1
- package/dist/fingerprints/profiles/chrome.js +35 -31
- package/dist/fingerprints/profiles/chrome.js.map +1 -1
- package/dist/fingerprints/profiles/edge.d.ts +7 -10
- package/dist/fingerprints/profiles/edge.d.ts.map +1 -1
- package/dist/fingerprints/profiles/edge.js +7 -10
- package/dist/fingerprints/profiles/edge.js.map +1 -1
- package/dist/fingerprints/profiles/firefox.d.ts +8 -11
- package/dist/fingerprints/profiles/firefox.d.ts.map +1 -1
- package/dist/fingerprints/profiles/firefox.js +8 -11
- package/dist/fingerprints/profiles/firefox.js.map +1 -1
- package/dist/fingerprints/profiles/safari.d.ts +11 -14
- package/dist/fingerprints/profiles/safari.d.ts.map +1 -1
- package/dist/fingerprints/profiles/safari.js +11 -14
- package/dist/fingerprints/profiles/safari.js.map +1 -1
- package/dist/fingerprints/profiles/tor.d.ts +5 -8
- package/dist/fingerprints/profiles/tor.d.ts.map +1 -1
- package/dist/fingerprints/profiles/tor.js +5 -8
- package/dist/fingerprints/profiles/tor.js.map +1 -1
- package/dist/fingerprints/types.d.ts +42 -73
- package/dist/fingerprints/types.d.ts.map +1 -1
- package/dist/hsts/store.d.ts +39 -0
- package/dist/hsts/store.d.ts.map +1 -0
- package/dist/hsts/store.js +163 -0
- package/dist/hsts/store.js.map +1 -0
- package/dist/hsts/types.d.ts +24 -0
- package/dist/hsts/types.d.ts.map +1 -0
- package/dist/hsts/types.js +2 -0
- package/dist/hsts/types.js.map +1 -0
- package/dist/http/alt-svc.d.ts +67 -0
- package/dist/http/alt-svc.d.ts.map +1 -0
- package/dist/http/alt-svc.js +186 -0
- package/dist/http/alt-svc.js.map +1 -0
- package/dist/http/early-hints.d.ts +23 -0
- package/dist/http/early-hints.d.ts.map +1 -0
- package/dist/http/early-hints.js +33 -0
- package/dist/http/early-hints.js.map +1 -0
- package/dist/http/form-data.d.ts +17 -35
- package/dist/http/form-data.d.ts.map +1 -1
- package/dist/http/form-data.js +12 -34
- package/dist/http/form-data.js.map +1 -1
- package/dist/http/h1/client.d.ts +14 -26
- package/dist/http/h1/client.d.ts.map +1 -1
- package/dist/http/h1/client.js +29 -22
- package/dist/http/h1/client.js.map +1 -1
- package/dist/http/h1/encoder.d.ts +10 -17
- package/dist/http/h1/encoder.d.ts.map +1 -1
- package/dist/http/h1/encoder.js +10 -17
- package/dist/http/h1/encoder.js.map +1 -1
- package/dist/http/h1/parser.d.ts +22 -59
- package/dist/http/h1/parser.d.ts.map +1 -1
- package/dist/http/h1/parser.js +15 -47
- package/dist/http/h1/parser.js.map +1 -1
- package/dist/http/h2/client.d.ts +18 -59
- package/dist/http/h2/client.d.ts.map +1 -1
- package/dist/http/h2/client.js +29 -64
- package/dist/http/h2/client.js.map +1 -1
- package/dist/http/h2/frames.d.ts +53 -84
- package/dist/http/h2/frames.d.ts.map +1 -1
- package/dist/http/h2/frames.js +48 -76
- package/dist/http/h2/frames.js.map +1 -1
- package/dist/http/h2/hpack.d.ts +16 -35
- package/dist/http/h2/hpack.d.ts.map +1 -1
- package/dist/http/h2/hpack.js +16 -35
- package/dist/http/h2/hpack.js.map +1 -1
- package/dist/http/h3/detection.d.ts +15 -0
- package/dist/http/h3/detection.d.ts.map +1 -0
- package/dist/http/h3/detection.js +41 -0
- package/dist/http/h3/detection.js.map +1 -0
- package/dist/http/negotiator.d.ts +43 -33
- package/dist/http/negotiator.d.ts.map +1 -1
- package/dist/http/negotiator.js +99 -41
- package/dist/http/negotiator.js.map +1 -1
- package/dist/http/pool.d.ts +34 -64
- package/dist/http/pool.d.ts.map +1 -1
- package/dist/http/pool.js +22 -41
- package/dist/http/pool.js.map +1 -1
- package/dist/http/resumable-upload.d.ts +76 -0
- package/dist/http/resumable-upload.d.ts.map +1 -0
- package/dist/http/resumable-upload.js +104 -0
- package/dist/http/resumable-upload.js.map +1 -0
- package/dist/http/trailers.d.ts +29 -0
- package/dist/http/trailers.d.ts.map +1 -0
- package/dist/http/trailers.js +57 -0
- package/dist/http/trailers.js.map +1 -0
- package/dist/index.d.ts +36 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware/interceptor.d.ts +13 -32
- package/dist/middleware/interceptor.d.ts.map +1 -1
- package/dist/middleware/interceptor.js +11 -16
- package/dist/middleware/interceptor.js.map +1 -1
- package/dist/middleware/rate-limiter.d.ts +8 -17
- package/dist/middleware/rate-limiter.d.ts.map +1 -1
- package/dist/middleware/rate-limiter.js +15 -12
- package/dist/middleware/rate-limiter.js.map +1 -1
- package/dist/middleware/retry-after.d.ts +15 -0
- package/dist/middleware/retry-after.d.ts.map +1 -0
- package/dist/middleware/retry-after.js +36 -0
- package/dist/middleware/retry-after.js.map +1 -0
- package/dist/middleware/retry.d.ts +9 -18
- package/dist/middleware/retry.d.ts.map +1 -1
- package/dist/middleware/retry.js +12 -9
- package/dist/middleware/retry.js.map +1 -1
- package/dist/proxy/auth.d.ts +73 -0
- package/dist/proxy/auth.d.ts.map +1 -0
- package/dist/proxy/auth.js +128 -0
- package/dist/proxy/auth.js.map +1 -0
- package/dist/proxy/env-proxy.d.ts +11 -0
- package/dist/proxy/env-proxy.d.ts.map +1 -0
- package/dist/proxy/env-proxy.js +56 -0
- package/dist/proxy/env-proxy.js.map +1 -0
- package/dist/proxy/http-proxy.d.ts +13 -18
- package/dist/proxy/http-proxy.d.ts.map +1 -1
- package/dist/proxy/http-proxy.js +24 -14
- package/dist/proxy/http-proxy.js.map +1 -1
- package/dist/proxy/socks.d.ts +13 -20
- package/dist/proxy/socks.d.ts.map +1 -1
- package/dist/proxy/socks.js +6 -9
- package/dist/proxy/socks.js.map +1 -1
- package/dist/sse/parser.d.ts +47 -0
- package/dist/sse/parser.d.ts.map +1 -0
- package/dist/sse/parser.js +139 -0
- package/dist/sse/parser.js.map +1 -0
- package/dist/tls/constants.d.ts +15 -74
- package/dist/tls/constants.d.ts.map +1 -1
- package/dist/tls/constants.js +15 -74
- package/dist/tls/constants.js.map +1 -1
- package/dist/tls/ct.d.ts +78 -0
- package/dist/tls/ct.d.ts.map +1 -0
- package/dist/tls/ct.js +175 -0
- package/dist/tls/ct.js.map +1 -0
- package/dist/tls/early-data.d.ts +45 -0
- package/dist/tls/early-data.d.ts.map +1 -0
- package/dist/tls/early-data.js +46 -0
- package/dist/tls/early-data.js.map +1 -0
- package/dist/tls/ech.d.ts +130 -0
- package/dist/tls/ech.d.ts.map +1 -0
- package/dist/tls/ech.js +353 -0
- package/dist/tls/ech.js.map +1 -0
- package/dist/tls/keylog.d.ts +34 -0
- package/dist/tls/keylog.d.ts.map +1 -0
- package/dist/tls/keylog.js +64 -0
- package/dist/tls/keylog.js.map +1 -0
- package/dist/tls/node-engine.d.ts +15 -14
- package/dist/tls/node-engine.d.ts.map +1 -1
- package/dist/tls/node-engine.js +54 -14
- package/dist/tls/node-engine.js.map +1 -1
- package/dist/tls/ocsp.d.ts +55 -0
- package/dist/tls/ocsp.d.ts.map +1 -0
- package/dist/tls/ocsp.js +131 -0
- package/dist/tls/ocsp.js.map +1 -0
- package/dist/tls/pin-verification.d.ts +10 -0
- package/dist/tls/pin-verification.d.ts.map +1 -0
- package/dist/tls/pin-verification.js +28 -0
- package/dist/tls/pin-verification.js.map +1 -0
- package/dist/tls/session-cache.d.ts +58 -0
- package/dist/tls/session-cache.d.ts.map +1 -0
- package/dist/tls/session-cache.js +76 -0
- package/dist/tls/session-cache.js.map +1 -0
- package/dist/tls/stealth/client-hello.d.ts +34 -32
- package/dist/tls/stealth/client-hello.d.ts.map +1 -1
- package/dist/tls/stealth/client-hello.js +116 -11
- package/dist/tls/stealth/client-hello.js.map +1 -1
- package/dist/tls/stealth/engine.d.ts +5 -15
- package/dist/tls/stealth/engine.d.ts.map +1 -1
- package/dist/tls/stealth/engine.js +163 -47
- package/dist/tls/stealth/engine.js.map +1 -1
- package/dist/tls/stealth/handshake.d.ts +23 -32
- package/dist/tls/stealth/handshake.d.ts.map +1 -1
- package/dist/tls/stealth/handshake.js +112 -27
- package/dist/tls/stealth/handshake.js.map +1 -1
- package/dist/tls/stealth/key-schedule.d.ts +59 -86
- package/dist/tls/stealth/key-schedule.d.ts.map +1 -1
- package/dist/tls/stealth/key-schedule.js +46 -58
- package/dist/tls/stealth/key-schedule.js.map +1 -1
- package/dist/tls/stealth/record-layer.d.ts +52 -75
- package/dist/tls/stealth/record-layer.d.ts.map +1 -1
- package/dist/tls/stealth/record-layer.js +47 -63
- package/dist/tls/stealth/record-layer.js.map +1 -1
- package/dist/tls/stealth/tls12-handshake.d.ts +30 -0
- package/dist/tls/stealth/tls12-handshake.d.ts.map +1 -0
- package/dist/tls/stealth/tls12-handshake.js +470 -0
- package/dist/tls/stealth/tls12-handshake.js.map +1 -0
- package/dist/tls/types.d.ts +46 -48
- package/dist/tls/types.d.ts.map +1 -1
- package/dist/utils/buffer-reader.d.ts +26 -81
- package/dist/utils/buffer-reader.d.ts.map +1 -1
- package/dist/utils/buffer-reader.js +26 -81
- package/dist/utils/buffer-reader.js.map +1 -1
- package/dist/utils/buffer-writer.d.ts +30 -66
- package/dist/utils/buffer-writer.d.ts.map +1 -1
- package/dist/utils/buffer-writer.js +30 -66
- package/dist/utils/buffer-writer.js.map +1 -1
- package/dist/utils/compression.d.ts +18 -0
- package/dist/utils/compression.d.ts.map +1 -0
- package/dist/utils/compression.js +34 -0
- package/dist/utils/compression.js.map +1 -0
- package/dist/utils/dictionary-transport.d.ts +97 -0
- package/dist/utils/dictionary-transport.d.ts.map +1 -0
- package/dist/utils/dictionary-transport.js +171 -0
- package/dist/utils/dictionary-transport.js.map +1 -0
- package/dist/utils/encoding.d.ts +12 -28
- package/dist/utils/encoding.d.ts.map +1 -1
- package/dist/utils/encoding.js +77 -40
- package/dist/utils/encoding.js.map +1 -1
- package/dist/utils/happy-eyeballs.d.ts +20 -7
- package/dist/utils/happy-eyeballs.d.ts.map +1 -1
- package/dist/utils/happy-eyeballs.js +57 -25
- package/dist/utils/happy-eyeballs.js.map +1 -1
- package/dist/utils/logger.d.ts +54 -81
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +92 -64
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/tcp-fast-open.d.ts +30 -0
- package/dist/utils/tcp-fast-open.d.ts.map +1 -0
- package/dist/utils/tcp-fast-open.js +36 -0
- package/dist/utils/tcp-fast-open.js.map +1 -0
- package/dist/utils/url.d.ts +18 -25
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +18 -25
- package/dist/utils/url.js.map +1 -1
- package/dist/ws/client.d.ts +35 -52
- package/dist/ws/client.d.ts.map +1 -1
- package/dist/ws/client.js +92 -37
- package/dist/ws/client.js.map +1 -1
- package/dist/ws/frame.d.ts +27 -42
- package/dist/ws/frame.d.ts.map +1 -1
- package/dist/ws/frame.js +25 -37
- package/dist/ws/frame.js.map +1 -1
- package/dist/ws/permessage-deflate.d.ts +53 -0
- package/dist/ws/permessage-deflate.d.ts.map +1 -0
- package/dist/ws/permessage-deflate.js +140 -0
- package/dist/ws/permessage-deflate.js.map +1 -0
- package/package.json +62 -62
package/dist/utils/logger.js
CHANGED
|
@@ -5,24 +5,17 @@ const LEVEL_ORDER = {
|
|
|
5
5
|
error: 3,
|
|
6
6
|
silent: 4,
|
|
7
7
|
};
|
|
8
|
-
/**
|
|
9
|
-
* Default {@link Logger} implementation that writes to `process.stderr`.
|
|
10
|
-
* Messages are prefixed with `[nlcurl:<level>]` and only emitted when the
|
|
11
|
-
* message severity meets or exceeds the configured `level`.
|
|
12
|
-
*
|
|
13
|
-
* Supports scoped child loggers via {@link ConsoleLogger.child}, which
|
|
14
|
-
* prepend a component tag to every message for easy filtering.
|
|
15
|
-
*/
|
|
8
|
+
/** Logger implementation that writes to `stderr` with level filtering. */
|
|
16
9
|
export class ConsoleLogger {
|
|
17
10
|
level;
|
|
18
11
|
prefix;
|
|
19
12
|
bindings;
|
|
20
13
|
/**
|
|
21
|
-
*
|
|
14
|
+
* Create a console logger.
|
|
22
15
|
*
|
|
23
|
-
* @param {LogLevel}
|
|
24
|
-
* @param {string}
|
|
25
|
-
* @param {LogBindings}
|
|
16
|
+
* @param {LogLevel} level - Minimum severity to output.
|
|
17
|
+
* @param {string} prefix - Namespace prefix for log lines.
|
|
18
|
+
* @param {LogBindings} bindings - Structured context fields.
|
|
26
19
|
*/
|
|
27
20
|
constructor(level = "warn", prefix = "", bindings = {}) {
|
|
28
21
|
this.level = LEVEL_ORDER[level];
|
|
@@ -30,17 +23,10 @@ export class ConsoleLogger {
|
|
|
30
23
|
this.bindings = bindings;
|
|
31
24
|
}
|
|
32
25
|
/**
|
|
33
|
-
*
|
|
34
|
-
* an additional component tag to every message. Bindings from the parent
|
|
35
|
-
* are merged with the child's bindings (child values win on conflict).
|
|
36
|
-
*
|
|
37
|
-
* @param {LogBindings} bindings - Additional metadata for the child scope.
|
|
38
|
-
* @returns {ConsoleLogger} A new scoped logger instance.
|
|
26
|
+
* Create a child logger with additional bindings.
|
|
39
27
|
*
|
|
40
|
-
* @
|
|
41
|
-
*
|
|
42
|
-
* const child = logger.child({ component: 'h2' });
|
|
43
|
-
* child.debug('stream opened', { streamId: 1 });
|
|
28
|
+
* @param {LogBindings} bindings - Extra structured context fields.
|
|
29
|
+
* @returns {ConsoleLogger} New child `ConsoleLogger`.
|
|
44
30
|
*/
|
|
45
31
|
child(bindings) {
|
|
46
32
|
const component = typeof bindings["component"] === "string" ? bindings["component"] : "";
|
|
@@ -49,57 +35,32 @@ export class ConsoleLogger {
|
|
|
49
35
|
return new ConsoleLogger(this.resolveLevel(), childPrefix, merged);
|
|
50
36
|
}
|
|
51
37
|
/**
|
|
52
|
-
*
|
|
53
|
-
* logger instance.
|
|
38
|
+
* Change the minimum log level at runtime.
|
|
54
39
|
*
|
|
55
|
-
* @param {LogLevel} level - New
|
|
40
|
+
* @param {LogLevel} level - New severity threshold.
|
|
56
41
|
*/
|
|
57
42
|
setLevel(level) {
|
|
58
43
|
this.level = LEVEL_ORDER[level];
|
|
59
44
|
}
|
|
60
|
-
/**
|
|
61
|
-
* Emits a debug-level message to `stderr` -- only written when the
|
|
62
|
-
* configured minimum level is `'debug'`.
|
|
63
|
-
*
|
|
64
|
-
* @param {string} message - Primary log message.
|
|
65
|
-
* @param {...unknown} args - Additional values appended after the message.
|
|
66
|
-
*/
|
|
45
|
+
/** Log a debug-level message. */
|
|
67
46
|
debug(message, ...args) {
|
|
68
47
|
if (this.level <= LEVEL_ORDER.debug) {
|
|
69
48
|
this.write("debug", message, args);
|
|
70
49
|
}
|
|
71
50
|
}
|
|
72
|
-
/**
|
|
73
|
-
* Emits an info-level message to `stderr` -- only written when the
|
|
74
|
-
* configured minimum level is `'debug'` or `'info'`.
|
|
75
|
-
*
|
|
76
|
-
* @param {string} message - Primary log message.
|
|
77
|
-
* @param {...unknown} args - Additional values appended after the message.
|
|
78
|
-
*/
|
|
51
|
+
/** Log an info-level message. */
|
|
79
52
|
info(message, ...args) {
|
|
80
53
|
if (this.level <= LEVEL_ORDER.info) {
|
|
81
54
|
this.write("info", message, args);
|
|
82
55
|
}
|
|
83
56
|
}
|
|
84
|
-
/**
|
|
85
|
-
* Emits a warn-level message to `stderr` -- only written when the
|
|
86
|
-
* configured minimum level is `'debug'`, `'info'`, or `'warn'`.
|
|
87
|
-
*
|
|
88
|
-
* @param {string} message - Primary log message.
|
|
89
|
-
* @param {...unknown} args - Additional values appended after the message.
|
|
90
|
-
*/
|
|
57
|
+
/** Log a warning-level message. */
|
|
91
58
|
warn(message, ...args) {
|
|
92
59
|
if (this.level <= LEVEL_ORDER.warn) {
|
|
93
60
|
this.write("warn", message, args);
|
|
94
61
|
}
|
|
95
62
|
}
|
|
96
|
-
/**
|
|
97
|
-
* Emits an error-level message to `stderr` -- only written when the
|
|
98
|
-
* configured minimum level is not `'silent'`.
|
|
99
|
-
*
|
|
100
|
-
* @param {string} message - Primary log message.
|
|
101
|
-
* @param {...unknown} args - Additional values appended after the message.
|
|
102
|
-
*/
|
|
63
|
+
/** Log an error-level message. */
|
|
103
64
|
error(message, ...args) {
|
|
104
65
|
if (this.level <= LEVEL_ORDER.error) {
|
|
105
66
|
this.write("error", message, args);
|
|
@@ -122,30 +83,97 @@ export class ConsoleLogger {
|
|
|
122
83
|
return "warn";
|
|
123
84
|
}
|
|
124
85
|
}
|
|
125
|
-
/**
|
|
126
|
-
* A no-op {@link Logger} that discards all messages. Assign this via
|
|
127
|
-
* {@link setDefaultLogger} to silence the library entirely.
|
|
128
|
-
*/
|
|
86
|
+
/** Singleton no-op logger that discards all messages. */
|
|
129
87
|
export const SILENT_LOGGER = {
|
|
130
88
|
debug() { },
|
|
131
89
|
info() { },
|
|
132
90
|
warn() { },
|
|
133
91
|
error() { },
|
|
134
92
|
};
|
|
93
|
+
/** Logger implementation that writes structured JSON to `stderr` with level filtering. */
|
|
94
|
+
export class JsonLogger {
|
|
95
|
+
level;
|
|
96
|
+
service;
|
|
97
|
+
bindings;
|
|
98
|
+
/**
|
|
99
|
+
* Create a JSON logger.
|
|
100
|
+
*
|
|
101
|
+
* @param {LogLevel} level - Minimum severity to output.
|
|
102
|
+
* @param {string} service - Service name included in every log entry.
|
|
103
|
+
* @param {LogBindings} bindings - Structured context fields.
|
|
104
|
+
*/
|
|
105
|
+
constructor(level = "warn", service = "nlcurl", bindings = {}) {
|
|
106
|
+
this.level = LEVEL_ORDER[level];
|
|
107
|
+
this.service = service;
|
|
108
|
+
this.bindings = bindings;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Create a child JSON logger with additional bindings.
|
|
112
|
+
*
|
|
113
|
+
* @param {LogBindings} bindings - Extra structured context fields.
|
|
114
|
+
* @returns {JsonLogger} New child `JsonLogger`.
|
|
115
|
+
*/
|
|
116
|
+
child(bindings) {
|
|
117
|
+
const merged = { ...this.bindings, ...bindings };
|
|
118
|
+
return new JsonLogger(this.resolveLevel(), this.service, merged);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Change the minimum log level at runtime.
|
|
122
|
+
*
|
|
123
|
+
* @param {LogLevel} level - New severity threshold.
|
|
124
|
+
*/
|
|
125
|
+
setLevel(level) {
|
|
126
|
+
this.level = LEVEL_ORDER[level];
|
|
127
|
+
}
|
|
128
|
+
debug(message, ...args) {
|
|
129
|
+
if (this.level <= LEVEL_ORDER.debug)
|
|
130
|
+
this.emit("debug", message, args);
|
|
131
|
+
}
|
|
132
|
+
info(message, ...args) {
|
|
133
|
+
if (this.level <= LEVEL_ORDER.info)
|
|
134
|
+
this.emit("info", message, args);
|
|
135
|
+
}
|
|
136
|
+
warn(message, ...args) {
|
|
137
|
+
if (this.level <= LEVEL_ORDER.warn)
|
|
138
|
+
this.emit("warn", message, args);
|
|
139
|
+
}
|
|
140
|
+
error(message, ...args) {
|
|
141
|
+
if (this.level <= LEVEL_ORDER.error)
|
|
142
|
+
this.emit("error", message, args);
|
|
143
|
+
}
|
|
144
|
+
emit(level, message, args) {
|
|
145
|
+
const entry = {
|
|
146
|
+
timestamp: new Date().toISOString(),
|
|
147
|
+
level,
|
|
148
|
+
message,
|
|
149
|
+
service: this.service,
|
|
150
|
+
};
|
|
151
|
+
for (const [k, v] of Object.entries(this.bindings)) {
|
|
152
|
+
entry[k] = v;
|
|
153
|
+
}
|
|
154
|
+
if (args.length > 0) {
|
|
155
|
+
entry["metadata"] = args;
|
|
156
|
+
}
|
|
157
|
+
process.stderr.write(JSON.stringify(entry) + "\n");
|
|
158
|
+
}
|
|
159
|
+
resolveLevel() {
|
|
160
|
+
for (const [name, order] of Object.entries(LEVEL_ORDER)) {
|
|
161
|
+
if (order === this.level)
|
|
162
|
+
return name;
|
|
163
|
+
}
|
|
164
|
+
return "warn";
|
|
165
|
+
}
|
|
166
|
+
}
|
|
135
167
|
let _default = new ConsoleLogger("warn");
|
|
136
168
|
/**
|
|
137
|
-
*
|
|
169
|
+
* Set the process-wide default logger.
|
|
138
170
|
*
|
|
139
|
-
* @param {Logger} logger -
|
|
171
|
+
* @param {Logger} logger - Logger instance to use as the default.
|
|
140
172
|
*/
|
|
141
173
|
export function setDefaultLogger(logger) {
|
|
142
174
|
_default = logger;
|
|
143
175
|
}
|
|
144
|
-
/**
|
|
145
|
-
* Returns the currently active process-wide logger.
|
|
146
|
-
*
|
|
147
|
-
* @returns {Logger} The active logger instance.
|
|
148
|
-
*/
|
|
176
|
+
/** Return the current process-wide default logger. */
|
|
149
177
|
export function getDefaultLogger() {
|
|
150
178
|
return _default;
|
|
151
179
|
}
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check whether TCP Fast Open is supported on the current platform.
|
|
3
|
+
*
|
|
4
|
+
* @returns {boolean} `true` on Linux and macOS.
|
|
5
|
+
*/
|
|
6
|
+
export declare function isTFOSupported(): boolean;
|
|
7
|
+
/** Configuration for TCP Fast Open (TFO). */
|
|
8
|
+
export interface TFOOptions {
|
|
9
|
+
/** Enable TCP Fast Open for the connection. */
|
|
10
|
+
enabled?: boolean;
|
|
11
|
+
/** Data to send during the TCP handshake. */
|
|
12
|
+
connectData?: Buffer;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Build socket creation options for TCP Fast Open.
|
|
16
|
+
*
|
|
17
|
+
* @param {TFOOptions} [tfo] - TFO configuration.
|
|
18
|
+
* @returns {Record<string, unknown>} Options object to merge into socket creation.
|
|
19
|
+
*/
|
|
20
|
+
export declare function buildTFOSocketOptions(tfo?: TFOOptions): Record<string, unknown>;
|
|
21
|
+
/**
|
|
22
|
+
* Return the current TFO support status and platform name.
|
|
23
|
+
*
|
|
24
|
+
* @returns {{ supported: boolean; platform: string }} Object with `supported` flag and `platform` string.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getTFOStatus(): {
|
|
27
|
+
supported: boolean;
|
|
28
|
+
platform: string;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=tcp-fast-open.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tcp-fast-open.d.ts","sourceRoot":"","sources":["../../src/utils/tcp-fast-open.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAGxC;AAED,6CAA6C;AAC7C,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ/E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAKvE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { platform } from "node:os";
|
|
2
|
+
/**
|
|
3
|
+
* Check whether TCP Fast Open is supported on the current platform.
|
|
4
|
+
*
|
|
5
|
+
* @returns {boolean} `true` on Linux and macOS.
|
|
6
|
+
*/
|
|
7
|
+
export function isTFOSupported() {
|
|
8
|
+
const os = platform();
|
|
9
|
+
return os === "linux" || os === "darwin";
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Build socket creation options for TCP Fast Open.
|
|
13
|
+
*
|
|
14
|
+
* @param {TFOOptions} [tfo] - TFO configuration.
|
|
15
|
+
* @returns {Record<string, unknown>} Options object to merge into socket creation.
|
|
16
|
+
*/
|
|
17
|
+
export function buildTFOSocketOptions(tfo) {
|
|
18
|
+
if (!tfo?.enabled || !isTFOSupported()) {
|
|
19
|
+
return {};
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
fastOpen: true,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Return the current TFO support status and platform name.
|
|
27
|
+
*
|
|
28
|
+
* @returns {{ supported: boolean; platform: string }} Object with `supported` flag and `platform` string.
|
|
29
|
+
*/
|
|
30
|
+
export function getTFOStatus() {
|
|
31
|
+
return {
|
|
32
|
+
supported: isTFOSupported(),
|
|
33
|
+
platform: platform(),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=tcp-fast-open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tcp-fast-open.js","sourceRoot":"","sources":["../../src/utils/tcp-fast-open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IACtB,OAAO,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,QAAQ,CAAC;AAC3C,CAAC;AAUD;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAgB;IACpD,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACvC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,IAAI;KACf,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO;QACL,SAAS,EAAE,cAAc,EAAE;QAC3B,QAAQ,EAAE,QAAQ,EAAE;KACrB,CAAC;AACJ,CAAC"}
|
package/dist/utils/url.d.ts
CHANGED
|
@@ -1,62 +1,55 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* resolution fails, `relative` is returned as-is.
|
|
2
|
+
* Resolve a relative URL against an optional base.
|
|
4
3
|
*
|
|
5
|
-
* @param {string | undefined} base
|
|
6
|
-
* @param {string}
|
|
7
|
-
* @returns {string}
|
|
4
|
+
* @param {string | undefined} base - Base URL string.
|
|
5
|
+
* @param {string} relative - Relative or absolute URL string.
|
|
6
|
+
* @returns {string} Resolved absolute URL string.
|
|
8
7
|
*/
|
|
9
8
|
export declare function resolveURL(base: string | undefined, relative: string): string;
|
|
10
9
|
/**
|
|
11
|
-
*
|
|
12
|
-
* the URL are preserved. `undefined` and `null` values are omitted.
|
|
10
|
+
* Append query parameters to a URL string.
|
|
13
11
|
*
|
|
14
|
-
* @param {string}
|
|
15
|
-
* @param {Record<string, string | number | boolean>}
|
|
16
|
-
* @returns {string} URL with appended query parameters.
|
|
12
|
+
* @param {string} url - Base URL string.
|
|
13
|
+
* @param {Record<string, string | number | boolean>} [params] - Key-value pairs to append.
|
|
14
|
+
* @returns {string} URL string with appended query parameters.
|
|
17
15
|
*/
|
|
18
16
|
export declare function appendParams(url: string, params?: Record<string, string | number | boolean>): string;
|
|
19
17
|
/**
|
|
20
|
-
*
|
|
18
|
+
* Parse a URL string into a `URL` object.
|
|
21
19
|
*
|
|
22
|
-
* @param {string} raw -
|
|
23
|
-
* @returns {URL} Parsed URL.
|
|
24
|
-
* @throws {TypeError} If `raw` is not a valid absolute URL.
|
|
20
|
+
* @param {string} raw - Raw URL string.
|
|
21
|
+
* @returns {URL} Parsed `URL` instance.
|
|
25
22
|
*/
|
|
26
23
|
export declare function parseURL(raw: string): URL;
|
|
27
24
|
/**
|
|
28
|
-
*
|
|
29
|
-
* always included explicitly, defaulting to `443` for `https:` and `80` for
|
|
30
|
-
* `http:`.
|
|
25
|
+
* Extract the origin (scheme + hostname + port) from a URL.
|
|
31
26
|
*
|
|
32
27
|
* @param {string} url - Absolute URL string.
|
|
33
28
|
* @returns {string} Origin string (e.g. `"https://example.com:443"`).
|
|
34
29
|
*/
|
|
35
30
|
export declare function originOf(url: string): string;
|
|
36
31
|
/**
|
|
37
|
-
*
|
|
32
|
+
* Extract the hostname for TLS SNI from a URL.
|
|
38
33
|
*
|
|
39
34
|
* @param {string} url - Absolute URL string.
|
|
40
|
-
* @returns {string} Hostname
|
|
35
|
+
* @returns {string} Hostname string.
|
|
41
36
|
*/
|
|
42
37
|
export declare function sniHost(url: string): string;
|
|
43
38
|
/**
|
|
44
|
-
*
|
|
45
|
-
* `https:` and `80` for `http:` when not explicitly specified in the URL.
|
|
39
|
+
* Extract the hostname and port from a URL.
|
|
46
40
|
*
|
|
47
41
|
* @param {string} url - Absolute URL string.
|
|
48
|
-
* @returns {{ host: string; port: number }}
|
|
42
|
+
* @returns {{ host: string; port: number }} Object with `host` and numeric `port`.
|
|
49
43
|
*/
|
|
50
44
|
export declare function hostPort(url: string): {
|
|
51
45
|
host: string;
|
|
52
46
|
port: number;
|
|
53
47
|
};
|
|
54
48
|
/**
|
|
55
|
-
*
|
|
56
|
-
* request-target in an HTTP/1.1 request line.
|
|
49
|
+
* Extract the request path (pathname + search) from a URL.
|
|
57
50
|
*
|
|
58
51
|
* @param {string} url - Absolute URL string.
|
|
59
|
-
* @returns {string} Path
|
|
52
|
+
* @returns {string} Path string suitable for an HTTP request line.
|
|
60
53
|
*/
|
|
61
54
|
export declare function requestPath(url: string): string;
|
|
62
55
|
//# sourceMappingURL=url.d.ts.map
|
package/dist/utils/url.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO7E;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,MAAM,CASpG;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAEzC;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI5C;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAOpE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C"}
|
package/dist/utils/url.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* resolution fails, `relative` is returned as-is.
|
|
2
|
+
* Resolve a relative URL against an optional base.
|
|
4
3
|
*
|
|
5
|
-
* @param {string | undefined} base
|
|
6
|
-
* @param {string}
|
|
7
|
-
* @returns {string}
|
|
4
|
+
* @param {string | undefined} base - Base URL string.
|
|
5
|
+
* @param {string} relative - Relative or absolute URL string.
|
|
6
|
+
* @returns {string} Resolved absolute URL string.
|
|
8
7
|
*/
|
|
9
8
|
export function resolveURL(base, relative) {
|
|
10
9
|
if (!base)
|
|
@@ -17,12 +16,11 @@ export function resolveURL(base, relative) {
|
|
|
17
16
|
}
|
|
18
17
|
}
|
|
19
18
|
/**
|
|
20
|
-
*
|
|
21
|
-
* the URL are preserved. `undefined` and `null` values are omitted.
|
|
19
|
+
* Append query parameters to a URL string.
|
|
22
20
|
*
|
|
23
|
-
* @param {string}
|
|
24
|
-
* @param {Record<string, string | number | boolean>}
|
|
25
|
-
* @returns {string} URL with appended query parameters.
|
|
21
|
+
* @param {string} url - Base URL string.
|
|
22
|
+
* @param {Record<string, string | number | boolean>} [params] - Key-value pairs to append.
|
|
23
|
+
* @returns {string} URL string with appended query parameters.
|
|
26
24
|
*/
|
|
27
25
|
export function appendParams(url, params) {
|
|
28
26
|
if (!params || Object.keys(params).length === 0)
|
|
@@ -36,19 +34,16 @@ export function appendParams(url, params) {
|
|
|
36
34
|
return parsed.toString();
|
|
37
35
|
}
|
|
38
36
|
/**
|
|
39
|
-
*
|
|
37
|
+
* Parse a URL string into a `URL` object.
|
|
40
38
|
*
|
|
41
|
-
* @param {string} raw -
|
|
42
|
-
* @returns {URL} Parsed URL.
|
|
43
|
-
* @throws {TypeError} If `raw` is not a valid absolute URL.
|
|
39
|
+
* @param {string} raw - Raw URL string.
|
|
40
|
+
* @returns {URL} Parsed `URL` instance.
|
|
44
41
|
*/
|
|
45
42
|
export function parseURL(raw) {
|
|
46
43
|
return new URL(raw);
|
|
47
44
|
}
|
|
48
45
|
/**
|
|
49
|
-
*
|
|
50
|
-
* always included explicitly, defaulting to `443` for `https:` and `80` for
|
|
51
|
-
* `http:`.
|
|
46
|
+
* Extract the origin (scheme + hostname + port) from a URL.
|
|
52
47
|
*
|
|
53
48
|
* @param {string} url - Absolute URL string.
|
|
54
49
|
* @returns {string} Origin string (e.g. `"https://example.com:443"`).
|
|
@@ -59,20 +54,19 @@ export function originOf(url) {
|
|
|
59
54
|
return `${u.protocol}//${u.hostname}:${port}`;
|
|
60
55
|
}
|
|
61
56
|
/**
|
|
62
|
-
*
|
|
57
|
+
* Extract the hostname for TLS SNI from a URL.
|
|
63
58
|
*
|
|
64
59
|
* @param {string} url - Absolute URL string.
|
|
65
|
-
* @returns {string} Hostname
|
|
60
|
+
* @returns {string} Hostname string.
|
|
66
61
|
*/
|
|
67
62
|
export function sniHost(url) {
|
|
68
63
|
return new URL(url).hostname;
|
|
69
64
|
}
|
|
70
65
|
/**
|
|
71
|
-
*
|
|
72
|
-
* `https:` and `80` for `http:` when not explicitly specified in the URL.
|
|
66
|
+
* Extract the hostname and port from a URL.
|
|
73
67
|
*
|
|
74
68
|
* @param {string} url - Absolute URL string.
|
|
75
|
-
* @returns {{ host: string; port: number }}
|
|
69
|
+
* @returns {{ host: string; port: number }} Object with `host` and numeric `port`.
|
|
76
70
|
*/
|
|
77
71
|
export function hostPort(url) {
|
|
78
72
|
const u = new URL(url);
|
|
@@ -83,11 +77,10 @@ export function hostPort(url) {
|
|
|
83
77
|
};
|
|
84
78
|
}
|
|
85
79
|
/**
|
|
86
|
-
*
|
|
87
|
-
* request-target in an HTTP/1.1 request line.
|
|
80
|
+
* Extract the request path (pathname + search) from a URL.
|
|
88
81
|
*
|
|
89
82
|
* @param {string} url - Absolute URL string.
|
|
90
|
-
* @returns {string} Path
|
|
83
|
+
* @returns {string} Path string suitable for an HTTP request line.
|
|
91
84
|
*/
|
|
92
85
|
export function requestPath(url) {
|
|
93
86
|
const u = new URL(url);
|
package/dist/utils/url.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,IAAwB,EAAE,QAAgB;IACnE,IAAI,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,MAAkD;IAC1F,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAE5D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QACpD,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,QAAQ;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW;KAClD,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;AAC/B,CAAC"}
|
package/dist/ws/client.d.ts
CHANGED
|
@@ -1,101 +1,84 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
|
-
/**
|
|
3
|
-
* Options for creating a {@link WebSocketClient} connection.
|
|
4
|
-
*
|
|
5
|
-
* @typedef {Object} WebSocketOptions
|
|
6
|
-
* @property {string} [impersonate] - Browser profile name for fingerprint impersonation.
|
|
7
|
-
* @property {boolean} [stealth] - Use the stealth TLS engine for byte-level fingerprinting.
|
|
8
|
-
* @property {Record<string, string>} [headers] - Additional HTTP upgrade request headers.
|
|
9
|
-
* @property {string[]} [protocols] - Sub-protocol names to negotiate.
|
|
10
|
-
* @property {boolean} [insecure] - Skip TLS certificate validation for `wss:` connections.
|
|
11
|
-
* @property {number} [timeout] - Connection timeout in milliseconds.
|
|
12
|
-
*/
|
|
2
|
+
/** Configuration options for a WebSocket connection. */
|
|
13
3
|
export interface WebSocketOptions {
|
|
4
|
+
/** Browser profile name to impersonate for TLS fingerprinting. */
|
|
14
5
|
impersonate?: string;
|
|
6
|
+
/** Use the stealth TLS engine for fingerprint impersonation. */
|
|
15
7
|
stealth?: boolean;
|
|
8
|
+
/** Additional HTTP headers to include in the upgrade request. */
|
|
16
9
|
headers?: Record<string, string>;
|
|
10
|
+
/** Subprotocols to offer during the upgrade handshake. */
|
|
17
11
|
protocols?: string[];
|
|
12
|
+
/** Skip TLS certificate verification. */
|
|
18
13
|
insecure?: boolean;
|
|
14
|
+
/** Connection timeout in milliseconds. */
|
|
19
15
|
timeout?: number;
|
|
16
|
+
/** Enable per-message deflate compression. */
|
|
17
|
+
compress?: boolean;
|
|
20
18
|
}
|
|
21
|
-
/**
|
|
22
|
-
* WebSocket connection state.
|
|
23
|
-
*
|
|
24
|
-
* @typedef {'connecting' | 'open' | 'closing' | 'closed'} WebSocketState
|
|
25
|
-
*/
|
|
19
|
+
/** Current lifecycle state of the WebSocket connection. */
|
|
26
20
|
export type WebSocketState = "connecting" | "open" | "closing" | "closed";
|
|
27
|
-
/**
|
|
28
|
-
* Typed event map for {@link WebSocketClient}.
|
|
29
|
-
*
|
|
30
|
-
* @typedef {Object} WebSocketEvents
|
|
31
|
-
* @property {[]} open - Emitted when the connection is established.
|
|
32
|
-
* @property {[data: string | Buffer, isBinary: boolean]} message - Emitted for each incoming message.
|
|
33
|
-
* @property {[code: number, reason: string]} close - Emitted when the connection closes.
|
|
34
|
-
* @property {[error: Error]} error - Emitted on connection or protocol errors.
|
|
35
|
-
* @property {[data: Buffer]} ping - Emitted when a PING frame is received.
|
|
36
|
-
* @property {[data: Buffer]} pong - Emitted when a PONG frame is received.
|
|
37
|
-
*/
|
|
21
|
+
/** Event map for {@link WebSocketClient} emitter. */
|
|
38
22
|
export interface WebSocketEvents {
|
|
23
|
+
/** Fired when the connection has been established. */
|
|
39
24
|
open: [];
|
|
25
|
+
/** Fired when a text or binary message is received. */
|
|
40
26
|
message: [data: string | Buffer, isBinary: boolean];
|
|
27
|
+
/** Fired when the connection has been cleanly closed. */
|
|
41
28
|
close: [code: number, reason: string];
|
|
29
|
+
/** Fired on transport or protocol errors. */
|
|
42
30
|
error: [error: Error];
|
|
31
|
+
/** Fired when a ping frame is received. */
|
|
43
32
|
ping: [data: Buffer];
|
|
33
|
+
/** Fired when a pong frame is received. */
|
|
44
34
|
pong: [data: Buffer];
|
|
45
35
|
}
|
|
46
36
|
/**
|
|
47
|
-
* WebSocket client with optional
|
|
48
|
-
*
|
|
49
|
-
* The connection is initiated asynchronously in the constructor; listen for
|
|
50
|
-
* the `'open'` event before sending frames.
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* const ws = new WebSocketClient('wss://echo.example.com', { impersonate: 'chrome136' });
|
|
54
|
-
* ws.on('open', () => ws.sendText('hello'));
|
|
55
|
-
* ws.on('message', (data) => console.log(data));
|
|
37
|
+
* RFC 6455 WebSocket client with optional TLS fingerprinting
|
|
38
|
+
* and per-message deflate compression.
|
|
56
39
|
*/
|
|
57
40
|
export declare class WebSocketClient extends EventEmitter {
|
|
41
|
+
/** Current connection lifecycle state. */
|
|
58
42
|
state: WebSocketState;
|
|
43
|
+
/** Negotiated subprotocol, or empty string if none. */
|
|
59
44
|
protocol: string;
|
|
45
|
+
/** Original WebSocket URL. */
|
|
60
46
|
readonly url: string;
|
|
61
47
|
private socket;
|
|
62
48
|
private parser;
|
|
63
49
|
private fragments;
|
|
64
50
|
private fragmentOpcode;
|
|
51
|
+
private deflate;
|
|
65
52
|
/**
|
|
66
|
-
*
|
|
53
|
+
* Create a new WebSocket connection.
|
|
67
54
|
*
|
|
68
|
-
* @param {string}
|
|
69
|
-
* @param {WebSocketOptions} [options
|
|
55
|
+
* @param {string} url - `ws://` or `wss://` URL to connect to.
|
|
56
|
+
* @param {WebSocketOptions} [options] - Connection and TLS options.
|
|
70
57
|
*/
|
|
71
58
|
constructor(url: string, options?: WebSocketOptions);
|
|
72
59
|
/**
|
|
73
|
-
*
|
|
60
|
+
* Send a UTF-8 text message.
|
|
74
61
|
*
|
|
75
|
-
* @param {string} data - Text to send.
|
|
76
|
-
* @throws {NLcURLError} If the WebSocket is not in the `'open'` state.
|
|
62
|
+
* @param {string} data - Text payload to send.
|
|
77
63
|
*/
|
|
78
64
|
sendText(data: string): void;
|
|
79
65
|
/**
|
|
80
|
-
*
|
|
66
|
+
* Send a binary message.
|
|
81
67
|
*
|
|
82
|
-
* @param {Buffer} data - Binary
|
|
83
|
-
* @throws {NLcURLError} If the WebSocket is not in the `'open'` state.
|
|
68
|
+
* @param {Buffer} data - Binary payload to send.
|
|
84
69
|
*/
|
|
85
70
|
sendBinary(data: Buffer): void;
|
|
86
71
|
/**
|
|
87
|
-
*
|
|
72
|
+
* Send a WebSocket ping frame.
|
|
88
73
|
*
|
|
89
|
-
* @param {Buffer} [data
|
|
90
|
-
* @throws {NLcURLError} If the WebSocket is not in the `'open'` state.
|
|
74
|
+
* @param {Buffer} [data] - Optional payload (up to 125 bytes).
|
|
91
75
|
*/
|
|
92
76
|
ping(data?: Buffer): void;
|
|
93
77
|
/**
|
|
94
|
-
*
|
|
95
|
-
* given status code and reason. Does nothing if the connection is not open.
|
|
78
|
+
* Initiate a graceful close handshake.
|
|
96
79
|
*
|
|
97
|
-
* @param {number} [code
|
|
98
|
-
* @param {string} [reason
|
|
80
|
+
* @param {number} [code] - Close status code (default `1000`).
|
|
81
|
+
* @param {string} [reason] - Human-readable close reason.
|
|
99
82
|
*/
|
|
100
83
|
close(code?: number, reason?: string): void;
|
|
101
84
|
private assertOpen;
|