nlcurl 0.7.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.
Files changed (350) hide show
  1. package/README.md +143 -140
  2. package/dist/cache/groups.d.ts +75 -0
  3. package/dist/cache/groups.d.ts.map +1 -0
  4. package/dist/cache/groups.js +118 -0
  5. package/dist/cache/groups.js.map +1 -0
  6. package/dist/cache/no-vary-search.d.ts +33 -0
  7. package/dist/cache/no-vary-search.d.ts.map +1 -0
  8. package/dist/cache/no-vary-search.js +148 -0
  9. package/dist/cache/no-vary-search.js.map +1 -0
  10. package/dist/cache/range.d.ts +120 -0
  11. package/dist/cache/range.d.ts.map +1 -0
  12. package/dist/cache/range.js +193 -0
  13. package/dist/cache/range.js.map +1 -0
  14. package/dist/cache/store.d.ts +58 -36
  15. package/dist/cache/store.d.ts.map +1 -1
  16. package/dist/cache/store.js +58 -46
  17. package/dist/cache/store.js.map +1 -1
  18. package/dist/cache/types.d.ts +7 -39
  19. package/dist/cache/types.d.ts.map +1 -1
  20. package/dist/cli/args.d.ts +4 -37
  21. package/dist/cli/args.d.ts.map +1 -1
  22. package/dist/cli/args.js +3 -4
  23. package/dist/cli/args.js.map +1 -1
  24. package/dist/cli/index.d.ts +0 -5
  25. package/dist/cli/index.d.ts.map +1 -1
  26. package/dist/cli/index.js +1 -6
  27. package/dist/cli/index.js.map +1 -1
  28. package/dist/cli/output.d.ts +14 -20
  29. package/dist/cli/output.d.ts.map +1 -1
  30. package/dist/cli/output.js +14 -20
  31. package/dist/cli/output.js.map +1 -1
  32. package/dist/cookies/jar.d.ts +30 -39
  33. package/dist/cookies/jar.d.ts.map +1 -1
  34. package/dist/cookies/jar.js +27 -37
  35. package/dist/cookies/jar.js.map +1 -1
  36. package/dist/cookies/parser.d.ts +13 -17
  37. package/dist/cookies/parser.d.ts.map +1 -1
  38. package/dist/cookies/parser.js +17 -14
  39. package/dist/cookies/parser.js.map +1 -1
  40. package/dist/cookies/psl-data.d.ts +1 -1
  41. package/dist/cookies/psl-data.js +1 -1
  42. package/dist/cookies/public-suffix.d.ts +5 -27
  43. package/dist/cookies/public-suffix.d.ts.map +1 -1
  44. package/dist/cookies/public-suffix.js +5 -37
  45. package/dist/cookies/public-suffix.js.map +1 -1
  46. package/dist/core/auth.d.ts +30 -0
  47. package/dist/core/auth.d.ts.map +1 -0
  48. package/dist/core/auth.js +34 -0
  49. package/dist/core/auth.js.map +1 -0
  50. package/dist/core/client.d.ts +28 -40
  51. package/dist/core/client.d.ts.map +1 -1
  52. package/dist/core/client.js +31 -41
  53. package/dist/core/client.js.map +1 -1
  54. package/dist/core/errors.d.ts +64 -88
  55. package/dist/core/errors.d.ts.map +1 -1
  56. package/dist/core/errors.js +64 -88
  57. package/dist/core/errors.js.map +1 -1
  58. package/dist/core/request.d.ts +23 -111
  59. package/dist/core/request.d.ts.map +1 -1
  60. package/dist/core/response.d.ts +49 -66
  61. package/dist/core/response.d.ts.map +1 -1
  62. package/dist/core/response.js +45 -59
  63. package/dist/core/response.js.map +1 -1
  64. package/dist/core/session.d.ts +66 -78
  65. package/dist/core/session.d.ts.map +1 -1
  66. package/dist/core/session.js +105 -76
  67. package/dist/core/session.js.map +1 -1
  68. package/dist/core/validation.d.ts +44 -43
  69. package/dist/core/validation.d.ts.map +1 -1
  70. package/dist/core/validation.js +44 -56
  71. package/dist/core/validation.js.map +1 -1
  72. package/dist/dns/cache.d.ts +59 -0
  73. package/dist/dns/cache.d.ts.map +1 -0
  74. package/dist/dns/cache.js +99 -0
  75. package/dist/dns/cache.js.map +1 -0
  76. package/dist/dns/codec.d.ts +20 -18
  77. package/dist/dns/codec.d.ts.map +1 -1
  78. package/dist/dns/codec.js +20 -36
  79. package/dist/dns/codec.js.map +1 -1
  80. package/dist/dns/doh-resolver.d.ts +17 -31
  81. package/dist/dns/doh-resolver.d.ts.map +1 -1
  82. package/dist/dns/doh-resolver.js +46 -47
  83. package/dist/dns/doh-resolver.js.map +1 -1
  84. package/dist/dns/dot-resolver.d.ts +89 -0
  85. package/dist/dns/dot-resolver.d.ts.map +1 -0
  86. package/dist/dns/dot-resolver.js +158 -0
  87. package/dist/dns/dot-resolver.js.map +1 -0
  88. package/dist/dns/https-rr.d.ts +19 -30
  89. package/dist/dns/https-rr.d.ts.map +1 -1
  90. package/dist/dns/https-rr.js +22 -40
  91. package/dist/dns/https-rr.js.map +1 -1
  92. package/dist/dns/types.d.ts +31 -59
  93. package/dist/dns/types.d.ts.map +1 -1
  94. package/dist/dns/types.js +3 -14
  95. package/dist/dns/types.js.map +1 -1
  96. package/dist/fingerprints/akamai.d.ts +3 -11
  97. package/dist/fingerprints/akamai.d.ts.map +1 -1
  98. package/dist/fingerprints/akamai.js +3 -11
  99. package/dist/fingerprints/akamai.js.map +1 -1
  100. package/dist/fingerprints/database.d.ts +6 -14
  101. package/dist/fingerprints/database.d.ts.map +1 -1
  102. package/dist/fingerprints/database.js +6 -14
  103. package/dist/fingerprints/database.js.map +1 -1
  104. package/dist/fingerprints/extensions.d.ts +56 -71
  105. package/dist/fingerprints/extensions.d.ts.map +1 -1
  106. package/dist/fingerprints/extensions.js +58 -71
  107. package/dist/fingerprints/extensions.js.map +1 -1
  108. package/dist/fingerprints/ja3.d.ts +12 -30
  109. package/dist/fingerprints/ja3.d.ts.map +1 -1
  110. package/dist/fingerprints/ja3.js +12 -30
  111. package/dist/fingerprints/ja3.js.map +1 -1
  112. package/dist/fingerprints/ja4.d.ts +18 -0
  113. package/dist/fingerprints/ja4.d.ts.map +1 -0
  114. package/dist/fingerprints/ja4.js +83 -0
  115. package/dist/fingerprints/ja4.js.map +1 -0
  116. package/dist/fingerprints/profiles/chrome.d.ts +18 -21
  117. package/dist/fingerprints/profiles/chrome.d.ts.map +1 -1
  118. package/dist/fingerprints/profiles/chrome.js +35 -31
  119. package/dist/fingerprints/profiles/chrome.js.map +1 -1
  120. package/dist/fingerprints/profiles/edge.d.ts +7 -10
  121. package/dist/fingerprints/profiles/edge.d.ts.map +1 -1
  122. package/dist/fingerprints/profiles/edge.js +7 -10
  123. package/dist/fingerprints/profiles/edge.js.map +1 -1
  124. package/dist/fingerprints/profiles/firefox.d.ts +8 -11
  125. package/dist/fingerprints/profiles/firefox.d.ts.map +1 -1
  126. package/dist/fingerprints/profiles/firefox.js +8 -11
  127. package/dist/fingerprints/profiles/firefox.js.map +1 -1
  128. package/dist/fingerprints/profiles/safari.d.ts +11 -14
  129. package/dist/fingerprints/profiles/safari.d.ts.map +1 -1
  130. package/dist/fingerprints/profiles/safari.js +11 -14
  131. package/dist/fingerprints/profiles/safari.js.map +1 -1
  132. package/dist/fingerprints/profiles/tor.d.ts +5 -8
  133. package/dist/fingerprints/profiles/tor.d.ts.map +1 -1
  134. package/dist/fingerprints/profiles/tor.js +5 -8
  135. package/dist/fingerprints/profiles/tor.js.map +1 -1
  136. package/dist/fingerprints/types.d.ts +42 -73
  137. package/dist/fingerprints/types.d.ts.map +1 -1
  138. package/dist/hsts/store.d.ts +19 -21
  139. package/dist/hsts/store.d.ts.map +1 -1
  140. package/dist/hsts/store.js +20 -28
  141. package/dist/hsts/store.js.map +1 -1
  142. package/dist/hsts/types.d.ts +10 -14
  143. package/dist/hsts/types.d.ts.map +1 -1
  144. package/dist/http/alt-svc.d.ts +31 -49
  145. package/dist/http/alt-svc.d.ts.map +1 -1
  146. package/dist/http/alt-svc.js +21 -55
  147. package/dist/http/alt-svc.js.map +1 -1
  148. package/dist/http/early-hints.d.ts +23 -0
  149. package/dist/http/early-hints.d.ts.map +1 -0
  150. package/dist/http/early-hints.js +33 -0
  151. package/dist/http/early-hints.js.map +1 -0
  152. package/dist/http/form-data.d.ts +17 -35
  153. package/dist/http/form-data.d.ts.map +1 -1
  154. package/dist/http/form-data.js +12 -34
  155. package/dist/http/form-data.js.map +1 -1
  156. package/dist/http/h1/client.d.ts +14 -26
  157. package/dist/http/h1/client.d.ts.map +1 -1
  158. package/dist/http/h1/client.js +14 -23
  159. package/dist/http/h1/client.js.map +1 -1
  160. package/dist/http/h1/encoder.d.ts +10 -17
  161. package/dist/http/h1/encoder.d.ts.map +1 -1
  162. package/dist/http/h1/encoder.js +10 -17
  163. package/dist/http/h1/encoder.js.map +1 -1
  164. package/dist/http/h1/parser.d.ts +22 -59
  165. package/dist/http/h1/parser.d.ts.map +1 -1
  166. package/dist/http/h1/parser.js +15 -47
  167. package/dist/http/h1/parser.js.map +1 -1
  168. package/dist/http/h2/client.d.ts +18 -59
  169. package/dist/http/h2/client.d.ts.map +1 -1
  170. package/dist/http/h2/client.js +29 -64
  171. package/dist/http/h2/client.js.map +1 -1
  172. package/dist/http/h2/frames.d.ts +53 -84
  173. package/dist/http/h2/frames.d.ts.map +1 -1
  174. package/dist/http/h2/frames.js +48 -76
  175. package/dist/http/h2/frames.js.map +1 -1
  176. package/dist/http/h2/hpack.d.ts +16 -35
  177. package/dist/http/h2/hpack.d.ts.map +1 -1
  178. package/dist/http/h2/hpack.js +16 -35
  179. package/dist/http/h2/hpack.js.map +1 -1
  180. package/dist/http/h3/detection.d.ts +5 -7
  181. package/dist/http/h3/detection.d.ts.map +1 -1
  182. package/dist/http/h3/detection.js +5 -23
  183. package/dist/http/h3/detection.js.map +1 -1
  184. package/dist/http/negotiator.d.ts +25 -38
  185. package/dist/http/negotiator.d.ts.map +1 -1
  186. package/dist/http/negotiator.js +16 -28
  187. package/dist/http/negotiator.js.map +1 -1
  188. package/dist/http/pool.d.ts +32 -62
  189. package/dist/http/pool.d.ts.map +1 -1
  190. package/dist/http/pool.js +22 -41
  191. package/dist/http/pool.js.map +1 -1
  192. package/dist/http/resumable-upload.d.ts +76 -0
  193. package/dist/http/resumable-upload.d.ts.map +1 -0
  194. package/dist/http/resumable-upload.js +104 -0
  195. package/dist/http/resumable-upload.js.map +1 -0
  196. package/dist/http/trailers.d.ts +29 -0
  197. package/dist/http/trailers.d.ts.map +1 -0
  198. package/dist/http/trailers.js +57 -0
  199. package/dist/http/trailers.js.map +1 -0
  200. package/dist/index.d.ts +21 -8
  201. package/dist/index.d.ts.map +1 -1
  202. package/dist/index.js +21 -2
  203. package/dist/index.js.map +1 -1
  204. package/dist/middleware/interceptor.d.ts +13 -32
  205. package/dist/middleware/interceptor.d.ts.map +1 -1
  206. package/dist/middleware/interceptor.js +11 -16
  207. package/dist/middleware/interceptor.js.map +1 -1
  208. package/dist/middleware/rate-limiter.d.ts +8 -17
  209. package/dist/middleware/rate-limiter.d.ts.map +1 -1
  210. package/dist/middleware/rate-limiter.js +11 -12
  211. package/dist/middleware/rate-limiter.js.map +1 -1
  212. package/dist/middleware/retry-after.d.ts +15 -0
  213. package/dist/middleware/retry-after.d.ts.map +1 -0
  214. package/dist/middleware/retry-after.js +36 -0
  215. package/dist/middleware/retry-after.js.map +1 -0
  216. package/dist/middleware/retry.d.ts +9 -18
  217. package/dist/middleware/retry.d.ts.map +1 -1
  218. package/dist/middleware/retry.js +12 -9
  219. package/dist/middleware/retry.js.map +1 -1
  220. package/dist/proxy/auth.d.ts +73 -0
  221. package/dist/proxy/auth.d.ts.map +1 -0
  222. package/dist/proxy/auth.js +128 -0
  223. package/dist/proxy/auth.js.map +1 -0
  224. package/dist/proxy/env-proxy.d.ts +5 -15
  225. package/dist/proxy/env-proxy.d.ts.map +1 -1
  226. package/dist/proxy/env-proxy.js +5 -23
  227. package/dist/proxy/env-proxy.js.map +1 -1
  228. package/dist/proxy/http-proxy.d.ts +12 -19
  229. package/dist/proxy/http-proxy.d.ts.map +1 -1
  230. package/dist/proxy/http-proxy.js +5 -8
  231. package/dist/proxy/http-proxy.js.map +1 -1
  232. package/dist/proxy/socks.d.ts +13 -20
  233. package/dist/proxy/socks.d.ts.map +1 -1
  234. package/dist/proxy/socks.js +5 -8
  235. package/dist/proxy/socks.js.map +1 -1
  236. package/dist/sse/parser.d.ts +14 -37
  237. package/dist/sse/parser.d.ts.map +1 -1
  238. package/dist/sse/parser.js +14 -28
  239. package/dist/sse/parser.js.map +1 -1
  240. package/dist/tls/constants.d.ts +15 -74
  241. package/dist/tls/constants.d.ts.map +1 -1
  242. package/dist/tls/constants.js +15 -74
  243. package/dist/tls/constants.js.map +1 -1
  244. package/dist/tls/ct.d.ts +78 -0
  245. package/dist/tls/ct.d.ts.map +1 -0
  246. package/dist/tls/ct.js +175 -0
  247. package/dist/tls/ct.js.map +1 -0
  248. package/dist/tls/early-data.d.ts +45 -0
  249. package/dist/tls/early-data.d.ts.map +1 -0
  250. package/dist/tls/early-data.js +46 -0
  251. package/dist/tls/early-data.js.map +1 -0
  252. package/dist/tls/ech.d.ts +68 -85
  253. package/dist/tls/ech.d.ts.map +1 -1
  254. package/dist/tls/ech.js +54 -102
  255. package/dist/tls/ech.js.map +1 -1
  256. package/dist/tls/keylog.d.ts +34 -0
  257. package/dist/tls/keylog.d.ts.map +1 -0
  258. package/dist/tls/keylog.js +64 -0
  259. package/dist/tls/keylog.js.map +1 -0
  260. package/dist/tls/node-engine.d.ts +10 -17
  261. package/dist/tls/node-engine.d.ts.map +1 -1
  262. package/dist/tls/node-engine.js +20 -18
  263. package/dist/tls/node-engine.js.map +1 -1
  264. package/dist/tls/ocsp.d.ts +55 -0
  265. package/dist/tls/ocsp.d.ts.map +1 -0
  266. package/dist/tls/ocsp.js +131 -0
  267. package/dist/tls/ocsp.js.map +1 -0
  268. package/dist/tls/pin-verification.d.ts +5 -4
  269. package/dist/tls/pin-verification.d.ts.map +1 -1
  270. package/dist/tls/pin-verification.js +5 -11
  271. package/dist/tls/pin-verification.js.map +1 -1
  272. package/dist/tls/session-cache.d.ts +27 -39
  273. package/dist/tls/session-cache.d.ts.map +1 -1
  274. package/dist/tls/session-cache.js +20 -24
  275. package/dist/tls/session-cache.js.map +1 -1
  276. package/dist/tls/stealth/client-hello.d.ts +25 -44
  277. package/dist/tls/stealth/client-hello.d.ts.map +1 -1
  278. package/dist/tls/stealth/client-hello.js +17 -28
  279. package/dist/tls/stealth/client-hello.js.map +1 -1
  280. package/dist/tls/stealth/engine.d.ts +5 -15
  281. package/dist/tls/stealth/engine.d.ts.map +1 -1
  282. package/dist/tls/stealth/engine.js +11 -17
  283. package/dist/tls/stealth/engine.js.map +1 -1
  284. package/dist/tls/stealth/handshake.d.ts +21 -31
  285. package/dist/tls/stealth/handshake.d.ts.map +1 -1
  286. package/dist/tls/stealth/handshake.js +15 -43
  287. package/dist/tls/stealth/handshake.js.map +1 -1
  288. package/dist/tls/stealth/key-schedule.d.ts +59 -86
  289. package/dist/tls/stealth/key-schedule.d.ts.map +1 -1
  290. package/dist/tls/stealth/key-schedule.js +46 -58
  291. package/dist/tls/stealth/key-schedule.js.map +1 -1
  292. package/dist/tls/stealth/record-layer.d.ts +52 -75
  293. package/dist/tls/stealth/record-layer.d.ts.map +1 -1
  294. package/dist/tls/stealth/record-layer.js +47 -63
  295. package/dist/tls/stealth/record-layer.js.map +1 -1
  296. package/dist/tls/stealth/tls12-handshake.d.ts +16 -0
  297. package/dist/tls/stealth/tls12-handshake.d.ts.map +1 -1
  298. package/dist/tls/stealth/tls12-handshake.js +8 -0
  299. package/dist/tls/stealth/tls12-handshake.js.map +1 -1
  300. package/dist/tls/types.d.ts +42 -60
  301. package/dist/tls/types.d.ts.map +1 -1
  302. package/dist/utils/buffer-reader.d.ts +26 -81
  303. package/dist/utils/buffer-reader.d.ts.map +1 -1
  304. package/dist/utils/buffer-reader.js +26 -81
  305. package/dist/utils/buffer-reader.js.map +1 -1
  306. package/dist/utils/buffer-writer.d.ts +30 -66
  307. package/dist/utils/buffer-writer.d.ts.map +1 -1
  308. package/dist/utils/buffer-writer.js +30 -66
  309. package/dist/utils/buffer-writer.js.map +1 -1
  310. package/dist/utils/compression.d.ts +18 -0
  311. package/dist/utils/compression.d.ts.map +1 -0
  312. package/dist/utils/compression.js +34 -0
  313. package/dist/utils/compression.js.map +1 -0
  314. package/dist/utils/dictionary-transport.d.ts +97 -0
  315. package/dist/utils/dictionary-transport.d.ts.map +1 -0
  316. package/dist/utils/dictionary-transport.js +171 -0
  317. package/dist/utils/dictionary-transport.js.map +1 -0
  318. package/dist/utils/encoding.d.ts +12 -30
  319. package/dist/utils/encoding.d.ts.map +1 -1
  320. package/dist/utils/encoding.js +15 -46
  321. package/dist/utils/encoding.js.map +1 -1
  322. package/dist/utils/happy-eyeballs.d.ts +18 -8
  323. package/dist/utils/happy-eyeballs.d.ts.map +1 -1
  324. package/dist/utils/happy-eyeballs.js +19 -27
  325. package/dist/utils/happy-eyeballs.js.map +1 -1
  326. package/dist/utils/logger.d.ts +54 -81
  327. package/dist/utils/logger.d.ts.map +1 -1
  328. package/dist/utils/logger.js +92 -64
  329. package/dist/utils/logger.js.map +1 -1
  330. package/dist/utils/tcp-fast-open.d.ts +30 -0
  331. package/dist/utils/tcp-fast-open.d.ts.map +1 -0
  332. package/dist/utils/tcp-fast-open.js +36 -0
  333. package/dist/utils/tcp-fast-open.js.map +1 -0
  334. package/dist/utils/url.d.ts +18 -25
  335. package/dist/utils/url.d.ts.map +1 -1
  336. package/dist/utils/url.js +18 -25
  337. package/dist/utils/url.js.map +1 -1
  338. package/dist/ws/client.d.ts +33 -53
  339. package/dist/ws/client.d.ts.map +1 -1
  340. package/dist/ws/client.js +29 -30
  341. package/dist/ws/client.js.map +1 -1
  342. package/dist/ws/frame.d.ts +24 -41
  343. package/dist/ws/frame.d.ts.map +1 -1
  344. package/dist/ws/frame.js +18 -33
  345. package/dist/ws/frame.js.map +1 -1
  346. package/dist/ws/permessage-deflate.d.ts +23 -28
  347. package/dist/ws/permessage-deflate.d.ts.map +1 -1
  348. package/dist/ws/permessage-deflate.js +18 -26
  349. package/dist/ws/permessage-deflate.js.map +1 -1
  350. package/package.json +62 -62
