nlcurl 0.7.0 → 0.9.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 +149 -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 +75 -37
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +217 -85
- package/dist/cache/store.js.map +1 -1
- package/dist/cache/types.d.ts +10 -39
- package/dist/cache/types.d.ts.map +1 -1
- 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 +41 -40
- package/dist/cookies/jar.d.ts.map +1 -1
- package/dist/cookies/jar.js +65 -42
- package/dist/cookies/jar.js.map +1 -1
- package/dist/cookies/parser.d.ts +13 -17
- package/dist/cookies/parser.d.ts.map +1 -1
- package/dist/cookies/parser.js +23 -15
- 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 +61 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +159 -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 +31 -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 +33 -113
- package/dist/core/request.d.ts.map +1 -1
- package/dist/core/response.d.ts +49 -66
- package/dist/core/response.d.ts.map +1 -1
- package/dist/core/response.js +45 -59
- package/dist/core/response.js.map +1 -1
- package/dist/core/session.d.ts +66 -78
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +136 -77
- package/dist/core/session.js.map +1 -1
- package/dist/core/validation.d.ts +58 -43
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +141 -56
- package/dist/core/validation.js.map +1 -1
- package/dist/dns/cache.d.ts +65 -0
- package/dist/dns/cache.d.ts.map +1 -0
- package/dist/dns/cache.js +119 -0
- package/dist/dns/cache.js.map +1 -0
- package/dist/dns/codec.d.ts +29 -19
- package/dist/dns/codec.d.ts.map +1 -1
- package/dist/dns/codec.js +73 -39
- package/dist/dns/codec.js.map +1 -1
- package/dist/dns/doh-resolver.d.ts +17 -31
- package/dist/dns/doh-resolver.d.ts.map +1 -1
- package/dist/dns/doh-resolver.js +47 -48
- package/dist/dns/doh-resolver.js.map +1 -1
- 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 +166 -0
- package/dist/dns/dot-resolver.js.map +1 -0
- package/dist/dns/https-rr.d.ts +19 -30
- package/dist/dns/https-rr.d.ts.map +1 -1
- package/dist/dns/https-rr.js +22 -40
- package/dist/dns/https-rr.js.map +1 -1
- package/dist/dns/types.d.ts +31 -59
- package/dist/dns/types.d.ts.map +1 -1
- package/dist/dns/types.js +3 -14
- package/dist/dns/types.js.map +1 -1
- 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 +81 -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 +19 -21
- package/dist/hsts/store.d.ts.map +1 -1
- package/dist/hsts/store.js +20 -28
- package/dist/hsts/store.js.map +1 -1
- package/dist/hsts/types.d.ts +10 -14
- package/dist/hsts/types.d.ts.map +1 -1
- package/dist/http/alt-svc.d.ts +27 -52
- package/dist/http/alt-svc.d.ts.map +1 -1
- package/dist/http/alt-svc.js +17 -67
- package/dist/http/alt-svc.js.map +1 -1
- 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 +14 -23
- package/dist/http/h1/client.js.map +1 -1
- package/dist/http/h1/encoder.d.ts +21 -17
- package/dist/http/h1/encoder.d.ts.map +1 -1
- package/dist/http/h1/encoder.js +56 -20
- package/dist/http/h1/encoder.js.map +1 -1
- package/dist/http/h1/parser.d.ts +23 -59
- package/dist/http/h1/parser.d.ts.map +1 -1
- package/dist/http/h1/parser.js +61 -55
- package/dist/http/h1/parser.js.map +1 -1
- package/dist/http/h2/client.d.ts +23 -59
- package/dist/http/h2/client.d.ts.map +1 -1
- package/dist/http/h2/client.js +107 -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 +20 -36
- package/dist/http/h2/hpack.d.ts.map +1 -1
- package/dist/http/h2/hpack.js +41 -36
- package/dist/http/h2/hpack.js.map +1 -1
- package/dist/http/negotiator.d.ts +25 -38
- package/dist/http/negotiator.d.ts.map +1 -1
- package/dist/http/negotiator.js +17 -38
- 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 +24 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -3
- package/dist/index.js.map +1 -1
- package/dist/middleware/circuit-breaker.d.ts +44 -0
- package/dist/middleware/circuit-breaker.d.ts.map +1 -0
- package/dist/middleware/circuit-breaker.js +96 -0
- package/dist/middleware/circuit-breaker.js.map +1 -0
- 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 +11 -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 +129 -0
- package/dist/proxy/auth.js.map +1 -0
- package/dist/proxy/env-proxy.d.ts +5 -15
- package/dist/proxy/env-proxy.d.ts.map +1 -1
- package/dist/proxy/env-proxy.js +5 -23
- package/dist/proxy/env-proxy.js.map +1 -1
- package/dist/proxy/http-proxy.d.ts +12 -19
- package/dist/proxy/http-proxy.d.ts.map +1 -1
- package/dist/proxy/http-proxy.js +5 -8
- 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 +8 -10
- package/dist/proxy/socks.js.map +1 -1
- package/dist/sse/parser.d.ts +16 -37
- package/dist/sse/parser.d.ts.map +1 -1
- package/dist/sse/parser.js +31 -28
- package/dist/sse/parser.js.map +1 -1
- package/dist/tls/constants.d.ts +21 -72
- package/dist/tls/constants.d.ts.map +1 -1
- package/dist/tls/constants.js +21 -72
- 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 +68 -85
- package/dist/tls/ech.d.ts.map +1 -1
- package/dist/tls/ech.js +54 -102
- package/dist/tls/ech.js.map +1 -1
- 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 +10 -17
- package/dist/tls/node-engine.d.ts.map +1 -1
- package/dist/tls/node-engine.js +41 -18
- 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 +5 -4
- package/dist/tls/pin-verification.d.ts.map +1 -1
- package/dist/tls/pin-verification.js +5 -11
- package/dist/tls/pin-verification.js.map +1 -1
- package/dist/tls/session-cache.d.ts +27 -39
- package/dist/tls/session-cache.d.ts.map +1 -1
- package/dist/tls/session-cache.js +20 -24
- package/dist/tls/session-cache.js.map +1 -1
- package/dist/tls/stealth/client-hello.d.ts +26 -45
- package/dist/tls/stealth/client-hello.d.ts.map +1 -1
- package/dist/tls/stealth/client-hello.js +15 -31
- package/dist/tls/stealth/client-hello.js.map +1 -1
- package/dist/tls/stealth/engine.d.ts +10 -15
- package/dist/tls/stealth/engine.d.ts.map +1 -1
- package/dist/tls/stealth/engine.js +98 -18
- package/dist/tls/stealth/engine.js.map +1 -1
- package/dist/tls/stealth/handshake.d.ts +32 -31
- package/dist/tls/stealth/handshake.d.ts.map +1 -1
- package/dist/tls/stealth/handshake.js +74 -47
- package/dist/tls/stealth/handshake.js.map +1 -1
- package/dist/tls/stealth/key-schedule.d.ts +81 -86
- package/dist/tls/stealth/key-schedule.d.ts.map +1 -1
- package/dist/tls/stealth/key-schedule.js +70 -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 +16 -0
- package/dist/tls/stealth/tls12-handshake.d.ts.map +1 -1
- package/dist/tls/stealth/tls12-handshake.js +10 -2
- package/dist/tls/stealth/tls12-handshake.js.map +1 -1
- package/dist/tls/types.d.ts +46 -60
- 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 -30
- package/dist/utils/encoding.d.ts.map +1 -1
- package/dist/utils/encoding.js +15 -46
- package/dist/utils/encoding.js.map +1 -1
- package/dist/utils/happy-eyeballs.d.ts +18 -8
- package/dist/utils/happy-eyeballs.d.ts.map +1 -1
- package/dist/utils/happy-eyeballs.js +19 -27
- 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 -53
- package/dist/ws/client.d.ts.map +1 -1
- package/dist/ws/client.js +96 -38
- package/dist/ws/client.js.map +1 -1
- package/dist/ws/frame.d.ts +24 -41
- package/dist/ws/frame.d.ts.map +1 -1
- package/dist/ws/frame.js +26 -33
- package/dist/ws/frame.js.map +1 -1
- package/dist/ws/permessage-deflate.d.ts +23 -28
- package/dist/ws/permessage-deflate.d.ts.map +1 -1
- package/dist/ws/permessage-deflate.js +18 -26
- package/dist/ws/permessage-deflate.js.map +1 -1
- package/package.json +2 -2
- package/dist/http/h3/detection.d.ts +0 -17
- package/dist/http/h3/detection.d.ts.map +0 -1
- package/dist/http/h3/detection.js +0 -59
- package/dist/http/h3/detection.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"AA0DA;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA2B3H;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIrD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIrE;AAMD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAI3F;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAI3F;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAI3F;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAKhG;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzG;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,cAA+B,GAAG,IAAI,CAc5F;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoBtD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAuBpE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CA0B3E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAezE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAM7E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtD"}
|
package/dist/core/validation.js
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* @module validation
|
|
3
|
-
* @description Provides reusable runtime validation helpers for all public API
|
|
4
|
-
* entry points. Functions throw {@link NLcURLError} with code `ERR_VALIDATION`
|
|
5
|
-
* when an input fails a check. These guards protect every trust boundary
|
|
6
|
-
* between caller-supplied data and internal library logic.
|
|
7
|
-
*/
|
|
1
|
+
import * as net from "node:net";
|
|
8
2
|
import { NLcURLError } from "./errors.js";
|
|
9
3
|
const VALID_METHODS = new Set(["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]);
|
|
10
4
|
const VALID_HTTP_VERSIONS = new Set(["1.1", "2", "3"]);
|
|
@@ -12,9 +6,103 @@ const VALID_DNS_FAMILIES = new Set([4, 6]);
|
|
|
12
6
|
const VALID_BACKOFF = new Set(["linear", "exponential"]);
|
|
13
7
|
const HEADER_NAME_RE = /^[!#$%&'*+\-.0-9A-Za-z^_`|~]+$/;
|
|
14
8
|
const HEADER_VALUE_FORBIDDEN_RE = /[\x00-\x08\x0a-\x1f\x7f]/;
|
|
9
|
+
/** Maximum URL length to prevent resource exhaustion. */
|
|
10
|
+
const MAX_URL_LENGTH = 65535;
|
|
11
|
+
/**
|
|
12
|
+
* WHATWG fetch standard dangerous port blocklist.
|
|
13
|
+
* https://fetch.spec.whatwg.org/#bad-port
|
|
14
|
+
*/
|
|
15
|
+
const DANGEROUS_PORTS = new Set([1, 7, 9, 11, 13, 15, 17, 19, 20, 21, 22, 23, 25, 37, 42, 43, 53, 77, 79, 87, 95, 101, 102, 103, 104, 109, 110, 111, 113, 115, 117, 119, 123, 135, 139, 143, 161, 179, 389, 427, 465, 512, 513, 514, 515, 526, 530, 531, 532, 540, 548, 554, 556, 563, 587, 601, 636, 993, 995, 1719, 1720, 1723, 2049, 3659, 4045, 4190, 5060, 5061, 6000, 6566, 6665, 6666, 6667, 6668, 6669, 6697, 10080]);
|
|
16
|
+
/**
|
|
17
|
+
* Check if an IP address (v4 or v6) is in a private/reserved range.
|
|
18
|
+
* This covers RFC 1918, RFC 4193, loopback, link-local, broadcast, etc.
|
|
19
|
+
*/
|
|
20
|
+
function isPrivateIP(ip) {
|
|
21
|
+
if (net.isIPv4(ip)) {
|
|
22
|
+
const parts = ip.split(".").map(Number);
|
|
23
|
+
const [a, b] = parts;
|
|
24
|
+
if (a === 10)
|
|
25
|
+
return true;
|
|
26
|
+
if (a === 172 && b >= 16 && b <= 31)
|
|
27
|
+
return true;
|
|
28
|
+
if (a === 192 && b === 168)
|
|
29
|
+
return true;
|
|
30
|
+
if (a === 127)
|
|
31
|
+
return true;
|
|
32
|
+
if (a === 0)
|
|
33
|
+
return true;
|
|
34
|
+
if (a === 169 && b === 254)
|
|
35
|
+
return true;
|
|
36
|
+
if (a === 100 && b >= 64 && b <= 127)
|
|
37
|
+
return true;
|
|
38
|
+
if (a === 192 && b === 0 && parts[2] === 0)
|
|
39
|
+
return true;
|
|
40
|
+
if (a === 198 && (b === 18 || b === 19))
|
|
41
|
+
return true;
|
|
42
|
+
if (a >= 224)
|
|
43
|
+
return true;
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
if (net.isIPv6(ip)) {
|
|
47
|
+
const normalized = ip.toLowerCase();
|
|
48
|
+
if (normalized === "::1")
|
|
49
|
+
return true;
|
|
50
|
+
if (normalized === "::")
|
|
51
|
+
return true;
|
|
52
|
+
if (normalized.startsWith("fe80:"))
|
|
53
|
+
return true;
|
|
54
|
+
if (normalized.startsWith("fc") || normalized.startsWith("fd"))
|
|
55
|
+
return true;
|
|
56
|
+
if (normalized.startsWith("::ffff:")) {
|
|
57
|
+
const inner = normalized.slice(7);
|
|
58
|
+
if (net.isIPv4(inner))
|
|
59
|
+
return isPrivateIP(inner);
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Validates a URL for SSRF safety: checks port blocklist, private IP ranges,
|
|
67
|
+
* and URL length. Call this before making outbound requests.
|
|
68
|
+
*
|
|
69
|
+
* @param {string} url - The URL to validate.
|
|
70
|
+
* @param {object} [options] - Validation options.
|
|
71
|
+
* @param {boolean} [options.allowPrivateIPs] - Skip private IP checks (default: false).
|
|
72
|
+
* @param {boolean} [options.allowDangerousPorts] - Skip port blocklist (default: false).
|
|
73
|
+
* @throws {NLcURLError} If the URL targets a dangerous port or private IP.
|
|
74
|
+
*/
|
|
75
|
+
export function validateUrlSafety(url, options) {
|
|
76
|
+
if (url.length > MAX_URL_LENGTH) {
|
|
77
|
+
fail(`URL exceeds maximum length of ${MAX_URL_LENGTH} characters`);
|
|
78
|
+
}
|
|
79
|
+
let parsed;
|
|
80
|
+
try {
|
|
81
|
+
parsed = new URL(url);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
fail(`Invalid URL: ${url.substring(0, 100)}`);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (!options?.allowDangerousPorts && parsed.port) {
|
|
88
|
+
const port = parseInt(parsed.port, 10);
|
|
89
|
+
if (DANGEROUS_PORTS.has(port)) {
|
|
90
|
+
fail(`Request to dangerous port ${port} is blocked`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (!options?.allowPrivateIPs) {
|
|
94
|
+
const hostname = parsed.hostname;
|
|
95
|
+
const bare = hostname.startsWith("[") && hostname.endsWith("]") ? hostname.slice(1, -1) : hostname;
|
|
96
|
+
if (net.isIP(bare) && isPrivateIP(bare)) {
|
|
97
|
+
fail(`Request to private/reserved IP address ${bare} is blocked`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
15
101
|
/**
|
|
16
|
-
* Validates a
|
|
17
|
-
*
|
|
102
|
+
* Validates that a header name conforms to RFC 7230 token syntax.
|
|
103
|
+
*
|
|
104
|
+
* @param {string} name - The header name to validate.
|
|
105
|
+
* @throws {NLcURLError} If the name contains invalid characters.
|
|
18
106
|
*/
|
|
19
107
|
export function validateHeaderName(name) {
|
|
20
108
|
if (!name || !HEADER_NAME_RE.test(name)) {
|
|
@@ -22,29 +110,25 @@ export function validateHeaderName(name) {
|
|
|
22
110
|
}
|
|
23
111
|
}
|
|
24
112
|
/**
|
|
25
|
-
* Validates a
|
|
26
|
-
*
|
|
27
|
-
*
|
|
113
|
+
* Validates that a header value does not contain forbidden control characters.
|
|
114
|
+
*
|
|
115
|
+
* @param {string} name - The header name (used in the error message).
|
|
116
|
+
* @param {string} value - The header value to validate.
|
|
117
|
+
* @throws {NLcURLError} If the value contains CR, LF, NUL, or other forbidden characters.
|
|
28
118
|
*/
|
|
29
119
|
export function validateHeaderValue(name, value) {
|
|
30
120
|
if (HEADER_VALUE_FORBIDDEN_RE.test(value)) {
|
|
31
121
|
fail(`HTTP header "${name}" contains forbidden control characters`);
|
|
32
122
|
}
|
|
33
123
|
}
|
|
34
|
-
/**
|
|
35
|
-
* Throws an `ERR_VALIDATION` error with the supplied message.
|
|
36
|
-
*
|
|
37
|
-
* @param {string} message - Description of the validation failure.
|
|
38
|
-
* @throws {NLcURLError} Always.
|
|
39
|
-
*/
|
|
40
124
|
function fail(message) {
|
|
41
125
|
throw new NLcURLError(message, "ERR_VALIDATION");
|
|
42
126
|
}
|
|
43
127
|
/**
|
|
44
|
-
* Asserts that
|
|
128
|
+
* Asserts that the value is a non-empty string.
|
|
45
129
|
*
|
|
46
130
|
* @param {unknown} value - The value to check.
|
|
47
|
-
* @param {string}
|
|
131
|
+
* @param {string} label - A human-readable label for error messages.
|
|
48
132
|
* @throws {NLcURLError} If the value is not a non-empty string.
|
|
49
133
|
*/
|
|
50
134
|
export function assertNonEmptyString(value, label) {
|
|
@@ -53,10 +137,10 @@ export function assertNonEmptyString(value, label) {
|
|
|
53
137
|
}
|
|
54
138
|
}
|
|
55
139
|
/**
|
|
56
|
-
* Asserts that
|
|
140
|
+
* Asserts that the value is a positive finite number.
|
|
57
141
|
*
|
|
58
142
|
* @param {unknown} value - The value to check.
|
|
59
|
-
* @param {string}
|
|
143
|
+
* @param {string} label - A human-readable label for error messages.
|
|
60
144
|
* @throws {NLcURLError} If the value is not a positive finite number.
|
|
61
145
|
*/
|
|
62
146
|
export function assertPositiveNumber(value, label) {
|
|
@@ -65,10 +149,10 @@ export function assertPositiveNumber(value, label) {
|
|
|
65
149
|
}
|
|
66
150
|
}
|
|
67
151
|
/**
|
|
68
|
-
* Asserts that
|
|
152
|
+
* Asserts that the value is a non-negative integer.
|
|
69
153
|
*
|
|
70
154
|
* @param {unknown} value - The value to check.
|
|
71
|
-
* @param {string}
|
|
155
|
+
* @param {string} label - A human-readable label for error messages.
|
|
72
156
|
* @throws {NLcURLError} If the value is not a non-negative integer.
|
|
73
157
|
*/
|
|
74
158
|
export function assertNonNegativeInt(value, label) {
|
|
@@ -77,11 +161,12 @@ export function assertNonNegativeInt(value, label) {
|
|
|
77
161
|
}
|
|
78
162
|
}
|
|
79
163
|
/**
|
|
80
|
-
* Asserts that
|
|
164
|
+
* Asserts that the value belongs to a predefined set of allowed values.
|
|
81
165
|
*
|
|
82
|
-
* @
|
|
83
|
-
* @param {
|
|
84
|
-
* @param {
|
|
166
|
+
* @template T
|
|
167
|
+
* @param {unknown} value - The value to check.
|
|
168
|
+
* @param {Set<T>} allowed - The set of allowed values.
|
|
169
|
+
* @param {string} label - A human-readable label for error messages.
|
|
85
170
|
* @throws {NLcURLError} If the value is not in the allowed set.
|
|
86
171
|
*/
|
|
87
172
|
export function assertEnum(value, allowed, label) {
|
|
@@ -91,24 +176,27 @@ export function assertEnum(value, allowed, label) {
|
|
|
91
176
|
}
|
|
92
177
|
}
|
|
93
178
|
/**
|
|
94
|
-
* Asserts that
|
|
95
|
-
* class instance other than `Object`).
|
|
179
|
+
* Asserts that the value is a plain object (not null, not an array).
|
|
96
180
|
*
|
|
97
181
|
* @param {unknown} value - The value to check.
|
|
98
|
-
* @param {string}
|
|
182
|
+
* @param {string} label - A human-readable label for error messages.
|
|
99
183
|
* @throws {NLcURLError} If the value is not a plain object.
|
|
100
184
|
*/
|
|
101
185
|
export function assertPlainObject(value, label) {
|
|
102
186
|
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
103
187
|
fail(`${label} must be a plain object`);
|
|
104
188
|
}
|
|
189
|
+
const obj = value;
|
|
190
|
+
if (Object.hasOwn(obj, "__proto__") || Object.hasOwn(obj, "constructor") || Object.hasOwn(obj, "prototype")) {
|
|
191
|
+
fail(`${label} contains forbidden prototype pollution keys`);
|
|
192
|
+
}
|
|
105
193
|
}
|
|
106
194
|
/**
|
|
107
|
-
* Validates
|
|
195
|
+
* Validates that a URL string is well-formed and uses one of the allowed schemes.
|
|
108
196
|
*
|
|
109
|
-
* @param {string}
|
|
110
|
-
* @param {Set<string>} [allowedSchemes] - Permitted
|
|
111
|
-
* @throws {NLcURLError} If the URL is invalid or uses
|
|
197
|
+
* @param {string} url - The URL to validate.
|
|
198
|
+
* @param {Set<string>} [allowedSchemes] - Permitted URL schemes. Defaults to `http:` and `https:`.
|
|
199
|
+
* @throws {NLcURLError} If the URL is invalid or uses a disallowed scheme.
|
|
112
200
|
*/
|
|
113
201
|
export function validateUrl(url, allowedSchemes = new Set(["http:", "https:"])) {
|
|
114
202
|
if (typeof url !== "string" || url.length === 0) {
|
|
@@ -127,11 +215,10 @@ export function validateUrl(url, allowedSchemes = new Set(["http:", "https:"]))
|
|
|
127
215
|
}
|
|
128
216
|
}
|
|
129
217
|
/**
|
|
130
|
-
* Validates
|
|
131
|
-
* finite number when present.
|
|
218
|
+
* Validates a timeout value, accepting either a positive number or a TimeoutConfig object.
|
|
132
219
|
*
|
|
133
|
-
* @param {unknown} timeout -
|
|
134
|
-
* @throws {NLcURLError} If
|
|
220
|
+
* @param {unknown} timeout - The timeout value to validate.
|
|
221
|
+
* @throws {NLcURLError} If the timeout is not a valid number or TimeoutConfig.
|
|
135
222
|
*/
|
|
136
223
|
export function validateTimeout(timeout) {
|
|
137
224
|
if (timeout === undefined || timeout === null)
|
|
@@ -156,11 +243,10 @@ export function validateTimeout(timeout) {
|
|
|
156
243
|
fail("timeout must be a number or a TimeoutConfig object");
|
|
157
244
|
}
|
|
158
245
|
/**
|
|
159
|
-
* Validates all
|
|
160
|
-
* Called at the entry of every public request function before any processing.
|
|
246
|
+
* Validates all fields of a request descriptor.
|
|
161
247
|
*
|
|
162
|
-
* @param {Record<string, unknown>} input - The
|
|
163
|
-
* @throws {NLcURLError} If any field
|
|
248
|
+
* @param {Record<string, unknown>} input - The request fields to validate.
|
|
249
|
+
* @throws {NLcURLError} If any field value is invalid.
|
|
164
250
|
*/
|
|
165
251
|
export function validateRequest(input) {
|
|
166
252
|
if (input["method"] !== undefined) {
|
|
@@ -187,11 +273,10 @@ export function validateRequest(input) {
|
|
|
187
273
|
}
|
|
188
274
|
}
|
|
189
275
|
/**
|
|
190
|
-
* Validates
|
|
191
|
-
* {@link NLcURLSession} constructor.
|
|
276
|
+
* Validates all fields of a session configuration object.
|
|
192
277
|
*
|
|
193
|
-
* @param {Record<string, unknown>} config - The
|
|
194
|
-
* @throws {NLcURLError} If any field
|
|
278
|
+
* @param {Record<string, unknown>} config - The session config fields to validate.
|
|
279
|
+
* @throws {NLcURLError} If any field value is invalid.
|
|
195
280
|
*/
|
|
196
281
|
export function validateSessionConfig(config) {
|
|
197
282
|
if (config["baseURL"] !== undefined && config["baseURL"] !== null) {
|
|
@@ -221,10 +306,10 @@ export function validateSessionConfig(config) {
|
|
|
221
306
|
}
|
|
222
307
|
}
|
|
223
308
|
/**
|
|
224
|
-
* Validates
|
|
309
|
+
* Validates retry configuration fields.
|
|
225
310
|
*
|
|
226
|
-
* @param {Record<string, unknown>} config - The
|
|
227
|
-
* @throws {NLcURLError} If any
|
|
311
|
+
* @param {Record<string, unknown>} config - The retry config fields to validate.
|
|
312
|
+
* @throws {NLcURLError} If any field value is invalid.
|
|
228
313
|
*/
|
|
229
314
|
export function validateRetryConfig(config) {
|
|
230
315
|
if (config["count"] !== undefined) {
|
|
@@ -243,10 +328,10 @@ export function validateRetryConfig(config) {
|
|
|
243
328
|
}
|
|
244
329
|
}
|
|
245
330
|
/**
|
|
246
|
-
* Validates rate limit configuration.
|
|
331
|
+
* Validates rate limit configuration fields.
|
|
247
332
|
*
|
|
248
|
-
* @param {Record<string, unknown>} config - The
|
|
249
|
-
* @throws {NLcURLError} If
|
|
333
|
+
* @param {Record<string, unknown>} config - The rate limit config fields to validate.
|
|
334
|
+
* @throws {NLcURLError} If maxRequests or windowMs is invalid.
|
|
250
335
|
*/
|
|
251
336
|
export function validateRateLimitConfig(config) {
|
|
252
337
|
assertPositiveNumber(config["maxRequests"], "maxRequests");
|
|
@@ -256,10 +341,10 @@ export function validateRateLimitConfig(config) {
|
|
|
256
341
|
}
|
|
257
342
|
}
|
|
258
343
|
/**
|
|
259
|
-
* Validates a
|
|
344
|
+
* Validates that a URL uses the `ws:` or `wss:` scheme for WebSocket connections.
|
|
260
345
|
*
|
|
261
|
-
* @param {string} url - The
|
|
262
|
-
* @throws {NLcURLError} If the URL is invalid or uses a non-WebSocket
|
|
346
|
+
* @param {string} url - The URL to validate.
|
|
347
|
+
* @throws {NLcURLError} If the URL is invalid or uses a non-WebSocket scheme.
|
|
263
348
|
*/
|
|
264
349
|
export function validateWebSocketUrl(url) {
|
|
265
350
|
validateUrl(url, new Set(["ws:", "wss:"]));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { DNSRecord } from "./types.js";
|
|
2
|
+
/** Stored DNS cache entry with TTL and access tracking. */
|
|
3
|
+
export interface DNSCacheEntry {
|
|
4
|
+
/** Cached DNS records. */
|
|
5
|
+
records: DNSRecord[];
|
|
6
|
+
/** Timestamp when the entry was stored. */
|
|
7
|
+
storedAt: number;
|
|
8
|
+
/** Effective time-to-live in seconds. */
|
|
9
|
+
ttl: number;
|
|
10
|
+
/** Monotonic counter value of the last access (for LRU eviction). */
|
|
11
|
+
lastAccessedAt: number;
|
|
12
|
+
/** Pinned IP addresses from the first resolution (for rebinding protection). */
|
|
13
|
+
pinnedAddresses?: Set<string>;
|
|
14
|
+
}
|
|
15
|
+
/** Configuration options for {@link DNSCache}. */
|
|
16
|
+
export interface DNSCacheConfig {
|
|
17
|
+
/** Maximum number of entries before LRU eviction. */
|
|
18
|
+
maxEntries?: number;
|
|
19
|
+
/** Minimum TTL in seconds applied to any cached record. */
|
|
20
|
+
minTTL?: number;
|
|
21
|
+
/** Maximum TTL in seconds applied to any cached record. */
|
|
22
|
+
maxTTL?: number;
|
|
23
|
+
/** Enable DNS rebinding protection by pinning IPs on first resolution. */
|
|
24
|
+
pinning?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/** LRU cache for DNS records with configurable TTL bounds and optional rebinding protection. */
|
|
27
|
+
export declare class DNSCache {
|
|
28
|
+
private readonly entries;
|
|
29
|
+
private readonly maxEntries;
|
|
30
|
+
private readonly minTTL;
|
|
31
|
+
private readonly maxTTL;
|
|
32
|
+
private readonly pinning;
|
|
33
|
+
private accessCounter;
|
|
34
|
+
/**
|
|
35
|
+
* Create a new DNS cache.
|
|
36
|
+
*
|
|
37
|
+
* @param {DNSCacheConfig} [config] - Cache configuration options.
|
|
38
|
+
*/
|
|
39
|
+
constructor(config?: DNSCacheConfig);
|
|
40
|
+
private cacheKey;
|
|
41
|
+
/**
|
|
42
|
+
* Retrieve cached records for a name and type.
|
|
43
|
+
*
|
|
44
|
+
* @param {string} name - Domain name to look up.
|
|
45
|
+
* @param {string} type - Record type string.
|
|
46
|
+
* @returns {DNSRecord[]|undefined} Cached records, or `undefined` if absent or expired.
|
|
47
|
+
*/
|
|
48
|
+
get(name: string, type: string): DNSRecord[] | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* Store DNS records in the cache, with optional IP pinning for rebinding protection.
|
|
51
|
+
*
|
|
52
|
+
* @param {string} name - Domain name.
|
|
53
|
+
* @param {string} type - Record type string.
|
|
54
|
+
* @param {DNSRecord[]} records - DNS records to cache.
|
|
55
|
+
* @throws {Error} If pinning is enabled and new addresses don't match pinned set.
|
|
56
|
+
*/
|
|
57
|
+
set(name: string, type: string, records: DNSRecord[]): void;
|
|
58
|
+
private computeTTL;
|
|
59
|
+
private evictLRU;
|
|
60
|
+
/** Remove all entries from the cache. */
|
|
61
|
+
clear(): void;
|
|
62
|
+
/** Number of entries currently in the cache. */
|
|
63
|
+
get size(): number;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/dns/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,cAAc,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAMD,kDAAkD;AAClD,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,gGAAgG;AAChG,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,aAAa,CAAK;IAE1B;;;;OAIG;gBACS,MAAM,CAAC,EAAE,cAAc;IAOnC,OAAO,CAAC,QAAQ;IAIhB;;;;;;OAMG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,SAAS;IAexD;;;;;;;OAOG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IAqC3D,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,QAAQ;IAchB,yCAAyC;IACzC,KAAK,IAAI,IAAI;IAIb,gDAAgD;IAChD,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
const DEFAULT_MAX_ENTRIES = 500;
|
|
2
|
+
const DEFAULT_MIN_TTL = 30;
|
|
3
|
+
const DEFAULT_MAX_TTL = 86400;
|
|
4
|
+
/** LRU cache for DNS records with configurable TTL bounds and optional rebinding protection. */
|
|
5
|
+
export class DNSCache {
|
|
6
|
+
entries = new Map();
|
|
7
|
+
maxEntries;
|
|
8
|
+
minTTL;
|
|
9
|
+
maxTTL;
|
|
10
|
+
pinning;
|
|
11
|
+
accessCounter = 0;
|
|
12
|
+
/**
|
|
13
|
+
* Create a new DNS cache.
|
|
14
|
+
*
|
|
15
|
+
* @param {DNSCacheConfig} [config] - Cache configuration options.
|
|
16
|
+
*/
|
|
17
|
+
constructor(config) {
|
|
18
|
+
this.maxEntries = config?.maxEntries ?? DEFAULT_MAX_ENTRIES;
|
|
19
|
+
this.minTTL = config?.minTTL ?? DEFAULT_MIN_TTL;
|
|
20
|
+
this.maxTTL = config?.maxTTL ?? DEFAULT_MAX_TTL;
|
|
21
|
+
this.pinning = config?.pinning ?? true;
|
|
22
|
+
}
|
|
23
|
+
cacheKey(name, type) {
|
|
24
|
+
return `${type}:${name.toLowerCase()}`;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Retrieve cached records for a name and type.
|
|
28
|
+
*
|
|
29
|
+
* @param {string} name - Domain name to look up.
|
|
30
|
+
* @param {string} type - Record type string.
|
|
31
|
+
* @returns {DNSRecord[]|undefined} Cached records, or `undefined` if absent or expired.
|
|
32
|
+
*/
|
|
33
|
+
get(name, type) {
|
|
34
|
+
const key = this.cacheKey(name, type);
|
|
35
|
+
const entry = this.entries.get(key);
|
|
36
|
+
if (!entry)
|
|
37
|
+
return undefined;
|
|
38
|
+
const age = (Date.now() - entry.storedAt) / 1000;
|
|
39
|
+
if (age >= entry.ttl) {
|
|
40
|
+
this.entries.delete(key);
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
entry.lastAccessedAt = ++this.accessCounter;
|
|
44
|
+
return entry.records;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Store DNS records in the cache, with optional IP pinning for rebinding protection.
|
|
48
|
+
*
|
|
49
|
+
* @param {string} name - Domain name.
|
|
50
|
+
* @param {string} type - Record type string.
|
|
51
|
+
* @param {DNSRecord[]} records - DNS records to cache.
|
|
52
|
+
* @throws {Error} If pinning is enabled and new addresses don't match pinned set.
|
|
53
|
+
*/
|
|
54
|
+
set(name, type, records) {
|
|
55
|
+
if (records.length === 0)
|
|
56
|
+
return;
|
|
57
|
+
const ttl = this.computeTTL(records);
|
|
58
|
+
const key = this.cacheKey(name, type);
|
|
59
|
+
const existing = this.entries.get(key);
|
|
60
|
+
let pinnedAddresses;
|
|
61
|
+
if (this.pinning && (type === "A" || type === "AAAA")) {
|
|
62
|
+
const newAddresses = new Set(records.map((r) => String(r.data)));
|
|
63
|
+
if (existing?.pinnedAddresses) {
|
|
64
|
+
for (const addr of newAddresses) {
|
|
65
|
+
if (!existing.pinnedAddresses.has(addr)) {
|
|
66
|
+
throw new Error(`DNS rebinding detected for ${name}: address ${addr} not in pinned set`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
pinnedAddresses = existing.pinnedAddresses;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
pinnedAddresses = newAddresses;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (this.entries.size >= this.maxEntries && !this.entries.has(key)) {
|
|
76
|
+
this.evictLRU();
|
|
77
|
+
}
|
|
78
|
+
this.entries.set(key, {
|
|
79
|
+
records,
|
|
80
|
+
storedAt: Date.now(),
|
|
81
|
+
ttl,
|
|
82
|
+
lastAccessedAt: ++this.accessCounter,
|
|
83
|
+
pinnedAddresses,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
computeTTL(records) {
|
|
87
|
+
let minRecordTTL = Infinity;
|
|
88
|
+
for (const record of records) {
|
|
89
|
+
if (record.ttl < minRecordTTL) {
|
|
90
|
+
minRecordTTL = record.ttl;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (minRecordTTL === Infinity)
|
|
94
|
+
minRecordTTL = this.minTTL;
|
|
95
|
+
return Math.max(this.minTTL, Math.min(this.maxTTL, minRecordTTL));
|
|
96
|
+
}
|
|
97
|
+
evictLRU() {
|
|
98
|
+
let oldestKey;
|
|
99
|
+
let oldestAccess = Infinity;
|
|
100
|
+
for (const [key, entry] of this.entries) {
|
|
101
|
+
if (entry.lastAccessedAt < oldestAccess) {
|
|
102
|
+
oldestAccess = entry.lastAccessedAt;
|
|
103
|
+
oldestKey = key;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (oldestKey) {
|
|
107
|
+
this.entries.delete(oldestKey);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/** Remove all entries from the cache. */
|
|
111
|
+
clear() {
|
|
112
|
+
this.entries.clear();
|
|
113
|
+
}
|
|
114
|
+
/** Number of entries currently in the cache. */
|
|
115
|
+
get size() {
|
|
116
|
+
return this.entries.size;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/dns/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/dns/codec.d.ts
CHANGED
|
@@ -1,37 +1,47 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Minimal DNS wire-format encoder/decoder for DNS-over-HTTPS (RFC 8484)
|
|
3
|
-
* and HTTPS/SVCB record parsing (RFC 9460).
|
|
4
|
-
*
|
|
5
|
-
* Supports building A/AAAA/HTTPS queries and parsing response packets
|
|
6
|
-
* including SvcParam extraction. Uses only Node.js built-in `Buffer`.
|
|
7
|
-
*/
|
|
8
1
|
import { type DNSRecord, type SVCBRecord } from "./types.js";
|
|
9
2
|
/**
|
|
10
|
-
*
|
|
3
|
+
* Build a raw DNS query packet.
|
|
11
4
|
*
|
|
12
|
-
* @param name
|
|
13
|
-
* @param
|
|
14
|
-
* @param id
|
|
15
|
-
* @
|
|
5
|
+
* @param {string} name - Domain name to query.
|
|
6
|
+
* @param {number} type - Numeric record type.
|
|
7
|
+
* @param {number} [id] - Query identifier (defaults to 0).
|
|
8
|
+
* @param {object} [edns] - EDNS(0) options (RFC 6891).
|
|
9
|
+
* @param {number} [edns.udpPayloadSize] - Max UDP payload size (default 4096).
|
|
10
|
+
* @param {boolean} [edns.dnssecOk] - Set the DO (DNSSEC OK) bit.
|
|
11
|
+
* @param {boolean} [edns.padding] - Add padding option (RFC 7830) to pad to 128-byte blocks.
|
|
12
|
+
* @returns {Buffer} Wire-format DNS query buffer.
|
|
16
13
|
*/
|
|
17
|
-
export declare function buildDNSQuery(name: string, type: number, id?: number
|
|
14
|
+
export declare function buildDNSQuery(name: string, type: number, id?: number, edns?: {
|
|
15
|
+
udpPayloadSize?: number;
|
|
16
|
+
dnssecOk?: boolean;
|
|
17
|
+
padding?: boolean;
|
|
18
|
+
}): Buffer;
|
|
18
19
|
/**
|
|
19
|
-
*
|
|
20
|
+
* Parse a wire-format DNS response packet into records.
|
|
20
21
|
*
|
|
21
|
-
* @param packet Raw DNS response
|
|
22
|
-
* @returns Array of parsed DNS records from the answer section.
|
|
22
|
+
* @param {Buffer} packet - Raw DNS response data.
|
|
23
|
+
* @returns {DNSRecord[]} Array of parsed DNS records from the answer section.
|
|
23
24
|
*/
|
|
24
25
|
export declare function parseDNSResponse(packet: Buffer): DNSRecord[];
|
|
25
26
|
/**
|
|
26
|
-
*
|
|
27
|
+
* Parse a 4-byte buffer into a dotted-decimal IPv4 address string.
|
|
28
|
+
*
|
|
29
|
+
* @param {Buffer} data - Raw A record data.
|
|
30
|
+
* @returns {string} IPv4 address string.
|
|
27
31
|
*/
|
|
28
32
|
export declare function parseARecord(data: Buffer): string;
|
|
29
33
|
/**
|
|
30
|
-
*
|
|
34
|
+
* Parse a 16-byte buffer into a colon-hex IPv6 address string.
|
|
35
|
+
*
|
|
36
|
+
* @param {Buffer} data - Raw AAAA record data.
|
|
37
|
+
* @returns {string} IPv6 address string.
|
|
31
38
|
*/
|
|
32
39
|
export declare function parseAAAARecord(data: Buffer): string;
|
|
33
40
|
/**
|
|
34
|
-
*
|
|
41
|
+
* Parse raw SVCB/HTTPS record data into a structured record.
|
|
42
|
+
*
|
|
43
|
+
* @param {Buffer} data - Raw SVCB record data.
|
|
44
|
+
* @returns {SVCBRecord} Parsed SVCB record with service parameters.
|
|
35
45
|
*/
|
|
36
46
|
export declare function parseSVCBRecord(data: Buffer): SVCBRecord;
|
|
37
47
|
//# sourceMappingURL=codec.d.ts.map
|
package/dist/dns/codec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/dns/codec.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/dns/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAElF;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,MAAU,EAAE,IAAI,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAqE3J;AAcD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CA4C5D;AA8CD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAuDxD"}
|