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
package/dist/dns/codec.js
CHANGED
|
@@ -1,36 +1,76 @@
|
|
|
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 { RCLASS, SvcParamKey } 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 function buildDNSQuery(name, type, id = 0) {
|
|
14
|
+
export function buildDNSQuery(name, type, id = 0, edns) {
|
|
18
15
|
const labels = encodeName(name);
|
|
19
|
-
const
|
|
16
|
+
const queryLen = 12 + labels.length + 4;
|
|
17
|
+
if (!edns) {
|
|
18
|
+
const buf = Buffer.alloc(queryLen);
|
|
19
|
+
buf.writeUInt16BE(id & 0xffff, 0);
|
|
20
|
+
buf.writeUInt16BE(0x0100, 2);
|
|
21
|
+
buf.writeUInt16BE(1, 4);
|
|
22
|
+
buf.writeUInt16BE(0, 6);
|
|
23
|
+
buf.writeUInt16BE(0, 8);
|
|
24
|
+
buf.writeUInt16BE(0, 10);
|
|
25
|
+
labels.copy(buf, 12);
|
|
26
|
+
buf.writeUInt16BE(type, 12 + labels.length);
|
|
27
|
+
buf.writeUInt16BE(RCLASS.IN, 12 + labels.length + 2);
|
|
28
|
+
return buf;
|
|
29
|
+
}
|
|
30
|
+
const udpSize = edns.udpPayloadSize ?? 4096;
|
|
31
|
+
const dnssecOk = edns.dnssecOk ?? false;
|
|
32
|
+
const ednsOptions = [];
|
|
33
|
+
let ednsRdataLen = ednsOptions.reduce((sum, o) => sum + o.length, 0);
|
|
34
|
+
if (edns.padding) {
|
|
35
|
+
const baseLen = queryLen + 1 + 10 + ednsRdataLen;
|
|
36
|
+
const targetBlock = 128;
|
|
37
|
+
const paddingNeeded = (targetBlock - (baseLen % targetBlock)) % targetBlock;
|
|
38
|
+
if (paddingNeeded > 4) {
|
|
39
|
+
const padOption = Buffer.alloc(4 + (paddingNeeded - 4));
|
|
40
|
+
padOption.writeUInt16BE(0x000c, 0);
|
|
41
|
+
padOption.writeUInt16BE(paddingNeeded - 4, 2);
|
|
42
|
+
ednsOptions.push(padOption);
|
|
43
|
+
ednsRdataLen += padOption.length;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const ednsRdata = ednsOptions.length > 0 ? Buffer.concat(ednsOptions) : Buffer.alloc(0);
|
|
47
|
+
const optRecordLen = 1 + 10 + ednsRdata.length;
|
|
48
|
+
const buf = Buffer.alloc(queryLen + optRecordLen);
|
|
20
49
|
buf.writeUInt16BE(id & 0xffff, 0);
|
|
21
50
|
buf.writeUInt16BE(0x0100, 2);
|
|
22
51
|
buf.writeUInt16BE(1, 4);
|
|
23
52
|
buf.writeUInt16BE(0, 6);
|
|
24
53
|
buf.writeUInt16BE(0, 8);
|
|
25
|
-
buf.writeUInt16BE(
|
|
54
|
+
buf.writeUInt16BE(1, 10);
|
|
26
55
|
labels.copy(buf, 12);
|
|
27
56
|
buf.writeUInt16BE(type, 12 + labels.length);
|
|
28
57
|
buf.writeUInt16BE(RCLASS.IN, 12 + labels.length + 2);
|
|
58
|
+
let off = queryLen;
|
|
59
|
+
buf[off++] = 0x00;
|
|
60
|
+
buf.writeUInt16BE(41, off);
|
|
61
|
+
off += 2;
|
|
62
|
+
buf.writeUInt16BE(udpSize, off);
|
|
63
|
+
off += 2;
|
|
64
|
+
const ttlFlags = dnssecOk ? 0x00008000 : 0x00000000;
|
|
65
|
+
buf.writeUInt32BE(ttlFlags, off);
|
|
66
|
+
off += 4;
|
|
67
|
+
buf.writeUInt16BE(ednsRdata.length, off);
|
|
68
|
+
off += 2;
|
|
69
|
+
if (ednsRdata.length > 0) {
|
|
70
|
+
ednsRdata.copy(buf, off);
|
|
71
|
+
}
|
|
29
72
|
return buf;
|
|
30
73
|
}
|
|
31
|
-
/**
|
|
32
|
-
* Encodes a domain name into DNS wire format labels.
|
|
33
|
-
*/
|
|
34
74
|
function encodeName(name) {
|
|
35
75
|
const parts = name.replace(/\.$/, "").split(".");
|
|
36
76
|
const buffers = [];
|
|
@@ -44,10 +84,10 @@ function encodeName(name) {
|
|
|
44
84
|
return Buffer.concat(buffers);
|
|
45
85
|
}
|
|
46
86
|
/**
|
|
47
|
-
*
|
|
87
|
+
* Parse a wire-format DNS response packet into records.
|
|
48
88
|
*
|
|
49
|
-
* @param packet Raw DNS response
|
|
50
|
-
* @returns Array of parsed DNS records from the answer section.
|
|
89
|
+
* @param {Buffer} packet - Raw DNS response data.
|
|
90
|
+
* @returns {DNSRecord[]} Array of parsed DNS records from the answer section.
|
|
51
91
|
*/
|
|
52
92
|
export function parseDNSResponse(packet) {
|
|
53
93
|
if (packet.length < 12)
|
|
@@ -86,9 +126,6 @@ export function parseDNSResponse(packet) {
|
|
|
86
126
|
}
|
|
87
127
|
return records;
|
|
88
128
|
}
|
|
89
|
-
/**
|
|
90
|
-
* Decodes a DNS compressed name from a packet.
|
|
91
|
-
*/
|
|
92
129
|
function decodeName(packet, offset) {
|
|
93
130
|
const labels = [];
|
|
94
131
|
let jumped = false;
|
|
@@ -118,9 +155,6 @@ function decodeName(packet, offset) {
|
|
|
118
155
|
returnOffset = offset + 1;
|
|
119
156
|
return { name: labels.join("."), newOffset: returnOffset };
|
|
120
157
|
}
|
|
121
|
-
/**
|
|
122
|
-
* Skips past a DNS name in a packet (handles compression pointers).
|
|
123
|
-
*/
|
|
124
158
|
function skipName(packet, offset) {
|
|
125
159
|
let depth = 0;
|
|
126
160
|
while (offset < packet.length) {
|
|
@@ -136,7 +170,10 @@ function skipName(packet, offset) {
|
|
|
136
170
|
return offset;
|
|
137
171
|
}
|
|
138
172
|
/**
|
|
139
|
-
*
|
|
173
|
+
* Parse a 4-byte buffer into a dotted-decimal IPv4 address string.
|
|
174
|
+
*
|
|
175
|
+
* @param {Buffer} data - Raw A record data.
|
|
176
|
+
* @returns {string} IPv4 address string.
|
|
140
177
|
*/
|
|
141
178
|
export function parseARecord(data) {
|
|
142
179
|
if (data.length !== 4)
|
|
@@ -144,7 +181,10 @@ export function parseARecord(data) {
|
|
|
144
181
|
return `${data[0]}.${data[1]}.${data[2]}.${data[3]}`;
|
|
145
182
|
}
|
|
146
183
|
/**
|
|
147
|
-
*
|
|
184
|
+
* Parse a 16-byte buffer into a colon-hex IPv6 address string.
|
|
185
|
+
*
|
|
186
|
+
* @param {Buffer} data - Raw AAAA record data.
|
|
187
|
+
* @returns {string} IPv6 address string.
|
|
148
188
|
*/
|
|
149
189
|
export function parseAAAARecord(data) {
|
|
150
190
|
if (data.length !== 16)
|
|
@@ -156,7 +196,10 @@ export function parseAAAARecord(data) {
|
|
|
156
196
|
return groups.join(":");
|
|
157
197
|
}
|
|
158
198
|
/**
|
|
159
|
-
*
|
|
199
|
+
* Parse raw SVCB/HTTPS record data into a structured record.
|
|
200
|
+
*
|
|
201
|
+
* @param {Buffer} data - Raw SVCB record data.
|
|
202
|
+
* @returns {SVCBRecord} Parsed SVCB record with service parameters.
|
|
160
203
|
*/
|
|
161
204
|
export function parseSVCBRecord(data) {
|
|
162
205
|
if (data.length < 3)
|
|
@@ -211,9 +254,6 @@ export function parseSVCBRecord(data) {
|
|
|
211
254
|
}
|
|
212
255
|
return record;
|
|
213
256
|
}
|
|
214
|
-
/**
|
|
215
|
-
* Parses the ALPN SvcParam — length-prefixed protocol identifier list.
|
|
216
|
-
*/
|
|
217
257
|
function parseAlpnParam(data) {
|
|
218
258
|
const protocols = [];
|
|
219
259
|
let offset = 0;
|
|
@@ -227,9 +267,6 @@ function parseAlpnParam(data) {
|
|
|
227
267
|
}
|
|
228
268
|
return protocols;
|
|
229
269
|
}
|
|
230
|
-
/**
|
|
231
|
-
* Parses IPv4 address hints from SvcParam value.
|
|
232
|
-
*/
|
|
233
270
|
function parseIPv4Hints(data) {
|
|
234
271
|
const addresses = [];
|
|
235
272
|
for (let i = 0; i + 4 <= data.length; i += 4) {
|
|
@@ -237,9 +274,6 @@ function parseIPv4Hints(data) {
|
|
|
237
274
|
}
|
|
238
275
|
return addresses;
|
|
239
276
|
}
|
|
240
|
-
/**
|
|
241
|
-
* Parses IPv6 address hints from SvcParam value.
|
|
242
|
-
*/
|
|
243
277
|
function parseIPv6Hints(data) {
|
|
244
278
|
const addresses = [];
|
|
245
279
|
for (let i = 0; i + 16 <= data.length; i += 16) {
|
package/dist/dns/codec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/dns/codec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/dns/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,52 +1,38 @@
|
|
|
1
1
|
import type { DoHConfig, DNSRecord } from "./types.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*
|
|
5
|
-
* Usage:
|
|
6
|
-
* ```typescript
|
|
7
|
-
* const resolver = new DoHResolver({ server: "https://1.1.1.1/dns-query" });
|
|
8
|
-
* const records = await resolver.query("example.com", "A");
|
|
9
|
-
* ```
|
|
10
|
-
*/
|
|
2
|
+
import { DNSCache } from "./cache.js";
|
|
3
|
+
/** DNS-over-HTTPS resolver supporting GET and POST wire-format queries. */
|
|
11
4
|
export declare class DoHResolver {
|
|
12
5
|
private readonly serverUrl;
|
|
13
6
|
private readonly method;
|
|
14
7
|
private readonly timeout;
|
|
15
8
|
private readonly bootstrap;
|
|
9
|
+
private readonly cache;
|
|
16
10
|
private queryId;
|
|
11
|
+
/**
|
|
12
|
+
* Create a new DoH resolver.
|
|
13
|
+
*
|
|
14
|
+
* @param {DoHConfig} config - DoH connection and cache configuration.
|
|
15
|
+
*/
|
|
17
16
|
constructor(config: DoHConfig);
|
|
18
17
|
/**
|
|
19
|
-
*
|
|
18
|
+
* Perform a DNS query over HTTPS.
|
|
20
19
|
*
|
|
21
|
-
* @param name
|
|
22
|
-
* @param
|
|
23
|
-
* @param signal Optional
|
|
24
|
-
* @returns Array of
|
|
20
|
+
* @param {string} name - Domain name to resolve.
|
|
21
|
+
* @param {"A"|"AAAA"|"HTTPS"|"SVCB"} type - Record type to query.
|
|
22
|
+
* @param {AbortSignal} [signal] - Optional abort signal.
|
|
23
|
+
* @returns {Promise<DNSRecord[]>} Array of DNS records from the response.
|
|
25
24
|
*/
|
|
26
25
|
query(name: string, type: "A" | "AAAA" | "HTTPS" | "SVCB", signal?: AbortSignal): Promise<DNSRecord[]>;
|
|
27
26
|
/**
|
|
28
|
-
*
|
|
27
|
+
* Return the underlying DNS cache.
|
|
28
|
+
*
|
|
29
|
+
* @returns {DNSCache} The resolver's DNS cache instance.
|
|
29
30
|
*/
|
|
31
|
+
getCache(): DNSCache;
|
|
30
32
|
private sendQuery;
|
|
31
|
-
/**
|
|
32
|
-
* GET method: base64url-encode the DNS query in the `dns` query parameter.
|
|
33
|
-
*/
|
|
34
33
|
private sendGET;
|
|
35
|
-
/**
|
|
36
|
-
* POST method: send DNS wire-format directly in the request body.
|
|
37
|
-
*/
|
|
38
34
|
private sendPOST;
|
|
39
|
-
/**
|
|
40
|
-
* Make the HTTPS request with timeout and abort support.
|
|
41
|
-
*/
|
|
42
35
|
private httpRequest;
|
|
43
|
-
/**
|
|
44
|
-
* Resolves the DoH server hostname to an IP address (bootstrap).
|
|
45
|
-
* Uses the system DNS resolver for this bootstrap step to avoid
|
|
46
|
-
* a circular dependency (we can't use DoH to resolve the DoH server).
|
|
47
|
-
*
|
|
48
|
-
* If the server URL already uses an IP address, returns it directly.
|
|
49
|
-
*/
|
|
50
36
|
private resolveServerHost;
|
|
51
37
|
}
|
|
52
38
|
//# sourceMappingURL=doh-resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doh-resolver.d.ts","sourceRoot":"","sources":["../../src/dns/doh-resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doh-resolver.d.ts","sourceRoot":"","sources":["../../src/dns/doh-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAStC,2EAA2E;AAC3E,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAM;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,OAAO,CAAK;IAEpB;;;;OAIG;gBACS,MAAM,EAAE,SAAS;IAQ7B;;;;;;;OAOG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAgB5G;;;;OAIG;IACH,QAAQ,IAAI,QAAQ;YAIN,SAAS;IASvB,OAAO,CAAC,OAAO;IAqBf,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,WAAW;YAmFL,iBAAiB;CA8BhC"}
|
package/dist/dns/doh-resolver.js
CHANGED
|
@@ -1,60 +1,62 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DNS-over-HTTPS (DoH) resolver implementing RFC 8484.
|
|
3
|
-
*
|
|
4
|
-
* Sends DNS queries over HTTPS to a configured DoH server, providing
|
|
5
|
-
* encrypted DNS resolution for privacy. Supports both GET (wire-format
|
|
6
|
-
* in query parameter) and POST (wire-format in body) methods.
|
|
7
|
-
*
|
|
8
|
-
* @see https://datatracker.ietf.org/doc/html/rfc8484
|
|
9
|
-
*/
|
|
10
1
|
import * as https from "node:https";
|
|
11
2
|
import * as http from "node:http";
|
|
12
3
|
import { lookup } from "node:dns/promises";
|
|
13
4
|
import { buildDNSQuery, parseDNSResponse } from "./codec.js";
|
|
14
5
|
import { RTYPE } from "./types.js";
|
|
6
|
+
import { DNSCache } from "./cache.js";
|
|
15
7
|
const DOH_CONTENT_TYPE = "application/dns-message";
|
|
16
8
|
const DEFAULT_TIMEOUT = 5000;
|
|
17
|
-
|
|
9
|
+
const BOOTSTRAP_CACHE_MAX = 50;
|
|
10
|
+
const BOOTSTRAP_CACHE_TTL = 300_000;
|
|
18
11
|
const bootstrapCache = new Map();
|
|
19
|
-
/**
|
|
20
|
-
* DNS-over-HTTPS resolver for encrypted DNS resolution.
|
|
21
|
-
*
|
|
22
|
-
* Usage:
|
|
23
|
-
* ```typescript
|
|
24
|
-
* const resolver = new DoHResolver({ server: "https://1.1.1.1/dns-query" });
|
|
25
|
-
* const records = await resolver.query("example.com", "A");
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
12
|
+
/** DNS-over-HTTPS resolver supporting GET and POST wire-format queries. */
|
|
28
13
|
export class DoHResolver {
|
|
29
14
|
serverUrl;
|
|
30
15
|
method;
|
|
31
16
|
timeout;
|
|
32
17
|
bootstrap;
|
|
18
|
+
cache;
|
|
33
19
|
queryId = 0;
|
|
20
|
+
/**
|
|
21
|
+
* Create a new DoH resolver.
|
|
22
|
+
*
|
|
23
|
+
* @param {DoHConfig} config - DoH connection and cache configuration.
|
|
24
|
+
*/
|
|
34
25
|
constructor(config) {
|
|
35
26
|
this.serverUrl = new URL(config.server);
|
|
36
27
|
this.method = config.method ?? "POST";
|
|
37
28
|
this.timeout = config.timeout ?? DEFAULT_TIMEOUT;
|
|
38
29
|
this.bootstrap = config.bootstrap ?? true;
|
|
30
|
+
this.cache = new DNSCache(config.cache);
|
|
39
31
|
}
|
|
40
32
|
/**
|
|
41
|
-
*
|
|
33
|
+
* Perform a DNS query over HTTPS.
|
|
42
34
|
*
|
|
43
|
-
* @param name
|
|
44
|
-
* @param
|
|
45
|
-
* @param signal Optional
|
|
46
|
-
* @returns Array of
|
|
35
|
+
* @param {string} name - Domain name to resolve.
|
|
36
|
+
* @param {"A"|"AAAA"|"HTTPS"|"SVCB"} type - Record type to query.
|
|
37
|
+
* @param {AbortSignal} [signal] - Optional abort signal.
|
|
38
|
+
* @returns {Promise<DNSRecord[]>} Array of DNS records from the response.
|
|
47
39
|
*/
|
|
48
40
|
async query(name, type, signal) {
|
|
41
|
+
const cached = this.cache.get(name, type);
|
|
42
|
+
if (cached)
|
|
43
|
+
return cached;
|
|
49
44
|
const rtype = RTYPE[type];
|
|
50
45
|
const id = this.queryId++ & 0xffff;
|
|
51
|
-
const queryPacket = buildDNSQuery(name, rtype, id);
|
|
46
|
+
const queryPacket = buildDNSQuery(name, rtype, id, { udpPayloadSize: 4096, padding: true });
|
|
52
47
|
const responseData = await this.sendQuery(queryPacket, signal);
|
|
53
|
-
|
|
48
|
+
const records = parseDNSResponse(responseData);
|
|
49
|
+
this.cache.set(name, type, records);
|
|
50
|
+
return records;
|
|
54
51
|
}
|
|
55
52
|
/**
|
|
56
|
-
*
|
|
53
|
+
* Return the underlying DNS cache.
|
|
54
|
+
*
|
|
55
|
+
* @returns {DNSCache} The resolver's DNS cache instance.
|
|
57
56
|
*/
|
|
57
|
+
getCache() {
|
|
58
|
+
return this.cache;
|
|
59
|
+
}
|
|
58
60
|
async sendQuery(packet, signal) {
|
|
59
61
|
const host = await this.resolveServerHost();
|
|
60
62
|
if (this.method === "GET") {
|
|
@@ -62,9 +64,6 @@ export class DoHResolver {
|
|
|
62
64
|
}
|
|
63
65
|
return this.sendPOST(packet, host, signal);
|
|
64
66
|
}
|
|
65
|
-
/**
|
|
66
|
-
* GET method: base64url-encode the DNS query in the `dns` query parameter.
|
|
67
|
-
*/
|
|
68
67
|
sendGET(packet, host, signal) {
|
|
69
68
|
const encoded = packet.toString("base64url");
|
|
70
69
|
const url = new URL(this.serverUrl.toString());
|
|
@@ -80,9 +79,6 @@ export class DoHResolver {
|
|
|
80
79
|
},
|
|
81
80
|
}, undefined, signal);
|
|
82
81
|
}
|
|
83
|
-
/**
|
|
84
|
-
* POST method: send DNS wire-format directly in the request body.
|
|
85
|
-
*/
|
|
86
82
|
sendPOST(packet, host, signal) {
|
|
87
83
|
return this.httpRequest({
|
|
88
84
|
method: "POST",
|
|
@@ -97,9 +93,6 @@ export class DoHResolver {
|
|
|
97
93
|
},
|
|
98
94
|
}, packet, signal);
|
|
99
95
|
}
|
|
100
|
-
/**
|
|
101
|
-
* Make the HTTPS request with timeout and abort support.
|
|
102
|
-
*/
|
|
103
96
|
httpRequest(options, body, signal) {
|
|
104
97
|
return new Promise((resolve, reject) => {
|
|
105
98
|
if (signal?.aborted) {
|
|
@@ -149,7 +142,9 @@ export class DoHResolver {
|
|
|
149
142
|
req.destroy();
|
|
150
143
|
reject(new Error("DoH query timed out"));
|
|
151
144
|
}, this.timeout);
|
|
152
|
-
req.once("close", () =>
|
|
145
|
+
req.once("close", () => {
|
|
146
|
+
clearTimeout(timer);
|
|
147
|
+
});
|
|
153
148
|
if (signal) {
|
|
154
149
|
const onAbort = () => {
|
|
155
150
|
clearTimeout(timer);
|
|
@@ -157,7 +152,9 @@ export class DoHResolver {
|
|
|
157
152
|
reject(new Error("DoH query aborted"));
|
|
158
153
|
};
|
|
159
154
|
signal.addEventListener("abort", onAbort, { once: true });
|
|
160
|
-
req.once("close", () =>
|
|
155
|
+
req.once("close", () => {
|
|
156
|
+
signal.removeEventListener("abort", onAbort);
|
|
157
|
+
});
|
|
161
158
|
}
|
|
162
159
|
if (body) {
|
|
163
160
|
req.write(body);
|
|
@@ -165,27 +162,29 @@ export class DoHResolver {
|
|
|
165
162
|
req.end();
|
|
166
163
|
});
|
|
167
164
|
}
|
|
168
|
-
/**
|
|
169
|
-
* Resolves the DoH server hostname to an IP address (bootstrap).
|
|
170
|
-
* Uses the system DNS resolver for this bootstrap step to avoid
|
|
171
|
-
* a circular dependency (we can't use DoH to resolve the DoH server).
|
|
172
|
-
*
|
|
173
|
-
* If the server URL already uses an IP address, returns it directly.
|
|
174
|
-
*/
|
|
175
165
|
async resolveServerHost() {
|
|
176
166
|
const host = this.serverUrl.hostname;
|
|
177
167
|
if (/^\d+\.\d+\.\d+\.\d+$/.test(host) || host.includes(":")) {
|
|
178
168
|
return host;
|
|
179
169
|
}
|
|
180
170
|
const cached = bootstrapCache.get(host);
|
|
181
|
-
if (cached)
|
|
182
|
-
|
|
171
|
+
if (cached) {
|
|
172
|
+
if (Date.now() - cached.storedAt < BOOTSTRAP_CACHE_TTL) {
|
|
173
|
+
return cached.address;
|
|
174
|
+
}
|
|
175
|
+
bootstrapCache.delete(host);
|
|
176
|
+
}
|
|
183
177
|
if (!this.bootstrap) {
|
|
184
178
|
return host;
|
|
185
179
|
}
|
|
186
180
|
const result = await lookup(host, { family: 0 });
|
|
187
181
|
const address = Array.isArray(result) ? result[0].address : result.address;
|
|
188
|
-
bootstrapCache.
|
|
182
|
+
if (bootstrapCache.size >= BOOTSTRAP_CACHE_MAX) {
|
|
183
|
+
const firstKey = bootstrapCache.keys().next().value;
|
|
184
|
+
if (firstKey)
|
|
185
|
+
bootstrapCache.delete(firstKey);
|
|
186
|
+
}
|
|
187
|
+
bootstrapCache.set(host, { address, storedAt: Date.now() });
|
|
189
188
|
return address;
|
|
190
189
|
}
|
|
191
190
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doh-resolver.js","sourceRoot":"","sources":["../../src/dns/doh-resolver.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"doh-resolver.js","sourceRoot":"","sources":["../../src/dns/doh-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { RTYPE, type DNSRecord } from "./types.js";
|
|
2
|
+
type RTYPEValue = (typeof RTYPE)[keyof typeof RTYPE];
|
|
3
|
+
/** Configuration for a DNS-over-TLS resolver. */
|
|
4
|
+
export interface DoTConfig {
|
|
5
|
+
/** DoT server IP address or hostname. */
|
|
6
|
+
server?: string;
|
|
7
|
+
/** Server port (default 853). */
|
|
8
|
+
port?: number;
|
|
9
|
+
/** TLS server name for certificate verification. */
|
|
10
|
+
servername?: string;
|
|
11
|
+
/** Query timeout in milliseconds. */
|
|
12
|
+
timeout?: number;
|
|
13
|
+
/** Whether to reuse the TLS connection across queries. */
|
|
14
|
+
keepAlive?: boolean;
|
|
15
|
+
/** Whether to skip TLS certificate verification. */
|
|
16
|
+
insecure?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** Pre-configured DNS-over-TLS server entries. */
|
|
19
|
+
export declare const DOT_SERVERS: {
|
|
20
|
+
readonly cloudflare: {
|
|
21
|
+
readonly server: "1.1.1.1";
|
|
22
|
+
readonly servername: "cloudflare-dns.com";
|
|
23
|
+
};
|
|
24
|
+
readonly "cloudflare-ipv6": {
|
|
25
|
+
readonly server: "2606:4700:4700::1111";
|
|
26
|
+
readonly servername: "cloudflare-dns.com";
|
|
27
|
+
};
|
|
28
|
+
readonly google: {
|
|
29
|
+
readonly server: "8.8.8.8";
|
|
30
|
+
readonly servername: "dns.google";
|
|
31
|
+
};
|
|
32
|
+
readonly "google-ipv6": {
|
|
33
|
+
readonly server: "2001:4860:4860::8888";
|
|
34
|
+
readonly servername: "dns.google";
|
|
35
|
+
};
|
|
36
|
+
readonly quad9: {
|
|
37
|
+
readonly server: "9.9.9.9";
|
|
38
|
+
readonly servername: "dns.quad9.net";
|
|
39
|
+
};
|
|
40
|
+
readonly adguard: {
|
|
41
|
+
readonly server: "94.140.14.14";
|
|
42
|
+
readonly servername: "dns.adguard-dns.com";
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
/** DNS-over-TLS resolver using a persistent TLS connection. */
|
|
46
|
+
export declare class DoTResolver {
|
|
47
|
+
private readonly server;
|
|
48
|
+
private readonly port;
|
|
49
|
+
private readonly servername;
|
|
50
|
+
private readonly timeout;
|
|
51
|
+
private readonly insecure;
|
|
52
|
+
private readonly keepAlive;
|
|
53
|
+
private socket;
|
|
54
|
+
private connected;
|
|
55
|
+
/**
|
|
56
|
+
* Create a new DoT resolver.
|
|
57
|
+
*
|
|
58
|
+
* @param {DoTConfig} [config] - DoT connection configuration.
|
|
59
|
+
*/
|
|
60
|
+
constructor(config?: DoTConfig);
|
|
61
|
+
/**
|
|
62
|
+
* Resolve a domain name to DNS records over TLS.
|
|
63
|
+
*
|
|
64
|
+
* @param {string} name - Domain name to resolve.
|
|
65
|
+
* @param {RTYPEValue} [type] - Numeric record type (defaults to A).
|
|
66
|
+
* @returns {Promise<DNSRecord[]>} Array of parsed DNS records.
|
|
67
|
+
*/
|
|
68
|
+
resolve(name: string, type?: RTYPEValue): Promise<DNSRecord[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Resolve a domain name to IPv4 addresses.
|
|
71
|
+
*
|
|
72
|
+
* @param {string} name - Domain name to resolve.
|
|
73
|
+
* @returns {Promise<string[]>} Array of IPv4 address strings.
|
|
74
|
+
*/
|
|
75
|
+
resolve4(name: string): Promise<string[]>;
|
|
76
|
+
/**
|
|
77
|
+
* Resolve a domain name to IPv6 addresses.
|
|
78
|
+
*
|
|
79
|
+
* @param {string} name - Domain name to resolve.
|
|
80
|
+
* @returns {Promise<string[]>} Array of IPv6 address strings.
|
|
81
|
+
*/
|
|
82
|
+
resolve6(name: string): Promise<string[]>;
|
|
83
|
+
/** Close the underlying TLS socket and release resources. */
|
|
84
|
+
close(): void;
|
|
85
|
+
private send;
|
|
86
|
+
private getSocket;
|
|
87
|
+
}
|
|
88
|
+
export {};
|
|
89
|
+
//# sourceMappingURL=dot-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dot-resolver.d.ts","sourceRoot":"","sources":["../../src/dns/dot-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAEnD,KAAK,UAAU,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC;AAErD,iDAAiD;AACjD,MAAM,WAAW,SAAS;IACxB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,kDAAkD;AAClD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;CAOd,CAAC;AAEX,+DAA+D;AAC/D,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,SAAS,CAAS;IAE1B;;;;OAIG;gBACS,MAAM,CAAC,EAAE,SAAS;IAS9B;;;;;;OAMG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,UAAoB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAkB7E;;;;;OAKG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK/C;;;;;OAKG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAa/C,6DAA6D;IAC7D,KAAK,IAAI,IAAI;YAQC,IAAI;YAqDJ,SAAS;CAiCxB"}
|