@@ -0,0 +1,99 @@
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. */
5
+ export class DNSCache {
6
+ entries = new Map();
7
+ maxEntries;
8
+ minTTL;
9
+ maxTTL;
10
+ accessCounter = 0;
11
+ /**
12
+ * Create a new DNS cache.
13
+ *
14
+ * @param {DNSCacheConfig} [config] - Cache configuration options.
15
+ */
16
+ constructor(config) {
17
+ this.maxEntries = config?.maxEntries ?? DEFAULT_MAX_ENTRIES;
18
+ this.minTTL = config?.minTTL ?? DEFAULT_MIN_TTL;
19
+ this.maxTTL = config?.maxTTL ?? DEFAULT_MAX_TTL;
20
+ }
21
+ cacheKey(name, type) {
22
+ return `${type}:${name.toLowerCase()}`;
23
+ }
24
+ /**
25
+ * Retrieve cached records for a name and type.
26
+ *
27
+ * @param {string} name - Domain name to look up.
28
+ * @param {string} type - Record type string.
29
+ * @returns {DNSRecord[]|undefined} Cached records, or `undefined` if absent or expired.
30
+ */
31
+ get(name, type) {
32
+ const key = this.cacheKey(name, type);
33
+ const entry = this.entries.get(key);
34
+ if (!entry)
35
+ return undefined;
36
+ const age = (Date.now() - entry.storedAt) / 1000;
37
+ if (age >= entry.ttl) {
38
+ this.entries.delete(key);
39
+ return undefined;
40
+ }
41
+ entry.lastAccessedAt = ++this.accessCounter;
42
+ return entry.records;
43
+ }
44
+ /**
45
+ * Store DNS records in the cache.
46
+ *
47
+ * @param {string} name - Domain name.
48
+ * @param {string} type - Record type string.
49
+ * @param {DNSRecord[]} records - DNS records to cache.
50
+ */
51
+ set(name, type, records) {
52
+ if (records.length === 0)
53
+ return;
54
+ const ttl = this.computeTTL(records);
55
+ const key = this.cacheKey(name, type);
56
+ if (this.entries.size >= this.maxEntries && !this.entries.has(key)) {
57
+ this.evictLRU();
58
+ }
59
+ this.entries.set(key, {
60
+ records,
61
+ storedAt: Date.now(),
62
+ ttl,
63
+ lastAccessedAt: ++this.accessCounter,
64
+ });
65
+ }
66
+ computeTTL(records) {
67
+ let minRecordTTL = Infinity;
68
+ for (const record of records) {
69
+ if (record.ttl < minRecordTTL) {
70
+ minRecordTTL = record.ttl;
71
+ }
72
+ }
73
+ if (minRecordTTL === Infinity)
74
+ minRecordTTL = this.minTTL;
75
+ return Math.max(this.minTTL, Math.min(this.maxTTL, minRecordTTL));
76
+ }
77
+ evictLRU() {
78
+ let oldestKey;
79
+ let oldestAccess = Infinity;
80
+ for (const [key, entry] of this.entries) {
81
+ if (entry.lastAccessedAt < oldestAccess) {
82
+ oldestAccess = entry.lastAccessedAt;
83
+ oldestKey = key;
84
+ }
85
+ }
86
+ if (oldestKey) {
87
+ this.entries.delete(oldestKey);
88
+ }
89
+ }
90
+ /** Remove all entries from the cache. */
91
+ clear() {
92
+ this.entries.clear();
93
+ }
94
+ /** Number of entries currently in the cache. */
95
+ get size() {
96
+ return this.entries.size;
97
+ }
98
+ }
99
+ //# 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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"}
@@ -1,37 +1,39 @@
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
- * Builds a DNS query packet in wire format (RFC 1035 §4).
3
+ * Build a raw DNS query packet.
11
4
  *
