@helia/ipns 6.0.1-a64e5de → 6.0.1-adc5589
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/dist/index.min.js +4 -4
- package/dist/src/dnslink.d.ts +5 -0
- package/dist/src/dnslink.d.ts.map +1 -0
- package/dist/src/dnslink.js +123 -0
- package/dist/src/dnslink.js.map +1 -0
- package/dist/src/index.d.ts +24 -22
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +24 -9
- package/dist/src/index.js.map +1 -1
- package/package.json +3 -6
- package/src/dnslink.ts +141 -0
- package/src/index.ts +50 -36
- package/dist/src/dns-resolvers/default.d.ts +0 -3
- package/dist/src/dns-resolvers/default.d.ts.map +0 -1
- package/dist/src/dns-resolvers/default.js +0 -8
- package/dist/src/dns-resolvers/default.js.map +0 -1
- package/dist/src/dns-resolvers/dns-json-over-https.d.ts +0 -18
- package/dist/src/dns-resolvers/dns-json-over-https.d.ts.map +0 -1
- package/dist/src/dns-resolvers/dns-json-over-https.js +0 -72
- package/dist/src/dns-resolvers/dns-json-over-https.js.map +0 -1
- package/dist/src/dns-resolvers/dns-over-https.d.ts +0 -16
- package/dist/src/dns-resolvers/dns-over-https.d.ts.map +0 -1
- package/dist/src/dns-resolvers/dns-over-https.js +0 -123
- package/dist/src/dns-resolvers/dns-over-https.js.map +0 -1
- package/dist/src/dns-resolvers/index.d.ts +0 -3
- package/dist/src/dns-resolvers/index.d.ts.map +0 -1
- package/dist/src/dns-resolvers/index.js +0 -3
- package/dist/src/dns-resolvers/index.js.map +0 -1
- package/dist/src/dns-resolvers/resolver.browser.d.ts +0 -4
- package/dist/src/dns-resolvers/resolver.browser.d.ts.map +0 -1
- package/dist/src/dns-resolvers/resolver.browser.js +0 -39
- package/dist/src/dns-resolvers/resolver.browser.js.map +0 -1
- package/dist/src/dns-resolvers/resolver.d.ts +0 -4
- package/dist/src/dns-resolvers/resolver.d.ts.map +0 -1
- package/dist/src/dns-resolvers/resolver.js +0 -21
- package/dist/src/dns-resolvers/resolver.js.map +0 -1
- package/dist/src/utils/dns.d.ts +0 -35
- package/dist/src/utils/dns.d.ts.map +0 -1
- package/dist/src/utils/dns.js +0 -80
- package/dist/src/utils/dns.js.map +0 -1
- package/dist/src/utils/tlru.d.ts +0 -15
- package/dist/src/utils/tlru.d.ts.map +0 -1
- package/dist/src/utils/tlru.js +0 -40
- package/dist/src/utils/tlru.js.map +0 -1
- package/src/dns-resolvers/default.ts +0 -9
- package/src/dns-resolvers/dns-json-over-https.ts +0 -90
- package/src/dns-resolvers/dns-over-https.ts +0 -146
- package/src/dns-resolvers/index.ts +0 -2
- package/src/dns-resolvers/resolver.browser.ts +0 -50
- package/src/dns-resolvers/resolver.ts +0 -25
- package/src/utils/dns.ts +0 -127
- package/src/utils/tlru.ts +0 -52
package/src/index.ts
CHANGED
|
@@ -235,13 +235,13 @@ import { ipnsSelector } from 'ipns/selector'
|
|
|
235
235
|
import { ipnsValidator } from 'ipns/validator'
|
|
236
236
|
import { CID } from 'multiformats/cid'
|
|
237
237
|
import { CustomProgressEvent } from 'progress-events'
|
|
238
|
-
import {
|
|
238
|
+
import { resolveDNSLink } from './dnslink.js'
|
|
239
239
|
import { helia } from './routing/helia.js'
|
|
240
240
|
import { localStore, type LocalStore } from './routing/local-store.js'
|
|
241
241
|
import type { IPNSRouting, IPNSRoutingEvents } from './routing/index.js'
|
|
242
|
-
import type { DNSResponse } from './utils/dns.js'
|
|
243
242
|
import type { Routing } from '@helia/interface'
|
|
244
|
-
import type { AbortOptions, PeerId } from '@libp2p/interface'
|
|
243
|
+
import type { AbortOptions, ComponentLogger, Logger, PeerId } from '@libp2p/interface'
|
|
244
|
+
import type { DNS, ResolveDnsProgressEvents } from '@multiformats/dns'
|
|
245
245
|
import type { Datastore } from 'interface-datastore'
|
|
246
246
|
import type { IPNSRecord } from 'ipns'
|
|
247
247
|
import type { ProgressEvent, ProgressOptions } from 'progress-events'
|
|
@@ -253,6 +253,7 @@ const HOUR = 60 * MINUTE
|
|
|
253
253
|
|
|
254
254
|
const DEFAULT_LIFETIME_MS = 24 * HOUR
|
|
255
255
|
const DEFAULT_REPUBLISH_INTERVAL_MS = 23 * HOUR
|
|
256
|
+
const DEFAULT_DNSLINK_RETRIES = 3
|
|
256
257
|
|
|
257
258
|
export type PublishProgressEvents =
|
|
258
259
|
ProgressEvent<'ipns:publish:start'> |
|
|
@@ -269,10 +270,10 @@ export type RepublishProgressEvents =
|
|
|
269
270
|
ProgressEvent<'ipns:republish:success', IPNSRecord> |
|
|
270
271
|
ProgressEvent<'ipns:republish:error', { record: IPNSRecord, err: Error }>
|
|
271
272
|
|
|
272
|
-
export type
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
273
|
+
export type ResolveDNSLinkProgressEvents =
|
|
274
|
+
ResolveProgressEvents |
|
|
275
|
+
IPNSRoutingEvents |
|
|
276
|
+
ResolveDnsProgressEvents
|
|
276
277
|
|
|
277
278
|
export interface PublishOptions extends AbortOptions, ProgressOptions<PublishProgressEvents | IPNSRoutingEvents> {
|
|
278
279
|
/**
|
|
@@ -299,35 +300,35 @@ export interface ResolveOptions extends AbortOptions, ProgressOptions<ResolvePro
|
|
|
299
300
|
offline?: boolean
|
|
300
301
|
}
|
|
301
302
|
|
|
302
|
-
export interface
|
|
303
|
+
export interface ResolveDNSLinkOptions extends AbortOptions, ProgressOptions<ResolveDNSLinkProgressEvents> {
|
|
303
304
|
/**
|
|
304
|
-
* Do not
|
|
305
|
+
* Do not query the network for the IPNS record
|
|
306
|
+
*
|
|
307
|
+
* @default false
|
|
305
308
|
*/
|
|
306
|
-
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
export interface DNSResolver {
|
|
310
|
-
(domain: string, options?: ResolveDnsLinkOptions): Promise<string>
|
|
311
|
-
}
|
|
309
|
+
offline?: boolean
|
|
312
310
|
|
|
313
|
-
export interface ResolveDNSOptions extends AbortOptions, ProgressOptions<ResolveProgressEvents | IPNSRoutingEvents | ResolveDnsLinkProgressEvents> {
|
|
314
311
|
/**
|
|
315
|
-
* Do not
|
|
312
|
+
* Do not use cached DNS entries
|
|
313
|
+
*
|
|
314
|
+
* @default false
|
|
316
315
|
*/
|
|
317
|
-
|
|
316
|
+
nocache?: boolean
|
|
318
317
|
|
|
319
318
|
/**
|
|
320
|
-
*
|
|
319
|
+
* When resolving DNSLink records that resolve to other DNSLink records, limit
|
|
320
|
+
* how many times we will recursively resolve them.
|
|
321
|
+
*
|
|
322
|
+
* @default 32
|
|
321
323
|
*/
|
|
322
|
-
|
|
324
|
+
maxRecursiveDepth?: number
|
|
323
325
|
|
|
324
326
|
/**
|
|
325
|
-
*
|
|
326
|
-
* fall back to the `dns` module and browsers fall back to querying google/cloudflare DoH
|
|
327
|
+
* Retry in case of transport error
|
|
327
328
|
*
|
|
328
|
-
* @
|
|
329
|
+
* @default 3
|
|
329
330
|
*/
|
|
330
|
-
|
|
331
|
+
retries?: number
|
|
331
332
|
}
|
|
332
333
|
|
|
333
334
|
export interface RepublishOptions extends AbortOptions, ProgressOptions<RepublishProgressEvents | IPNSRoutingEvents> {
|
|
@@ -359,7 +360,7 @@ export interface IPNS {
|
|
|
359
360
|
/**
|
|
360
361
|
* Resolve a CID from a dns-link style IPNS record
|
|
361
362
|
*/
|
|
362
|
-
|
|
363
|
+
resolveDNSLink(domain: string, options?: ResolveDNSLinkOptions): Promise<ResolveResult>
|
|
363
364
|
|
|
364
365
|
/**
|
|
365
366
|
* Periodically republish all IPNS records found in the datastore
|
|
@@ -372,21 +373,25 @@ export type { IPNSRouting } from './routing/index.js'
|
|
|
372
373
|
export interface IPNSComponents {
|
|
373
374
|
datastore: Datastore
|
|
374
375
|
routing: Routing
|
|
376
|
+
dns: DNS
|
|
377
|
+
logger: ComponentLogger
|
|
375
378
|
}
|
|
376
379
|
|
|
377
380
|
class DefaultIPNS implements IPNS {
|
|
378
381
|
private readonly routers: IPNSRouting[]
|
|
379
382
|
private readonly localStore: LocalStore
|
|
380
383
|
private timeout?: ReturnType<typeof setTimeout>
|
|
381
|
-
private readonly
|
|
384
|
+
private readonly dns: DNS
|
|
385
|
+
private readonly log: Logger
|
|
382
386
|
|
|
383
|
-
constructor (components: IPNSComponents, routers: IPNSRouting[] = []
|
|
387
|
+
constructor (components: IPNSComponents, routers: IPNSRouting[] = []) {
|
|
384
388
|
this.routers = [
|
|
385
389
|
helia(components.routing),
|
|
386
390
|
...routers
|
|
387
391
|
]
|
|
388
392
|
this.localStore = localStore(components.datastore)
|
|
389
|
-
this.
|
|
393
|
+
this.dns = components.dns
|
|
394
|
+
this.log = components.logger.forComponent('helia:ipns')
|
|
390
395
|
}
|
|
391
396
|
|
|
392
397
|
async publish (key: PeerId, value: CID | PeerId | string, options: PublishOptions = {}): Promise<IPNSRecord> {
|
|
@@ -426,12 +431,22 @@ class DefaultIPNS implements IPNS {
|
|
|
426
431
|
return this.#resolve(record.value, options)
|
|
427
432
|
}
|
|
428
433
|
|
|
429
|
-
async
|
|
430
|
-
|
|
434
|
+
async resolveDNSLink (domain: string, options: ResolveDNSLinkOptions = {}): Promise<ResolveResult> {
|
|
435
|
+
let dnslink = ''
|
|
436
|
+
const retries = options.retries ?? DEFAULT_DNSLINK_RETRIES
|
|
437
|
+
|
|
438
|
+
for (let i = 0; i < retries; i++) {
|
|
439
|
+
try {
|
|
440
|
+
dnslink = await resolveDNSLink(domain, this.dns, this.log, options)
|
|
441
|
+
break
|
|
442
|
+
} catch (err) {
|
|
443
|
+
if (i === (retries - 1)) {
|
|
444
|
+
throw err
|
|
445
|
+
}
|
|
431
446
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
447
|
+
log.error('error resolving %s attempt %d of %d', domain, i + 1, retries, err)
|
|
448
|
+
}
|
|
449
|
+
}
|
|
435
450
|
|
|
436
451
|
return this.#resolve(dnslink, options)
|
|
437
452
|
}
|
|
@@ -564,11 +579,10 @@ class DefaultIPNS implements IPNS {
|
|
|
564
579
|
|
|
565
580
|
export interface IPNSOptions {
|
|
566
581
|
routers?: IPNSRouting[]
|
|
567
|
-
resolvers?: DNSResolver[]
|
|
568
582
|
}
|
|
569
583
|
|
|
570
|
-
export function ipns (components: IPNSComponents, { routers = []
|
|
571
|
-
return new DefaultIPNS(components, routers
|
|
584
|
+
export function ipns (components: IPNSComponents, { routers = [] }: IPNSOptions = {}): IPNS {
|
|
585
|
+
return new DefaultIPNS(components, routers)
|
|
572
586
|
}
|
|
573
587
|
|
|
574
588
|
export { ipnsValidator, type IPNSRoutingEvents }
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../src/dns-resolvers/default.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAyB,MAAM,aAAa,CAAA;AAErE,wBAAgB,eAAe,IAAK,WAAW,CAI9C"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { MAX_RECURSIVE_DEPTH, recursiveResolveDnslink } from '../utils/dns.js';
|
|
2
|
-
import resolve from './resolver.js';
|
|
3
|
-
export function defaultResolver() {
|
|
4
|
-
return async (domain, options = {}) => {
|
|
5
|
-
return recursiveResolveDnslink(domain, MAX_RECURSIVE_DEPTH, resolve, options);
|
|
6
|
-
};
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=default.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"default.js","sourceRoot":"","sources":["../../../src/dns-resolvers/default.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAC9E,OAAO,OAAO,MAAM,eAAe,CAAA;AAGnC,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,EAAE,MAAc,EAAE,UAAiC,EAAE,EAAmB,EAAE;QACpF,OAAO,uBAAuB,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC/E,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { DNSResolver } from '../index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Uses the RFC 8427 'application/dns-json' content-type to resolve DNS queries.
|
|
4
|
-
*
|
|
5
|
-
* Supports and server that uses the same schema as Google's DNS over HTTPS
|
|
6
|
-
* resolver.
|
|
7
|
-
*
|
|
8
|
-
* This resolver needs fewer dependencies than the regular DNS-over-HTTPS
|
|
9
|
-
* resolver so can result in a smaller bundle size and consequently is preferred
|
|
10
|
-
* for browser use.
|
|
11
|
-
*
|
|
12
|
-
* @see https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-json/
|
|
13
|
-
* @see https://github.com/curl/curl/wiki/DNS-over-HTTPS#publicly-available-servers
|
|
14
|
-
* @see https://dnsprivacy.org/public_resolvers/
|
|
15
|
-
* @see https://datatracker.ietf.org/doc/html/rfc8427
|
|
16
|
-
*/
|
|
17
|
-
export declare function dnsJsonOverHttps(url: string): DNSResolver;
|
|
18
|
-
//# sourceMappingURL=dns-json-over-https.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dns-json-over-https.d.ts","sourceRoot":"","sources":["../../../src/dns-resolvers/dns-json-over-https.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAyB,WAAW,EAAE,MAAM,aAAa,CAAA;AAOrE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CA6D1D"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/* eslint-env browser */
|
|
2
|
-
import PQueue from 'p-queue';
|
|
3
|
-
import { CustomProgressEvent } from 'progress-events';
|
|
4
|
-
import { MAX_RECURSIVE_DEPTH, recursiveResolveDnslink, ipfsPathAndAnswer } from '../utils/dns.js';
|
|
5
|
-
import { TLRU } from '../utils/tlru.js';
|
|
6
|
-
// Avoid sending multiple queries for the same hostname by caching results
|
|
7
|
-
const cache = new TLRU(1000);
|
|
8
|
-
// This TTL will be used if the remote service does not return one
|
|
9
|
-
const ttl = 60 * 1000;
|
|
10
|
-
/**
|
|
11
|
-
* Uses the RFC 8427 'application/dns-json' content-type to resolve DNS queries.
|
|
12
|
-
*
|
|
13
|
-
* Supports and server that uses the same schema as Google's DNS over HTTPS
|
|
14
|
-
* resolver.
|
|
15
|
-
*
|
|
16
|
-
* This resolver needs fewer dependencies than the regular DNS-over-HTTPS
|
|
17
|
-
* resolver so can result in a smaller bundle size and consequently is preferred
|
|
18
|
-
* for browser use.
|
|
19
|
-
*
|
|
20
|
-
* @see https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-json/
|
|
21
|
-
* @see https://github.com/curl/curl/wiki/DNS-over-HTTPS#publicly-available-servers
|
|
22
|
-
* @see https://dnsprivacy.org/public_resolvers/
|
|
23
|
-
* @see https://datatracker.ietf.org/doc/html/rfc8427
|
|
24
|
-
*/
|
|
25
|
-
export function dnsJsonOverHttps(url) {
|
|
26
|
-
// browsers limit concurrent connections per host,
|
|
27
|
-
// we don't want preload calls to exhaust the limit (~6)
|
|
28
|
-
const httpQueue = new PQueue({ concurrency: 4 });
|
|
29
|
-
const resolve = async (fqdn, options = {}) => {
|
|
30
|
-
const searchParams = new URLSearchParams();
|
|
31
|
-
searchParams.set('name', fqdn);
|
|
32
|
-
searchParams.set('type', 'TXT');
|
|
33
|
-
const query = searchParams.toString();
|
|
34
|
-
// try cache first
|
|
35
|
-
if (options.nocache !== true && cache.has(query)) {
|
|
36
|
-
const response = cache.get(query);
|
|
37
|
-
if (response != null) {
|
|
38
|
-
options.onProgress?.(new CustomProgressEvent('dnslink:cache', { detail: response }));
|
|
39
|
-
return response;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
options.onProgress?.(new CustomProgressEvent('dnslink:query', { detail: fqdn }));
|
|
43
|
-
// query DNS-JSON over HTTPS server
|
|
44
|
-
const response = await httpQueue.add(async () => {
|
|
45
|
-
const res = await fetch(`${url}?${searchParams}`, {
|
|
46
|
-
headers: {
|
|
47
|
-
accept: 'application/dns-json'
|
|
48
|
-
},
|
|
49
|
-
signal: options.signal
|
|
50
|
-
});
|
|
51
|
-
if (res.status !== 200) {
|
|
52
|
-
throw new Error(`Unexpected HTTP status: ${res.status} - ${res.statusText}`);
|
|
53
|
-
}
|
|
54
|
-
const query = new URL(res.url).search.slice(1);
|
|
55
|
-
const json = await res.json();
|
|
56
|
-
options.onProgress?.(new CustomProgressEvent('dnslink:answer', { detail: json }));
|
|
57
|
-
const { ipfsPath, answer } = ipfsPathAndAnswer(fqdn, json);
|
|
58
|
-
cache.set(query, ipfsPath, answer.TTL ?? ttl);
|
|
59
|
-
return ipfsPath;
|
|
60
|
-
}, {
|
|
61
|
-
signal: options.signal
|
|
62
|
-
});
|
|
63
|
-
if (response == null) {
|
|
64
|
-
throw new Error('No DNS response received');
|
|
65
|
-
}
|
|
66
|
-
return response;
|
|
67
|
-
};
|
|
68
|
-
return async (domain, options = {}) => {
|
|
69
|
-
return recursiveResolveDnslink(domain, MAX_RECURSIVE_DEPTH, resolve, options);
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=dns-json-over-https.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dns-json-over-https.js","sourceRoot":"","sources":["../../../src/dns-resolvers/dns-json-over-https.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { DNSResolver } from '../index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Uses the RFC 1035 'application/dns-message' content-type to resolve DNS
|
|
4
|
-
* queries.
|
|
5
|
-
*
|
|
6
|
-
* This resolver needs more dependencies than the non-standard
|
|
7
|
-
* DNS-JSON-over-HTTPS resolver so can result in a larger bundle size and
|
|
8
|
-
* consequently is not preferred for browser use.
|
|
9
|
-
*
|
|
10
|
-
* @see https://datatracker.ietf.org/doc/html/rfc1035
|
|
11
|
-
* @see https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-wireformat/
|
|
12
|
-
* @see https://github.com/curl/curl/wiki/DNS-over-HTTPS#publicly-available-servers
|
|
13
|
-
* @see https://dnsprivacy.org/public_resolvers/
|
|
14
|
-
*/
|
|
15
|
-
export declare function dnsOverHttps(url: string): DNSResolver;
|
|
16
|
-
//# sourceMappingURL=dns-over-https.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dns-over-https.d.ts","sourceRoot":"","sources":["../../../src/dns-resolvers/dns-over-https.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAyB,WAAW,EAAE,MAAM,aAAa,CAAA;AAOrE;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CAwEtD"}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
/* eslint-env browser */
|
|
2
|
-
import { Buffer } from 'buffer';
|
|
3
|
-
import dnsPacket, {} from 'dns-packet';
|
|
4
|
-
import { base64url } from 'multiformats/bases/base64';
|
|
5
|
-
import PQueue from 'p-queue';
|
|
6
|
-
import { CustomProgressEvent } from 'progress-events';
|
|
7
|
-
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
8
|
-
import { MAX_RECURSIVE_DEPTH, recursiveResolveDnslink, ipfsPathAndAnswer } from '../utils/dns.js';
|
|
9
|
-
import { TLRU } from '../utils/tlru.js';
|
|
10
|
-
// Avoid sending multiple queries for the same hostname by caching results
|
|
11
|
-
const cache = new TLRU(1000);
|
|
12
|
-
// This TTL will be used if the remote service does not return one
|
|
13
|
-
const ttl = 60 * 1000;
|
|
14
|
-
/**
|
|
15
|
-
* Uses the RFC 1035 'application/dns-message' content-type to resolve DNS
|
|
16
|
-
* queries.
|
|
17
|
-
*
|
|
18
|
-
* This resolver needs more dependencies than the non-standard
|
|
19
|
-
* DNS-JSON-over-HTTPS resolver so can result in a larger bundle size and
|
|
20
|
-
* consequently is not preferred for browser use.
|
|
21
|
-
*
|
|
22
|
-
* @see https://datatracker.ietf.org/doc/html/rfc1035
|
|
23
|
-
* @see https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-wireformat/
|
|
24
|
-
* @see https://github.com/curl/curl/wiki/DNS-over-HTTPS#publicly-available-servers
|
|
25
|
-
* @see https://dnsprivacy.org/public_resolvers/
|
|
26
|
-
*/
|
|
27
|
-
export function dnsOverHttps(url) {
|
|
28
|
-
// browsers limit concurrent connections per host,
|
|
29
|
-
// we don't want preload calls to exhaust the limit (~6)
|
|
30
|
-
const httpQueue = new PQueue({ concurrency: 4 });
|
|
31
|
-
const resolve = async (fqdn, options = {}) => {
|
|
32
|
-
const dnsQuery = dnsPacket.encode({
|
|
33
|
-
type: 'query',
|
|
34
|
-
id: 0,
|
|
35
|
-
flags: dnsPacket.RECURSION_DESIRED,
|
|
36
|
-
questions: [{
|
|
37
|
-
type: 'TXT',
|
|
38
|
-
name: fqdn
|
|
39
|
-
}]
|
|
40
|
-
});
|
|
41
|
-
const searchParams = new URLSearchParams();
|
|
42
|
-
searchParams.set('dns', base64url.encode(dnsQuery).substring(1));
|
|
43
|
-
const query = searchParams.toString();
|
|
44
|
-
// try cache first
|
|
45
|
-
if (options.nocache !== true && cache.has(query)) {
|
|
46
|
-
const response = cache.get(query);
|
|
47
|
-
if (response != null) {
|
|
48
|
-
options.onProgress?.(new CustomProgressEvent('dnslink:cache', { detail: response }));
|
|
49
|
-
return response;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
options.onProgress?.(new CustomProgressEvent('dnslink:query', { detail: fqdn }));
|
|
53
|
-
// query DNS over HTTPS server
|
|
54
|
-
const response = await httpQueue.add(async () => {
|
|
55
|
-
const res = await fetch(`${url}?${searchParams}`, {
|
|
56
|
-
headers: {
|
|
57
|
-
accept: 'application/dns-message'
|
|
58
|
-
},
|
|
59
|
-
signal: options.signal
|
|
60
|
-
});
|
|
61
|
-
if (res.status !== 200) {
|
|
62
|
-
throw new Error(`Unexpected HTTP status: ${res.status} - ${res.statusText}`);
|
|
63
|
-
}
|
|
64
|
-
const query = new URL(res.url).search.slice(1);
|
|
65
|
-
const buf = await res.arrayBuffer();
|
|
66
|
-
// map to expected response format
|
|
67
|
-
const json = toDNSResponse(dnsPacket.decode(Buffer.from(buf)));
|
|
68
|
-
options.onProgress?.(new CustomProgressEvent('dnslink:answer', { detail: json }));
|
|
69
|
-
const { ipfsPath, answer } = ipfsPathAndAnswer(fqdn, json);
|
|
70
|
-
cache.set(query, ipfsPath, answer.TTL ?? ttl);
|
|
71
|
-
return ipfsPath;
|
|
72
|
-
}, {
|
|
73
|
-
signal: options.signal
|
|
74
|
-
});
|
|
75
|
-
if (response == null) {
|
|
76
|
-
throw new Error('No DNS response received');
|
|
77
|
-
}
|
|
78
|
-
return response;
|
|
79
|
-
};
|
|
80
|
-
return async (domain, options = {}) => {
|
|
81
|
-
return recursiveResolveDnslink(domain, MAX_RECURSIVE_DEPTH, resolve, options);
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
function toDNSResponse(response) {
|
|
85
|
-
const txtType = 16;
|
|
86
|
-
return {
|
|
87
|
-
Status: 0,
|
|
88
|
-
TC: response.flag_tc ?? false,
|
|
89
|
-
RD: response.flag_rd ?? false,
|
|
90
|
-
RA: response.flag_ra ?? false,
|
|
91
|
-
AD: response.flag_ad ?? false,
|
|
92
|
-
CD: response.flag_cd ?? false,
|
|
93
|
-
Question: response.questions?.map(q => ({
|
|
94
|
-
name: q.name,
|
|
95
|
-
type: txtType
|
|
96
|
-
})) ?? [],
|
|
97
|
-
Answer: response.answers?.map(a => {
|
|
98
|
-
if (a.type !== 'TXT' || a.data.length < 1) {
|
|
99
|
-
return {
|
|
100
|
-
name: a.name,
|
|
101
|
-
type: txtType,
|
|
102
|
-
TTL: 0,
|
|
103
|
-
data: 'invalid'
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
if (!Buffer.isBuffer(a.data[0])) {
|
|
107
|
-
return {
|
|
108
|
-
name: a.name,
|
|
109
|
-
type: txtType,
|
|
110
|
-
TTL: a.ttl ?? ttl,
|
|
111
|
-
data: String(a.data[0])
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
return {
|
|
115
|
-
name: a.name,
|
|
116
|
-
type: txtType,
|
|
117
|
-
TTL: a.ttl ?? ttl,
|
|
118
|
-
data: uint8ArrayToString(a.data[0])
|
|
119
|
-
};
|
|
120
|
-
}) ?? []
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=dns-over-https.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dns-over-https.js","sourceRoot":"","sources":["../../../src/dns-resolvers/dns-over-https.ts"],"names":[],"mappings":"AAAA,wBAAwB;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,SAAS,EAAE,EAAsB,MAAM,YAAY,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAoB,mBAAmB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnH,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAGvC,0EAA0E;AAC1E,MAAM,KAAK,GAAG,IAAI,IAAI,CAAS,IAAI,CAAC,CAAA;AACpC,kEAAkE;AAClE,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAA;AAErB;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAE,GAAW;IACvC,kDAAkD;IAClD,wDAAwD;IACxD,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAA;IAEhD,MAAM,OAAO,GAAG,KAAK,EAAE,IAAY,EAAE,UAAiC,EAAE,EAAmB,EAAE;QAC3F,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC;YAChC,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,CAAC;YACL,KAAK,EAAE,SAAS,CAAC,iBAAiB;YAClC,SAAS,EAAE,CAAC;oBACV,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,IAAI;iBACX,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAA;QAC1C,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;QAEhE,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAA;QAErC,kBAAkB;QAClB,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAEjC,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACrB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAS,eAAe,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;gBAC5F,OAAO,QAAQ,CAAA;YACjB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAS,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAExF,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YAC9C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,IAAI,YAAY,EAAE,EAAE;gBAChD,OAAO,EAAE;oBACP,MAAM,EAAE,yBAAyB;iBAClC;gBACD,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAA;YAEF,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;YAC9E,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC9C,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAA;YACnC,kCAAkC;YAClC,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAE9D,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAc,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YAE9F,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAE1D,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,CAAA;YAE7C,OAAO,QAAQ,CAAA;QACjB,CAAC,EAAE;YACD,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAA;QAEF,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAC7C,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAA;IAED,OAAO,KAAK,EAAE,MAAc,EAAE,UAAiC,EAAE,EAAE,EAAE;QACnE,OAAO,uBAAuB,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC/E,CAAC,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAE,QAAuB;IAC7C,MAAM,OAAO,GAAG,EAAE,CAAA;IAElB,OAAO;QACL,MAAM,EAAE,CAAC;QACT,EAAE,EAAE,QAAQ,CAAC,OAAO,IAAI,KAAK;QAC7B,EAAE,EAAE,QAAQ,CAAC,OAAO,IAAI,KAAK;QAC7B,EAAE,EAAE,QAAQ,CAAC,OAAO,IAAI,KAAK;QAC7B,EAAE,EAAE,QAAQ,CAAC,OAAO,IAAI,KAAK;QAC7B,EAAE,EAAE,QAAQ,CAAC,OAAO,IAAI,KAAK;QAC7B,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,OAAO;SACd,CAAC,CAAC,IAAI,EAAE;QACT,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE;YAChC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1C,OAAO;oBACL,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,OAAO;oBACb,GAAG,EAAE,CAAC;oBACN,IAAI,EAAE,SAAS;iBAChB,CAAA;YACH,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,OAAO;oBACL,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,OAAO;oBACb,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG;oBACjB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACxB,CAAA;YACH,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,OAAO;gBACb,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG;gBACjB,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACpC,CAAA;QACH,CAAC,CAAC,IAAI,EAAE;KACT,CAAA;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dns-resolvers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dns-resolvers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.browser.d.ts","sourceRoot":"","sources":["../../../src/dns-resolvers/resolver.browser.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAW9C,QAAA,MAAM,OAAO,EAAE,WA+Bd,CAAA;AAED,eAAe,OAAO,CAAA"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import Resolver from 'dns-over-http-resolver';
|
|
2
|
-
import PQueue from 'p-queue';
|
|
3
|
-
import { CustomProgressEvent } from 'progress-events';
|
|
4
|
-
import { resolveFn } from '../utils/dns.js';
|
|
5
|
-
import { TLRU } from '../utils/tlru.js';
|
|
6
|
-
const cache = new TLRU(1000);
|
|
7
|
-
// We know browsers themselves cache DNS records for at least 1 minute,
|
|
8
|
-
// which acts a provisional default ttl: https://stackoverflow.com/a/36917902/11518426
|
|
9
|
-
const ttl = 60 * 1000;
|
|
10
|
-
// browsers limit concurrent connections per host,
|
|
11
|
-
// we don't want to exhaust the limit (~6)
|
|
12
|
-
const httpQueue = new PQueue({ concurrency: 4 });
|
|
13
|
-
const resolve = async function resolve(domain, options = {}) {
|
|
14
|
-
const resolver = new Resolver({ maxCache: 0 });
|
|
15
|
-
// try cache first
|
|
16
|
-
if (options.nocache !== true && cache.has(domain)) {
|
|
17
|
-
const response = cache.get(domain);
|
|
18
|
-
if (response != null) {
|
|
19
|
-
options?.onProgress?.(new CustomProgressEvent('dnslink:cache', { detail: response }));
|
|
20
|
-
return response;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
options.onProgress?.(new CustomProgressEvent('dnslink:query', { detail: domain }));
|
|
24
|
-
// Add the query to the queue
|
|
25
|
-
const response = await httpQueue.add(async () => {
|
|
26
|
-
const dnslinkRecord = await resolveFn(resolver, domain);
|
|
27
|
-
options.onProgress?.(new CustomProgressEvent('dnslink:answer', { detail: dnslinkRecord }));
|
|
28
|
-
cache.set(domain, dnslinkRecord, ttl);
|
|
29
|
-
return dnslinkRecord;
|
|
30
|
-
}, {
|
|
31
|
-
signal: options?.signal
|
|
32
|
-
});
|
|
33
|
-
if (response == null) {
|
|
34
|
-
throw new Error('No DNS response received');
|
|
35
|
-
}
|
|
36
|
-
return response;
|
|
37
|
-
};
|
|
38
|
-
export default resolve;
|
|
39
|
-
//# sourceMappingURL=resolver.browser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.browser.js","sourceRoot":"","sources":["../../../src/dns-resolvers/resolver.browser.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,wBAAwB,CAAA;AAC7C,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAoB,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAGvC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAS,IAAI,CAAC,CAAA;AACpC,uEAAuE;AACvE,sFAAsF;AACtF,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAA;AAErB,kDAAkD;AAClD,0CAA0C;AAC1C,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAA;AAEhD,MAAM,OAAO,GAAgB,KAAK,UAAU,OAAO,CAAE,MAAM,EAAE,OAAO,GAAG,EAAE;IACvE,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;IAC9C,kBAAkB;IAClB,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAElC,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAS,eAAe,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;YAC7F,OAAO,QAAQ,CAAA;QACjB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAS,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;IAE1F,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAEvD,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAc,gBAAgB,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAAA;QACvG,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,CAAA;QAErC,OAAO,aAAa,CAAA;IACtB,CAAC,EAAE;QACD,MAAM,EAAE,OAAO,EAAE,MAAM;KACxB,CAAC,CAAA;IAEF,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAC7C,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,eAAe,OAAO,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/dns-resolvers/resolver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,QAAA,MAAM,OAAO,EAAE,WAiBd,CAAA;AAED,eAAe,OAAO,CAAA"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { Resolver } from 'dns/promises';
|
|
2
|
-
import { CustomProgressEvent } from 'progress-events';
|
|
3
|
-
import { resolveFn } from '../utils/dns.js';
|
|
4
|
-
const resolve = async function resolve(domain, options = {}) {
|
|
5
|
-
const resolver = new Resolver();
|
|
6
|
-
const listener = () => {
|
|
7
|
-
resolver.cancel();
|
|
8
|
-
};
|
|
9
|
-
options.signal?.addEventListener('abort', listener);
|
|
10
|
-
try {
|
|
11
|
-
options.onProgress?.(new CustomProgressEvent('dnslink:query', { detail: domain }));
|
|
12
|
-
const dnslinkRecord = await resolveFn(resolver, domain);
|
|
13
|
-
options.onProgress?.(new CustomProgressEvent('dnslink:answer', { detail: dnslinkRecord }));
|
|
14
|
-
return dnslinkRecord;
|
|
15
|
-
}
|
|
16
|
-
finally {
|
|
17
|
-
options.signal?.removeEventListener('abort', listener);
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
export default resolve;
|
|
21
|
-
//# sourceMappingURL=resolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/dns-resolvers/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAoB,MAAM,iBAAiB,CAAA;AAG7D,MAAM,OAAO,GAAgB,KAAK,UAAU,OAAO,CAAE,MAAM,EAAE,OAAO,GAAG,EAAE;IACvE,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAA;IAC/B,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,QAAQ,CAAC,MAAM,EAAE,CAAA;IACnB,CAAC,CAAA;IAED,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAEnD,IAAI,CAAC;QACH,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAS,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;QAC1F,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAEvD,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAc,gBAAgB,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAAA;QACvG,OAAO,aAAa,CAAA;IACtB,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IACxD,CAAC;AACH,CAAC,CAAA;AAED,eAAe,OAAO,CAAA"}
|
package/dist/src/utils/dns.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { DNSResolver, ResolveDnsLinkOptions } from '../index.js';
|
|
2
|
-
export interface Question {
|
|
3
|
-
name: string;
|
|
4
|
-
type: number;
|
|
5
|
-
}
|
|
6
|
-
export interface Answer {
|
|
7
|
-
name: string;
|
|
8
|
-
type: number;
|
|
9
|
-
TTL: number;
|
|
10
|
-
data: string;
|
|
11
|
-
}
|
|
12
|
-
export interface DNSResponse {
|
|
13
|
-
Status: number;
|
|
14
|
-
TC: boolean;
|
|
15
|
-
RD: boolean;
|
|
16
|
-
RA: boolean;
|
|
17
|
-
AD: boolean;
|
|
18
|
-
CD: boolean;
|
|
19
|
-
Question: Question[];
|
|
20
|
-
Answer?: Answer[];
|
|
21
|
-
}
|
|
22
|
-
export declare const ipfsPathForAnswer: (answer: Answer) => string;
|
|
23
|
-
export declare const ipfsPathAndAnswer: (domain: string, response: DNSResponse) => {
|
|
24
|
-
ipfsPath: string;
|
|
25
|
-
answer: Answer;
|
|
26
|
-
};
|
|
27
|
-
export declare const findDNSLinkAnswer: (domain: string, response: DNSResponse) => Answer;
|
|
28
|
-
export declare const MAX_RECURSIVE_DEPTH = 32;
|
|
29
|
-
export declare const recursiveResolveDnslink: (domain: string, depth: number, resolve: DNSResolver, options?: ResolveDnsLinkOptions) => Promise<string>;
|
|
30
|
-
interface DnsResolver {
|
|
31
|
-
resolveTxt(domain: string): Promise<string[][]>;
|
|
32
|
-
}
|
|
33
|
-
export declare const resolveFn: (resolver: DnsResolver, domain: string) => Promise<string>;
|
|
34
|
-
export {};
|
|
35
|
-
//# sourceMappingURL=dns.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dns.d.ts","sourceRoot":"","sources":["../../../src/utils/dns.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAErE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,EAAE,EAAE,OAAO,CAAA;IACX,EAAE,EAAE,OAAO,CAAA;IACX,EAAE,EAAE,OAAO,CAAA;IACX,EAAE,EAAE,OAAO,CAAA;IACX,EAAE,EAAE,OAAO,CAAA;IACX,QAAQ,EAAE,QAAQ,EAAE,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,eAAO,MAAM,iBAAiB,WAAY,MAAM,KAAG,MAYlD,CAAA;AAED,eAAO,MAAM,iBAAiB,WAAY,MAAM,YAAY,WAAW;cAAe,MAAM;YAAU,MAAM;CAO3G,CAAA;AAED,eAAO,MAAM,iBAAiB,WAAY,MAAM,YAAY,WAAW,KAAG,MAQzE,CAAA;AAED,eAAO,MAAM,mBAAmB,KAAK,CAAA;AAErC,eAAO,MAAM,uBAAuB,WAAkB,MAAM,SAAS,MAAM,WAAW,WAAW,YAAW,qBAAqB,KAAQ,QAAQ,MAAM,CA0CtJ,CAAA;AAED,UAAU,WAAW;IACnB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;CAChD;AAGD,eAAO,MAAM,SAAS,aAAoB,WAAW,UAAU,MAAM,KAAG,QAAQ,MAAM,CAerF,CAAA"}
|