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/encoding.js
CHANGED
|
@@ -1,30 +1,25 @@
|
|
|
1
1
|
import * as zlib from "node:zlib";
|
|
2
2
|
import { promisify } from "node:util";
|
|
3
|
+
import { Transform } from "node:stream";
|
|
3
4
|
const gunzipAsync = promisify(zlib.gunzip);
|
|
4
5
|
const inflateAsync = promisify(zlib.inflate);
|
|
5
6
|
const brotliDecompressAsync = promisify(zlib.brotliDecompress);
|
|
6
7
|
const _zstdFn = zlib["zstdDecompress"];
|
|
7
8
|
const zstdDecompressAsync = typeof _zstdFn === "function" ? promisify(_zstdFn) : null;
|
|
8
|
-
/**
|
|
9
|
-
* `true` when the current Node.js runtime provides native Zstandard
|
|
10
|
-
* decompression support (`zlib.zstdDecompress`). `false` on older Node.js
|
|
11
|
-
* versions that lack the API.
|
|
12
|
-
*/
|
|
9
|
+
/** Whether the current Node.js build supports zstd decompression. */
|
|
13
10
|
export const supportsZstd = zstdDecompressAsync !== null;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return body;
|
|
27
|
-
const encoding = contentEncoding.trim().toLowerCase();
|
|
11
|
+
const MAX_CONTENT_ENCODING_LAYERS = 5;
|
|
12
|
+
function parseEncodings(contentEncoding) {
|
|
13
|
+
const encodings = contentEncoding
|
|
14
|
+
.split(",")
|
|
15
|
+
.map((s) => s.trim().toLowerCase())
|
|
16
|
+
.filter((s) => s.length > 0 && s !== "identity");
|
|
17
|
+
if (encodings.length > MAX_CONTENT_ENCODING_LAYERS) {
|
|
18
|
+
throw new Error(`Content-Encoding exceeds maximum layer count (${encodings.length} > ${MAX_CONTENT_ENCODING_LAYERS})`);
|
|
19
|
+
}
|
|
20
|
+
return encodings;
|
|
21
|
+
}
|
|
22
|
+
async function decompressSingle(body, encoding) {
|
|
28
23
|
switch (encoding) {
|
|
29
24
|
case "gzip":
|
|
30
25
|
case "x-gzip":
|
|
@@ -38,24 +33,30 @@ export async function decompressBody(body, contentEncoding) {
|
|
|
38
33
|
return zstdDecompressAsync(body);
|
|
39
34
|
}
|
|
40
35
|
return body;
|
|
41
|
-
case "identity":
|
|
42
|
-
return body;
|
|
43
36
|
default:
|
|
44
37
|
return body;
|
|
45
38
|
}
|
|
46
39
|
}
|
|
47
40
|
/**
|
|
48
|
-
*
|
|
49
|
-
* using the algorithm indicated by `contentEncoding`. Returns `null` when
|
|
50
|
-
* no transform is needed (unknown or `identity` encoding).
|
|
41
|
+
* Decompress a response body according to `Content-Encoding` layers.
|
|
51
42
|
*
|
|
52
|
-
* @param {
|
|
53
|
-
* @
|
|
43
|
+
* @param {Buffer} body - Compressed body bytes.
|
|
44
|
+
* @param {string | undefined} contentEncoding - Comma-separated encoding list.
|
|
45
|
+
* @returns {Promise<Buffer>} Decompressed buffer.
|
|
54
46
|
*/
|
|
55
|
-
export function
|
|
56
|
-
if (!contentEncoding)
|
|
57
|
-
return
|
|
58
|
-
const
|
|
47
|
+
export async function decompressBody(body, contentEncoding) {
|
|
48
|
+
if (!contentEncoding || body.length === 0)
|
|
49
|
+
return body;
|
|
50
|
+
const encodings = parseEncodings(contentEncoding);
|
|
51
|
+
if (encodings.length === 0)
|
|
52
|
+
return body;
|
|
53
|
+
let result = body;
|
|
54
|
+
for (let i = encodings.length - 1; i >= 0; i--) {
|
|
55
|
+
result = await decompressSingle(result, encodings[i]);
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
function createSingleDecompressStream(encoding) {
|
|
59
60
|
switch (encoding) {
|
|
60
61
|
case "gzip":
|
|
61
62
|
case "x-gzip":
|
|
@@ -71,28 +72,64 @@ export function createDecompressStream(contentEncoding) {
|
|
|
71
72
|
}
|
|
72
73
|
return null;
|
|
73
74
|
}
|
|
74
|
-
case "identity":
|
|
75
|
-
return null;
|
|
76
75
|
default:
|
|
77
76
|
return null;
|
|
78
77
|
}
|
|
79
78
|
}
|
|
80
79
|
/**
|
|
81
|
-
*
|
|
82
|
-
* Node.js runtime. Includes `zstd` when Zstandard is available.
|
|
80
|
+
* Create a streaming decompressor for the given `Content-Encoding`.
|
|
83
81
|
*
|
|
84
|
-
* @
|
|
82
|
+
* @param {string | undefined} contentEncoding - Comma-separated encoding list.
|
|
83
|
+
* @returns {Transform | null} Transform stream, or `null` if no decompression is needed.
|
|
85
84
|
*/
|
|
85
|
+
export function createDecompressStream(contentEncoding) {
|
|
86
|
+
if (!contentEncoding)
|
|
87
|
+
return null;
|
|
88
|
+
const encodings = parseEncodings(contentEncoding);
|
|
89
|
+
if (encodings.length === 0)
|
|
90
|
+
return null;
|
|
91
|
+
if (encodings.length === 1) {
|
|
92
|
+
return createSingleDecompressStream(encodings[0]);
|
|
93
|
+
}
|
|
94
|
+
const decompressors = [];
|
|
95
|
+
for (let i = encodings.length - 1; i >= 0; i--) {
|
|
96
|
+
const d = createSingleDecompressStream(encodings[i]);
|
|
97
|
+
if (d)
|
|
98
|
+
decompressors.push(d);
|
|
99
|
+
}
|
|
100
|
+
if (decompressors.length === 0)
|
|
101
|
+
return null;
|
|
102
|
+
if (decompressors.length === 1)
|
|
103
|
+
return decompressors[0];
|
|
104
|
+
for (let i = 0; i < decompressors.length - 1; i++) {
|
|
105
|
+
decompressors[i].pipe(decompressors[i + 1]);
|
|
106
|
+
}
|
|
107
|
+
const first = decompressors[0];
|
|
108
|
+
const last = decompressors[decompressors.length - 1];
|
|
109
|
+
const compound = new Transform({
|
|
110
|
+
transform(chunk, _encoding, callback) {
|
|
111
|
+
first.write(chunk, _encoding, callback);
|
|
112
|
+
},
|
|
113
|
+
flush(callback) {
|
|
114
|
+
first.end();
|
|
115
|
+
last.once("end", () => {
|
|
116
|
+
callback();
|
|
117
|
+
});
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
last.on("data", (chunk) => compound.push(chunk));
|
|
121
|
+
last.on("error", (err) => compound.destroy(err));
|
|
122
|
+
return compound;
|
|
123
|
+
}
|
|
124
|
+
/** Return the default `Accept-Encoding` header value for this runtime. */
|
|
86
125
|
export function defaultAcceptEncoding() {
|
|
87
126
|
return supportsZstd ? "gzip, deflate, br, zstd" : "gzip, deflate, br";
|
|
88
127
|
}
|
|
89
128
|
/**
|
|
90
|
-
*
|
|
91
|
-
* current runtime does not support Zstandard decompression. Otherwise returns
|
|
92
|
-
* the value unchanged.
|
|
129
|
+
* Strip unsupported encodings (e.g. `zstd`) from an `Accept-Encoding` value.
|
|
93
130
|
*
|
|
94
|
-
* @param {string} value -
|
|
95
|
-
* @returns {string} Sanitized
|
|
131
|
+
* @param {string} value - Original `Accept-Encoding` header value.
|
|
132
|
+
* @returns {string} Sanitized header value.
|
|
96
133
|
*/
|
|
97
134
|
export function sanitizeAcceptEncoding(value) {
|
|
98
135
|
if (supportsZstd)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../src/utils/encoding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../src/utils/encoding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,39 @@
|
|
|
1
1
|
import * as net from "node:net";
|
|
2
|
+
import type { DoHResolver } from "../dns/doh-resolver.js";
|
|
3
|
+
/** Options for the Happy Eyeballs (RFC 8305) connection algorithm. */
|
|
2
4
|
export interface HappyEyeballsOptions {
|
|
5
|
+
/** Destination hostname or IP address. */
|
|
3
6
|
host: string;
|
|
7
|
+
/** Destination port. */
|
|
4
8
|
port: number;
|
|
9
|
+
/** Restrict connections to IPv4 (`4`) or IPv6 (`6`). */
|
|
5
10
|
family?: 4 | 6;
|
|
11
|
+
/** Overall connection timeout in milliseconds. */
|
|
6
12
|
timeout?: number;
|
|
13
|
+
/** Abort signal to cancel the connection attempt. */
|
|
7
14
|
signal?: AbortSignal;
|
|
15
|
+
/** DNS-over-HTTPS resolver to use instead of system DNS. */
|
|
16
|
+
dohResolver?: DoHResolver;
|
|
8
17
|
}
|
|
18
|
+
/** Outcome of a Happy Eyeballs connection attempt. */
|
|
9
19
|
export interface HappyEyeballsResult {
|
|
20
|
+
/** Connected TCP socket. */
|
|
10
21
|
socket: net.Socket;
|
|
22
|
+
/** Resolved IP address that was connected to. */
|
|
11
23
|
address: string;
|
|
24
|
+
/** IP address family of the connected socket. */
|
|
12
25
|
family: number;
|
|
26
|
+
/** Time spent on DNS resolution in milliseconds. */
|
|
13
27
|
dnsTimeMs: number;
|
|
14
28
|
}
|
|
15
29
|
/**
|
|
16
|
-
*
|
|
30
|
+
* Connect to a host using the Happy Eyeballs algorithm (RFC 8305).
|
|
17
31
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* 5. Returns the first socket that connects; destroys all others.
|
|
32
|
+
* Races IPv6 and IPv4 connection attempts with a staggered delay
|
|
33
|
+
* for fast fallback.
|
|
34
|
+
*
|
|
35
|
+
* @param {HappyEyeballsOptions} options - Connection options.
|
|
36
|
+
* @returns {Promise<HappyEyeballsResult>} Connected socket and connection metadata.
|
|
24
37
|
*/
|
|
25
38
|
export declare function happyEyeballsConnect(options: HappyEyeballsOptions): Promise<HappyEyeballsResult>;
|
|
26
39
|
//# sourceMappingURL=happy-eyeballs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"happy-eyeballs.d.ts","sourceRoot":"","sources":["../../src/utils/happy-eyeballs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"happy-eyeballs.d.ts","sourceRoot":"","sources":["../../src/utils/happy-eyeballs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAW1D,sEAAsE;AACtE,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,sDAAsD;AACtD,MAAM,WAAW,mBAAmB;IAClC,4BAA4B;IAC5B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;IACnB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA6BtG"}
|
|
@@ -1,26 +1,32 @@
|
|
|
1
1
|
import * as net from "node:net";
|
|
2
2
|
import { lookup } from "node:dns/promises";
|
|
3
|
-
|
|
3
|
+
import { parseARecord, parseAAAARecord } from "../dns/codec.js";
|
|
4
|
+
import { RTYPE } from "../dns/types.js";
|
|
4
5
|
const ATTEMPT_DELAY_MS = 250;
|
|
5
6
|
/**
|
|
6
|
-
*
|
|
7
|
+
* Connect to a host using the Happy Eyeballs algorithm (RFC 8305).
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* 5. Returns the first socket that connects; destroys all others.
|
|
9
|
+
* Races IPv6 and IPv4 connection attempts with a staggered delay
|
|
10
|
+
* for fast fallback.
|
|
11
|
+
*
|
|
12
|
+
* @param {HappyEyeballsOptions} options - Connection options.
|
|
13
|
+
* @returns {Promise<HappyEyeballsResult>} Connected socket and connection metadata.
|
|
14
14
|
*/
|
|
15
15
|
export async function happyEyeballsConnect(options) {
|
|
16
|
-
const { host, port, family, timeout, signal } = options;
|
|
16
|
+
const { host, port, family, timeout, signal, dohResolver } = options;
|
|
17
17
|
const ipVersion = net.isIP(host);
|
|
18
18
|
if (ipVersion) {
|
|
19
19
|
const socket = await raceTcpConnections([{ address: host, family: ipVersion }], port, timeout, signal);
|
|
20
20
|
return { socket: socket.socket, address: host, family: ipVersion, dnsTimeMs: 0 };
|
|
21
21
|
}
|
|
22
22
|
const dnsStart = Date.now();
|
|
23
|
-
|
|
23
|
+
let addresses;
|
|
24
|
+
if (dohResolver) {
|
|
25
|
+
addresses = await resolveWithDoH(dohResolver, host, family, signal);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
addresses = await lookup(host, { all: true, family: family ?? 0 });
|
|
29
|
+
}
|
|
24
30
|
const dnsTimeMs = Date.now() - dnsStart;
|
|
25
31
|
if (!addresses.length) {
|
|
26
32
|
const err = new Error(`getaddrinfo ENOTFOUND ${host}`);
|
|
@@ -31,10 +37,6 @@ export async function happyEyeballsConnect(options) {
|
|
|
31
37
|
const result = await raceTcpConnections(sorted, port, timeout, signal);
|
|
32
38
|
return { socket: result.socket, address: result.address, family: result.family, dnsTimeMs };
|
|
33
39
|
}
|
|
34
|
-
/**
|
|
35
|
-
* Interleave IPv6 and IPv4 addresses per RFC 8305 §4.
|
|
36
|
-
* The first address family returned by the resolver leads.
|
|
37
|
-
*/
|
|
38
40
|
function interleaveAddressFamilies(addresses) {
|
|
39
41
|
const ipv6 = [];
|
|
40
42
|
const ipv4 = [];
|
|
@@ -59,11 +61,6 @@ function interleaveAddressFamilies(addresses) {
|
|
|
59
61
|
}
|
|
60
62
|
return out;
|
|
61
63
|
}
|
|
62
|
-
/**
|
|
63
|
-
* Race TCP connections across the sorted address list.
|
|
64
|
-
* Each new attempt starts after ATTEMPT_DELAY_MS or immediately after
|
|
65
|
-
* the previous attempt fails — whichever comes first.
|
|
66
|
-
*/
|
|
67
64
|
function raceTcpConnections(addresses, port, timeout, signal) {
|
|
68
65
|
if (addresses.length === 1) {
|
|
69
66
|
return singleConnect(addresses[0], port, timeout, signal);
|
|
@@ -104,7 +101,7 @@ function raceTcpConnections(addresses, port, timeout, signal) {
|
|
|
104
101
|
if (errors.length >= sockets.length && attemptIndex >= addresses.length) {
|
|
105
102
|
settled = true;
|
|
106
103
|
cleanup();
|
|
107
|
-
reject(errors[0]);
|
|
104
|
+
reject(errors[0] ?? new Error("All connection attempts failed"));
|
|
108
105
|
return;
|
|
109
106
|
}
|
|
110
107
|
if (attemptIndex < addresses.length) {
|
|
@@ -119,7 +116,9 @@ function raceTcpConnections(addresses, port, timeout, signal) {
|
|
|
119
116
|
const entry = addresses[attemptIndex++];
|
|
120
117
|
const socket = net.createConnection({ host: entry.address, port, family: entry.family });
|
|
121
118
|
sockets.push(socket);
|
|
122
|
-
socket.once("connect", () =>
|
|
119
|
+
socket.once("connect", () => {
|
|
120
|
+
onSettled(socket, entry.address, entry.family);
|
|
121
|
+
});
|
|
123
122
|
socket.once("error", onAttemptError);
|
|
124
123
|
if (attemptIndex < addresses.length) {
|
|
125
124
|
delayTimer = setTimeout(startNextAttempt, ATTEMPT_DELAY_MS);
|
|
@@ -154,7 +153,6 @@ function raceTcpConnections(addresses, port, timeout, signal) {
|
|
|
154
153
|
startNextAttempt();
|
|
155
154
|
});
|
|
156
155
|
}
|
|
157
|
-
/** Direct single-address connect, used when there is only one candidate. */
|
|
158
156
|
function singleConnect(entry, port, timeout, signal) {
|
|
159
157
|
return new Promise((resolve, reject) => {
|
|
160
158
|
let settled = false;
|
|
@@ -191,11 +189,45 @@ function singleConnect(entry, port, timeout, signal) {
|
|
|
191
189
|
reject(new Error("Connection aborted"));
|
|
192
190
|
return;
|
|
193
191
|
}
|
|
194
|
-
abortHandler = () =>
|
|
192
|
+
abortHandler = () => {
|
|
193
|
+
finish(new Error("Connection aborted"));
|
|
194
|
+
};
|
|
195
195
|
signal.addEventListener("abort", abortHandler, { once: true });
|
|
196
196
|
}
|
|
197
|
-
socket.once("connect", () =>
|
|
198
|
-
|
|
197
|
+
socket.once("connect", () => {
|
|
198
|
+
finish();
|
|
199
|
+
});
|
|
200
|
+
socket.once("error", (err) => {
|
|
201
|
+
finish(err);
|
|
202
|
+
});
|
|
199
203
|
});
|
|
200
204
|
}
|
|
205
|
+
async function resolveWithDoH(resolver, host, family, signal) {
|
|
206
|
+
const results = [];
|
|
207
|
+
try {
|
|
208
|
+
if (!family || family === 6) {
|
|
209
|
+
const aaaa = await resolver.query(host, "AAAA", signal);
|
|
210
|
+
for (const r of aaaa) {
|
|
211
|
+
if (r.type === RTYPE.AAAA && r.data.length === 16) {
|
|
212
|
+
results.push({ address: parseAAAARecord(r.data), family: 6 });
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
if (!family || family === 4) {
|
|
217
|
+
const a = await resolver.query(host, "A", signal);
|
|
218
|
+
for (const r of a) {
|
|
219
|
+
if (r.type === RTYPE.A && r.data.length === 4) {
|
|
220
|
+
results.push({ address: parseARecord(r.data), family: 4 });
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return lookup(host, { all: true, family: family ?? 0 });
|
|
227
|
+
}
|
|
228
|
+
if (results.length === 0) {
|
|
229
|
+
return lookup(host, { all: true, family: family ?? 0 });
|
|
230
|
+
}
|
|
231
|
+
return results;
|
|
232
|
+
}
|
|
201
233
|
//# sourceMappingURL=happy-eyeballs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"happy-eyeballs.js","sourceRoot":"","sources":["../../src/utils/happy-eyeballs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"happy-eyeballs.js","sourceRoot":"","sources":["../../src/utils/happy-eyeballs.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,124 +1,97 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Minimum severity level for log emission. Messages below this level are
|
|
3
|
-
* suppressed. `'silent'` disables all output.
|
|
4
|
-
*
|
|
5
|
-
* @typedef {'debug' | 'info' | 'warn' | 'error' | 'silent'} LogLevel
|
|
6
|
-
*/
|
|
1
|
+
/** Severity levels for log output. */
|
|
7
2
|
export type LogLevel = "debug" | "info" | "warn" | "error" | "silent";
|
|
8
|
-
/**
|
|
9
|
-
* Key-value metadata attached to every log entry produced by a child logger.
|
|
10
|
-
* Bindings are inherited from parent to child, allowing nested scoping.
|
|
11
|
-
*
|
|
12
|
-
* @typedef {Record<string, unknown>} LogBindings
|
|
13
|
-
*/
|
|
3
|
+
/** Structured key-value bindings attached to log messages. */
|
|
14
4
|
export type LogBindings = Record<string, unknown>;
|
|
15
|
-
/**
|
|
16
|
-
* Minimal logger interface consumed throughout the library. Implementations
|
|
17
|
-
* must provide four severity methods; all parameters follow `console.log`
|
|
18
|
-
* semantics (a primary message string followed by optional extra values).
|
|
19
|
-
*/
|
|
5
|
+
/** Minimal structured logging interface. */
|
|
20
6
|
export interface Logger {
|
|
21
|
-
/**
|
|
7
|
+
/** Emit a debug-level message. */
|
|
22
8
|
debug(message: string, ...args: unknown[]): void;
|
|
23
|
-
/**
|
|
9
|
+
/** Emit an info-level message. */
|
|
24
10
|
info(message: string, ...args: unknown[]): void;
|
|
25
|
-
/**
|
|
11
|
+
/** Emit a warning-level message. */
|
|
26
12
|
warn(message: string, ...args: unknown[]): void;
|
|
27
|
-
/**
|
|
13
|
+
/** Emit an error-level message. */
|
|
28
14
|
error(message: string, ...args: unknown[]): void;
|
|
29
15
|
}
|
|
30
|
-
/**
|
|
31
|
-
* Default {@link Logger} implementation that writes to `process.stderr`.
|
|
32
|
-
* Messages are prefixed with `[nlcurl:<level>]` and only emitted when the
|
|
33
|
-
* message severity meets or exceeds the configured `level`.
|
|
34
|
-
*
|
|
35
|
-
* Supports scoped child loggers via {@link ConsoleLogger.child}, which
|
|
36
|
-
* prepend a component tag to every message for easy filtering.
|
|
37
|
-
*/
|
|
16
|
+
/** Logger implementation that writes to `stderr` with level filtering. */
|
|
38
17
|
export declare class ConsoleLogger implements Logger {
|
|
39
18
|
private level;
|
|
40
19
|
private readonly prefix;
|
|
41
20
|
private readonly bindings;
|
|
42
21
|
/**
|
|
43
|
-
*
|
|
22
|
+
* Create a console logger.
|
|
44
23
|
*
|
|
45
|
-
* @param {LogLevel}
|
|
46
|
-
* @param {string}
|
|
47
|
-
* @param {LogBindings}
|
|
24
|
+
* @param {LogLevel} level - Minimum severity to output.
|
|
25
|
+
* @param {string} prefix - Namespace prefix for log lines.
|
|
26
|
+
* @param {LogBindings} bindings - Structured context fields.
|
|
48
27
|
*/
|
|
49
28
|
constructor(level?: LogLevel, prefix?: string, bindings?: LogBindings);
|
|
50
29
|
/**
|
|
51
|
-
*
|
|
52
|
-
* an additional component tag to every message. Bindings from the parent
|
|
53
|
-
* are merged with the child's bindings (child values win on conflict).
|
|
54
|
-
*
|
|
55
|
-
* @param {LogBindings} bindings - Additional metadata for the child scope.
|
|
56
|
-
* @returns {ConsoleLogger} A new scoped logger instance.
|
|
30
|
+
* Create a child logger with additional bindings.
|
|
57
31
|
*
|
|
58
|
-
* @
|
|
59
|
-
*
|
|
60
|
-
* const child = logger.child({ component: 'h2' });
|
|
61
|
-
* child.debug('stream opened', { streamId: 1 });
|
|
32
|
+
* @param {LogBindings} bindings - Extra structured context fields.
|
|
33
|
+
* @returns {ConsoleLogger} New child `ConsoleLogger`.
|
|
62
34
|
*/
|
|
63
35
|
child(bindings: LogBindings): ConsoleLogger;
|
|
64
36
|
/**
|
|
65
|
-
*
|
|
66
|
-
* logger instance.
|
|
37
|
+
* Change the minimum log level at runtime.
|
|
67
38
|
*
|
|
68
|
-
* @param {LogLevel} level - New
|
|
39
|
+
* @param {LogLevel} level - New severity threshold.
|
|
69
40
|
*/
|
|
70
41
|
setLevel(level: LogLevel): void;
|
|
71
|
-
/**
|
|
72
|
-
* Emits a debug-level message to `stderr` -- only written when the
|
|
73
|
-
* configured minimum level is `'debug'`.
|
|
74
|
-
*
|
|
75
|
-
* @param {string} message - Primary log message.
|
|
76
|
-
* @param {...unknown} args - Additional values appended after the message.
|
|
77
|
-
*/
|
|
42
|
+
/** Log a debug-level message. */
|
|
78
43
|
debug(message: string, ...args: unknown[]): void;
|
|
44
|
+
/** Log an info-level message. */
|
|
45
|
+
info(message: string, ...args: unknown[]): void;
|
|
46
|
+
/** Log a warning-level message. */
|
|
47
|
+
warn(message: string, ...args: unknown[]): void;
|
|
48
|
+
/** Log an error-level message. */
|
|
49
|
+
error(message: string, ...args: unknown[]): void;
|
|
50
|
+
private write;
|
|
51
|
+
private formatArgs;
|
|
52
|
+
private resolveLevel;
|
|
53
|
+
}
|
|
54
|
+
/** Singleton no-op logger that discards all messages. */
|
|
55
|
+
export declare const SILENT_LOGGER: Logger;
|
|
56
|
+
/** Logger implementation that writes structured JSON to `stderr` with level filtering. */
|
|
57
|
+
export declare class JsonLogger implements Logger {
|
|
58
|
+
private level;
|
|
59
|
+
private readonly service;
|
|
60
|
+
private readonly bindings;
|
|
79
61
|
/**
|
|
80
|
-
*
|
|
81
|
-
* configured minimum level is `'debug'` or `'info'`.
|
|
62
|
+
* Create a JSON logger.
|
|
82
63
|
*
|
|
83
|
-
* @param {
|
|
84
|
-
* @param {
|
|
64
|
+
* @param {LogLevel} level - Minimum severity to output.
|
|
65
|
+
* @param {string} service - Service name included in every log entry.
|
|
66
|
+
* @param {LogBindings} bindings - Structured context fields.
|
|
85
67
|
*/
|
|
86
|
-
|
|
68
|
+
constructor(level?: LogLevel, service?: string, bindings?: LogBindings);
|
|
87
69
|
/**
|
|
88
|
-
*
|
|
89
|
-
* configured minimum level is `'debug'`, `'info'`, or `'warn'`.
|
|
70
|
+
* Create a child JSON logger with additional bindings.
|
|
90
71
|
*
|
|
91
|
-
* @param {
|
|
92
|
-
* @
|
|
72
|
+
* @param {LogBindings} bindings - Extra structured context fields.
|
|
73
|
+
* @returns {JsonLogger} New child `JsonLogger`.
|
|
93
74
|
*/
|
|
94
|
-
|
|
75
|
+
child(bindings: LogBindings): JsonLogger;
|
|
95
76
|
/**
|
|
96
|
-
*
|
|
97
|
-
* configured minimum level is not `'silent'`.
|
|
77
|
+
* Change the minimum log level at runtime.
|
|
98
78
|
*
|
|
99
|
-
* @param {
|
|
100
|
-
* @param {...unknown} args - Additional values appended after the message.
|
|
79
|
+
* @param {LogLevel} level - New severity threshold.
|
|
101
80
|
*/
|
|
81
|
+
setLevel(level: LogLevel): void;
|
|
82
|
+
debug(message: string, ...args: unknown[]): void;
|
|
83
|
+
info(message: string, ...args: unknown[]): void;
|
|
84
|
+
warn(message: string, ...args: unknown[]): void;
|
|
102
85
|
error(message: string, ...args: unknown[]): void;
|
|
103
|
-
private
|
|
104
|
-
private formatArgs;
|
|
86
|
+
private emit;
|
|
105
87
|
private resolveLevel;
|
|
106
88
|
}
|
|
107
89
|
/**
|
|
108
|
-
*
|
|
109
|
-
* {@link setDefaultLogger} to silence the library entirely.
|
|
110
|
-
*/
|
|
111
|
-
export declare const SILENT_LOGGER: Logger;
|
|
112
|
-
/**
|
|
113
|
-
* Replaces the process-wide default logger used by all NLcURL internals.
|
|
90
|
+
* Set the process-wide default logger.
|
|
114
91
|
*
|
|
115
|
-
* @param {Logger} logger -
|
|
92
|
+
* @param {Logger} logger - Logger instance to use as the default.
|
|
116
93
|
*/
|
|
117
94
|
export declare function setDefaultLogger(logger: Logger): void;
|
|
118
|
-
/**
|
|
119
|
-
* Returns the currently active process-wide logger.
|
|
120
|
-
*
|
|
121
|
-
* @returns {Logger} The active logger instance.
|
|
122
|
-
*/
|
|
95
|
+
/** Return the current process-wide default logger. */
|
|
123
96
|
export declare function getDefaultLogger(): Logger;
|
|
124
97
|
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|