12
- * @param name The domain name to query.
13
- * @param type DNS record type (A = 1, AAAA = 28, HTTPS = 65).
14
- * @param id 16-bit query ID.
15
- * @returns Raw DNS query packet.
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
+ * @returns {Buffer} Wire-format DNS query buffer.
16
9
  */
17
10
  export declare function buildDNSQuery(name: string, type: number, id?: number): Buffer;
18
11
  /**
19
- * Parses a DNS response packet and extracts answer records.
12
+ * Parse a wire-format DNS response packet into records.
20
13
  *
21
- * @param packet Raw DNS response bytes.
22
- * @returns Array of parsed DNS records from the answer section.
14
+ * @param {Buffer} packet - Raw DNS response data.
15
+ * @returns {DNSRecord[]} Array of parsed DNS records from the answer section.
23
16
  */
24
17
  export declare function parseDNSResponse(packet: Buffer): DNSRecord[];
25
18
  /**
26
- * Parses an A record (IPv4 address) from rdata.
19
+ * Parse a 4-byte buffer into a dotted-decimal IPv4 address string.
20
+ *
21
+ * @param {Buffer} data - Raw A record data.
22
+ * @returns {string} IPv4 address string.
27
23
  */
28
24
  export declare function parseARecord(data: Buffer): string;
29
25
  /**
30
- * Parses an AAAA record (IPv6 address) from rdata.
26
+ * Parse a 16-byte buffer into a colon-hex IPv6 address string.
27
+ *
28
+ * @param {Buffer} data - Raw AAAA record data.
29
+ * @returns {string} IPv6 address string.
31
30
  */
32
31
  export declare function parseAAAARecord(data: Buffer): string;
33
32
  /**
34
- * Parses an HTTPS/SVCB record from rdata (RFC 9460 §2.2).
33
+ * Parse raw SVCB/HTTPS record data into a structured record.
34
+ *
35
+ * @param {Buffer} data - Raw SVCB record data.
36
+ * @returns {SVCBRecord} Parsed SVCB record with service parameters.
35
37
  */
36
38
  export declare function parseSVCBRecord(data: Buffer): SVCBRecord;
37
39
  //# sourceMappingURL=codec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/dns/codec.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAA8B,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,MAAU,GAAG,MAAM,CAgBhF;AAiBD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CA4C5D;AAoDD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAuDxD"}
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;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,MAAU,GAAG,MAAM,CAgBhF;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"}
package/dist/dns/codec.js CHANGED
@@ -1,18 +1,11 @@
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
- * Builds a DNS query packet in wire format (RFC 1035 §4).
3
+ * Build a raw DNS query packet.
11
4
  *
12
- * @param name The domain name to query.
13
- * @param type DNS record type (A = 1, AAAA = 28, HTTPS = 65).
14
- * @param id 16-bit query ID.
15
- * @returns Raw DNS query packet.
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
+ * @returns {Buffer} Wire-format DNS query buffer.
16
9
  */
17
10
  export function buildDNSQuery(name, type, id = 0) {
18
11
  const labels = encodeName(name);
@@ -28,9 +21,6 @@ export function buildDNSQuery(name, type, id = 0) {
28
21
  buf.writeUInt16BE(RCLASS.IN, 12 + labels.length + 2);
29
22
  return buf;
30
23
  }
31
- /**
32
- * Encodes a domain name into DNS wire format labels.
33
- */
34
24
  function encodeName(name) {
35
25
  const parts = name.replace(/\.$/, "").split(".");
36
26
  const buffers = [];
@@ -44,10 +34,10 @@ function encodeName(name) {
44
34
  return Buffer.concat(buffers);
45
35
  }
46
36
  /**
47
- * Parses a DNS response packet and extracts answer records.
37
+ * Parse a wire-format DNS response packet into records.
48
38
  *
49
- * @param packet Raw DNS response bytes.
50
- * @returns Array of parsed DNS records from the answer section.
39
+ * @param {Buffer} packet - Raw DNS response data.
40
+ * @returns {DNSRecord[]} Array of parsed DNS records from the answer section.
51
41
  */
52
42
  export function parseDNSResponse(packet) {
53
43
  if (packet.length < 12)
@@ -86,9 +76,6 @@ export function parseDNSResponse(packet) {
86
76
  }
87
77
  return records;
88
78
  }
89
- /**
90
- * Decodes a DNS compressed name from a packet.
91
- */
92
79
  function decodeName(packet, offset) {
93
80
  const labels = [];
94
81
  let jumped = false;
@@ -118,9 +105,6 @@ function decodeName(packet, offset) {
118
105
  returnOffset = offset + 1;
119
106
  return { name: labels.join("."), newOffset: returnOffset };
120
107
  }
121
- /**
122
- * Skips past a DNS name in a packet (handles compression pointers).
123
- */
124
108
  function skipName(packet, offset) {
125
109
  let depth = 0;
126
110
  while (offset < packet.length) {
@@ -136,7 +120,10 @@ function skipName(packet, offset) {
136
120
  return offset;
137
121
  }
138
122
  /**
139
- * Parses an A record (IPv4 address) from rdata.
123
+ * Parse a 4-byte buffer into a dotted-decimal IPv4 address string.
124
+ *
125
+ * @param {Buffer} data - Raw A record data.
126
+ * @returns {string} IPv4 address string.
140
127
  */
141
128
  export function parseARecord(data) {
142
129
  if (data.length !== 4)
@@ -144,7 +131,10 @@ export function parseARecord(data) {
144
131
  return `${data[0]}.${data[1]}.${data[2]}.${data[3]}`;
145
132
  }
146
133
  /**
147
- * Parses an AAAA record (IPv6 address) from rdata.
134
+ * Parse a 16-byte buffer into a colon-hex IPv6 address string.
135
+ *
136
+ * @param {Buffer} data - Raw AAAA record data.
137
+ * @returns {string} IPv6 address string.
148
138
  */
149
139
  export function parseAAAARecord(data) {
150
140
  if (data.length !== 16)
@@ -156,7 +146,10 @@ export function parseAAAARecord(data) {
156
146
  return groups.join(":");
157
147
  }
158
148
  /**
159
- * Parses an HTTPS/SVCB record from rdata (RFC 9460 §2.2).
149
+ * Parse raw SVCB/HTTPS record data into a structured record.
150
+ *
151
+ * @param {Buffer} data - Raw SVCB record data.
152
+ * @returns {SVCBRecord} Parsed SVCB record with service parameters.
160
153
  */
161
154
  export function parseSVCBRecord(data) {
162
155
  if (data.length < 3)
@@ -211,9 +204,6 @@ export function parseSVCBRecord(data) {
211
204
  }
212
205
  return record;
213
206
  }
214
- /**
215
- * Parses the ALPN SvcParam — length-prefixed protocol identifier list.
216
- */
217
207
  function parseAlpnParam(data) {
218
208
  const protocols = [];
219
209
  let offset = 0;
@@ -227,9 +217,6 @@ function parseAlpnParam(data) {
227
217
  }
228
218
  return protocols;
229
219
  }
230
- /**
231
- * Parses IPv4 address hints from SvcParam value.
232
- */
233
220
  function parseIPv4Hints(data) {
234
221
  const addresses = [];
235
222
  for (let i = 0; i + 4 <= data.length; i += 4) {
@@ -237,9 +224,6 @@ function parseIPv4Hints(data) {
237
224
  }
238
225
  return addresses;
239
226
  }
240
- /**
241
- * Parses IPv6 address hints from SvcParam value.
242
- */
243
227
  function parseIPv6Hints(data) {
244
228
  const addresses = [];
245
229
  for (let i = 0; i + 16 <= data.length; i += 16) {
@@ -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
- * DNS-over-HTTPS resolver for encrypted DNS resolution.
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
- * Sends a DNS query over HTTPS and returns the parsed answer records.
18
+ * Perform a DNS query over HTTPS.
20
19
  *
21
- * @param name Domain name to resolve.
22
- * @param type Record type: "A", "AAAA", "HTTPS", or "SVCB".
23
- * @param signal Optional AbortSignal for cancellation.
24
- * @returns Array of raw DNS records from the answer section.
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
- * Sends the DNS wire-format query to the DoH server.
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":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AASvD;;;;;;;;GAQG;AACH,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,OAAO,CAAK;gBAER,MAAM,EAAE,SAAS;IAO7B;;;;;;;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;IAS5G;;OAEG;YACW,SAAS;IASvB;;OAEG;IACH,OAAO,CAAC,OAAO;IAqBf;;OAEG;IACH,OAAO,CAAC,QAAQ;IAmBhB;;OAEG;IACH,OAAO,CAAC,WAAW;IA+EnB;;;;;;OAMG;YACW,iBAAiB;CAmBhC"}
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"}
@@ -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
- /** Cache of bootstrapped DoH server IP → avoid infinite recursion. */
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
- * Sends a DNS query over HTTPS and returns the parsed answer records.
33
+ * Perform a DNS query over HTTPS.
42
34
  *
43
- * @param name Domain name to resolve.
44
- * @param type Record type: "A", "AAAA", "HTTPS", or "SVCB".
45
- * @param signal Optional AbortSignal for cancellation.
46
- * @returns Array of raw DNS records from the answer section.
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
46
  const queryPacket = buildDNSQuery(name, rtype, id);
52
47
  const responseData = await this.sendQuery(queryPacket, signal);
53
- return parseDNSResponse(responseData);
48
+ const records = parseDNSResponse(responseData);
49
+ this.cache.set(name, type, records);
50
+ return records;
54
51
  }
55
52
  /**
56
- * Sends the DNS wire-format query to the DoH server.
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", () => clearTimeout(timer));
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", () => signal.removeEventListener("abort", onAbort));
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
- return cached;
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.set(host, address);
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":"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"}
1
+ {"version":3,"file":"doh-resolver.js","sourceRoot":"","sources":["../../src/dns/doh-resolver.ts"],"names":[],"mappings":"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"}