@helia/ipns 2.0.3 → 3.0.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 +110 -0
- package/dist/index.min.js +24 -24
- package/dist/src/dns-resolvers/default.d.ts +3 -0
- package/dist/src/dns-resolvers/default.d.ts.map +1 -0
- package/dist/src/dns-resolvers/default.js +8 -0
- package/dist/src/dns-resolvers/default.js.map +1 -0
- package/dist/src/dns-resolvers/dns-json-over-https.d.ts +18 -0
- package/dist/src/dns-resolvers/dns-json-over-https.d.ts.map +1 -0
- package/dist/src/dns-resolvers/dns-json-over-https.js +72 -0
- package/dist/src/dns-resolvers/dns-json-over-https.js.map +1 -0
- package/dist/src/dns-resolvers/dns-over-https.d.ts +16 -0
- package/dist/src/dns-resolvers/dns-over-https.d.ts.map +1 -0
- package/dist/src/dns-resolvers/dns-over-https.js +123 -0
- package/dist/src/dns-resolvers/dns-over-https.js.map +1 -0
- package/dist/src/dns-resolvers/index.d.ts +3 -0
- package/dist/src/dns-resolvers/index.d.ts.map +1 -0
- package/dist/src/dns-resolvers/index.js +3 -0
- package/dist/src/dns-resolvers/index.js.map +1 -0
- package/dist/src/dns-resolvers/resolver.browser.d.ts +4 -0
- package/dist/src/dns-resolvers/resolver.browser.d.ts.map +1 -0
- package/dist/src/dns-resolvers/resolver.browser.js +39 -0
- package/dist/src/dns-resolvers/resolver.browser.js.map +1 -0
- package/dist/src/dns-resolvers/resolver.d.ts +4 -0
- package/dist/src/dns-resolvers/resolver.d.ts.map +1 -0
- package/dist/src/dns-resolvers/resolver.js +21 -0
- package/dist/src/dns-resolvers/resolver.js.map +1 -0
- package/dist/src/index.d.ts +102 -9
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +82 -12
- package/dist/src/index.js.map +1 -1
- package/dist/src/routing/dht.js.map +1 -1
- package/dist/src/routing/local-store.js.map +1 -1
- package/dist/src/routing/pubsub.js.map +1 -1
- package/dist/src/utils/dns.d.ts +35 -0
- package/dist/src/utils/dns.d.ts.map +1 -0
- package/dist/src/utils/dns.js +79 -0
- package/dist/src/utils/dns.js.map +1 -0
- package/dist/src/utils/tlru.js.map +1 -1
- package/dist/typedoc-urls.json +8 -0
- package/package.json +13 -4
- package/src/dns-resolvers/default.ts +9 -0
- package/src/dns-resolvers/dns-json-over-https.ts +90 -0
- package/src/dns-resolvers/dns-over-https.ts +146 -0
- package/src/dns-resolvers/index.ts +2 -0
- package/src/dns-resolvers/resolver.browser.ts +50 -0
- package/src/dns-resolvers/resolver.ts +25 -0
- package/src/index.ts +121 -13
- package/src/utils/dns.ts +126 -0
- package/dist/src/utils/resolve-dns-link.browser.d.ts +0 -6
- package/dist/src/utils/resolve-dns-link.browser.d.ts.map +0 -1
- package/dist/src/utils/resolve-dns-link.browser.js +0 -46
- package/dist/src/utils/resolve-dns-link.browser.js.map +0 -1
- package/dist/src/utils/resolve-dns-link.d.ts +0 -3
- package/dist/src/utils/resolve-dns-link.d.ts.map +0 -1
- package/dist/src/utils/resolve-dns-link.js +0 -54
- package/dist/src/utils/resolve-dns-link.js.map +0 -1
- package/src/utils/resolve-dns-link.browser.ts +0 -61
- package/src/utils/resolve-dns-link.ts +0 -65
package/dist/src/index.js
CHANGED
|
@@ -5,16 +5,20 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @example
|
|
7
7
|
*
|
|
8
|
+
* With {@link IPNSRouting} routers:
|
|
9
|
+
*
|
|
8
10
|
* ```typescript
|
|
9
11
|
* import { createHelia } from 'helia'
|
|
10
12
|
* import { dht, pubsub } from '@helia/ipns/routing'
|
|
11
13
|
* import { unixfs } from '@helia/unixfs'
|
|
12
14
|
*
|
|
13
15
|
* const helia = await createHelia()
|
|
14
|
-
* const name = ipns(helia,
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
16
|
+
* const name = ipns(helia, {
|
|
17
|
+
* routers: [
|
|
18
|
+
* dht(helia),
|
|
19
|
+
* pubsub(helia)
|
|
20
|
+
* ]
|
|
21
|
+
* })
|
|
18
22
|
*
|
|
19
23
|
* // create a public key to publish as an IPNS name
|
|
20
24
|
* const keyInfo = await helia.libp2p.keychain.createKey('my-key')
|
|
@@ -33,13 +37,76 @@
|
|
|
33
37
|
*
|
|
34
38
|
* @example
|
|
35
39
|
*
|
|
40
|
+
* With default {@link DNSResolver} resolvers:
|
|
41
|
+
*
|
|
42
|
+
* ```typescript
|
|
43
|
+
* import { createHelia } from 'helia'
|
|
44
|
+
* import { dht, pubsub } from '@helia/ipns/routing'
|
|
45
|
+
* import { unixfs } from '@helia/unixfs'
|
|
46
|
+
*
|
|
47
|
+
* const helia = await createHelia()
|
|
48
|
+
* const name = ipns(helia, {
|
|
49
|
+
* resolvers: [
|
|
50
|
+
* dnsOverHttps('https://private-dns-server.me/dns-query'),
|
|
51
|
+
* ]
|
|
52
|
+
* })
|
|
53
|
+
*
|
|
54
|
+
* const cid = name.resolveDns('some-domain-with-dnslink-entry.com')
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
*
|
|
59
|
+
* Calling `resolveDns` with the `@helia/ipns` instance:
|
|
60
|
+
*
|
|
36
61
|
* ```typescript
|
|
37
|
-
* // resolve a CID from a TXT record in a DNS zone file,
|
|
38
|
-
* //
|
|
62
|
+
* // resolve a CID from a TXT record in a DNS zone file, using the default
|
|
63
|
+
* // resolver for the current platform eg:
|
|
64
|
+
* // > dig _dnslink.ipfs.io TXT
|
|
39
65
|
* // ;; ANSWER SECTION:
|
|
40
|
-
* // ipfs.io.
|
|
66
|
+
* // _dnslink.ipfs.io. 60 IN TXT "dnslink=/ipns/website.ipfs.io"
|
|
67
|
+
* // > dig _dnslink.website.ipfs.io TXT
|
|
68
|
+
* // ;; ANSWER SECTION:
|
|
69
|
+
* // _dnslink.website.ipfs.io. 60 IN TXT "dnslink=/ipfs/QmWebsite"
|
|
41
70
|
*
|
|
42
71
|
* const cid = name.resolveDns('ipfs.io')
|
|
72
|
+
*
|
|
73
|
+
* console.info(cid)
|
|
74
|
+
* // QmWebsite
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
*
|
|
79
|
+
* This example uses the Mozilla provided RFC 1035 DNS over HTTPS service. This
|
|
80
|
+
* uses binary DNS records so requires extra dependencies to process the
|
|
81
|
+
* response which can increase browser bundle sizes.
|
|
82
|
+
*
|
|
83
|
+
* If this is a concern, use the DNS-JSON-Over-HTTPS resolver instead.
|
|
84
|
+
*
|
|
85
|
+
* ```typescript
|
|
86
|
+
* // use DNS-Over-HTTPS
|
|
87
|
+
* import { dnsOverHttps } from '@helia/ipns/dns-resolvers'
|
|
88
|
+
*
|
|
89
|
+
* const cid = name.resolveDns('ipfs.io', {
|
|
90
|
+
* resolvers: [
|
|
91
|
+
* dnsOverHttps('https://mozilla.cloudflare-dns.com/dns-query')
|
|
92
|
+
* ]
|
|
93
|
+
* })
|
|
94
|
+
* ```
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
*
|
|
98
|
+
* DNS-JSON-Over-HTTPS resolvers use the RFC 8427 `application/dns-json` and can
|
|
99
|
+
* result in a smaller browser bundle due to the response being plain JSON.
|
|
100
|
+
*
|
|
101
|
+
* ```typescript
|
|
102
|
+
* // use DNS-JSON-Over-HTTPS
|
|
103
|
+
* import { dnsJsonOverHttps } from '@helia/ipns/dns-resolvers'
|
|
104
|
+
*
|
|
105
|
+
* const cid = name.resolveDns('ipfs.io', {
|
|
106
|
+
* resolvers: [
|
|
107
|
+
* dnsJsonOverHttps('https://mozilla.cloudflare-dns.com/dns-query')
|
|
108
|
+
* ]
|
|
109
|
+
* })
|
|
43
110
|
* ```
|
|
44
111
|
*/
|
|
45
112
|
import { CodeError } from '@libp2p/interface/errors';
|
|
@@ -50,8 +117,8 @@ import { ipnsSelector } from 'ipns/selector';
|
|
|
50
117
|
import { ipnsValidator } from 'ipns/validator';
|
|
51
118
|
import { CID } from 'multiformats/cid';
|
|
52
119
|
import { CustomProgressEvent } from 'progress-events';
|
|
120
|
+
import { defaultResolver } from './dns-resolvers/default.js';
|
|
53
121
|
import { localStore } from './routing/local-store.js';
|
|
54
|
-
import { resolveDnslink } from './utils/resolve-dns-link.js';
|
|
55
122
|
const log = logger('helia:ipns');
|
|
56
123
|
const MINUTE = 60 * 1000;
|
|
57
124
|
const HOUR = 60 * MINUTE;
|
|
@@ -61,9 +128,11 @@ class DefaultIPNS {
|
|
|
61
128
|
routers;
|
|
62
129
|
localStore;
|
|
63
130
|
timeout;
|
|
64
|
-
|
|
131
|
+
defaultResolvers;
|
|
132
|
+
constructor(components, routers = [], resolvers = []) {
|
|
65
133
|
this.routers = routers;
|
|
66
134
|
this.localStore = localStore(components.datastore);
|
|
135
|
+
this.defaultResolvers = resolvers.length > 0 ? resolvers : [defaultResolver()];
|
|
67
136
|
}
|
|
68
137
|
async publish(key, value, options = {}) {
|
|
69
138
|
try {
|
|
@@ -96,7 +165,8 @@ class DefaultIPNS {
|
|
|
96
165
|
return this.#resolve(record.value, options);
|
|
97
166
|
}
|
|
98
167
|
async resolveDns(domain, options = {}) {
|
|
99
|
-
const
|
|
168
|
+
const resolvers = options.resolvers ?? this.defaultResolvers;
|
|
169
|
+
const dnslink = await Promise.any(resolvers.map(async (resolver) => resolver(domain, options)));
|
|
100
170
|
return this.#resolve(dnslink, options);
|
|
101
171
|
}
|
|
102
172
|
republish(options = {}) {
|
|
@@ -170,8 +240,8 @@ class DefaultIPNS {
|
|
|
170
240
|
return unmarshal(record);
|
|
171
241
|
}
|
|
172
242
|
}
|
|
173
|
-
export function ipns(components, routers = []) {
|
|
174
|
-
return new DefaultIPNS(components, routers);
|
|
243
|
+
export function ipns(components, { routers = [], resolvers = [] }) {
|
|
244
|
+
return new DefaultIPNS(components, routers, resolvers);
|
|
175
245
|
}
|
|
176
246
|
export { ipnsValidator };
|
|
177
247
|
export { ipnsSelector } from 'ipns/selector';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dht.js","sourceRoot":"","sources":["../../../src/routing/dht.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAsB,MAAM,iBAAiB,CAAA;AAczE,MAAM,OAAO,UAAU;IACJ,cAAc,CAAgB;IAE/C,YAAa,UAAgC;QAC3C,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,eAA2B,EAAE,UAAsB,EAAE;QACtF,IAAI;
|
|
1
|
+
{"version":3,"file":"dht.js","sourceRoot":"","sources":["../../../src/routing/dht.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAsB,MAAM,iBAAiB,CAAA;AAczE,MAAM,OAAO,UAAU;IACJ,cAAc,CAAgB;IAE/C,YAAa,UAAgC;QAC3C,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,eAA2B,EAAE,UAAsB,EAAE;QACtF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,CAAA;QACrE,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAQ,wBAAwB,EAAE,GAAG,CAAC,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,UAAsB,EAAE;QACzD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAC3D,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAQ,wBAAwB,EAAE,GAAG,CAAC,CAAC,CAAA;QACrF,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,UAAU,GAAG,CAAE,UAAgC;IACnD,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,CAAA;AACnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-store.js","sourceRoot":"","sources":["../../../src/routing/local-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAkB,GAAG,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAsB,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAItE,SAAS,aAAa,CAAE,GAAe;IACrC,OAAO,IAAI,GAAG,CAAC,cAAc,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;AAC3E,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAE,SAAoB;IAC9C,OAAO;QACL,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,gBAA4B,EAAE,UAAsB,EAAE;YACvF,IAAI;
|
|
1
|
+
{"version":3,"file":"local-store.js","sourceRoot":"","sources":["../../../src/routing/local-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAkB,GAAG,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAsB,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAItE,SAAS,aAAa,CAAE,GAAe;IACrC,OAAO,IAAI,GAAG,CAAC,cAAc,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;AAC3E,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAE,SAAoB;IAC9C,OAAO;QACL,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,gBAA4B,EAAE,UAAsB,EAAE;YACvF,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;gBAErC,2CAA2C;gBAC3C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;gBAEnE,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAC,4BAA4B,CAAC,CAAC,CAAA;gBAC3E,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAA;YACvD,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAQ,8BAA8B,EAAE,GAAG,CAAC,CAAC,CAAA;gBACzF,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,UAAsB,EAAE;YACzD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;gBAErC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAC,4BAA4B,CAAC,CAAC,CAAA;gBAC3E,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBAE7C,0CAA0C;gBAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;gBAEtC,OAAO,MAAM,CAAC,KAAK,CAAA;YACrB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAQ,8BAA8B,EAAE,GAAG,CAAC,CAAC,CAAA;gBACzF,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,UAAwB,EAAE;YAC3D,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;YACrC,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACpC,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../../src/routing/pubsub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAsB,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAM9D,MAAM,GAAG,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAA;AAiB/C;;;;;;;GAOG;AACH,MAAM,aAAa;IACT,aAAa,CAAU;IACd,UAAU,CAAY;IACtB,MAAM,CAAQ;IACd,MAAM,CAAQ;IAE/B,YAAa,UAAmC;QAC9C,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;QAClD,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAA;QACtC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA;QAE/C,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAA;YAE1B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../../src/routing/pubsub.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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,CAyCtJ,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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { CodeError } from '@libp2p/interface/errors';
|
|
2
|
+
import * as isIPFS from 'is-ipfs';
|
|
3
|
+
export const ipfsPathForAnswer = (answer) => {
|
|
4
|
+
let data = answer.data;
|
|
5
|
+
if (data.startsWith('"')) {
|
|
6
|
+
data = data.substring(1);
|
|
7
|
+
}
|
|
8
|
+
if (data.endsWith('"')) {
|
|
9
|
+
data = data.substring(0, data.length - 1);
|
|
10
|
+
}
|
|
11
|
+
return data.replace('dnslink=', '');
|
|
12
|
+
};
|
|
13
|
+
export const ipfsPathAndAnswer = (domain, response) => {
|
|
14
|
+
const answer = findDNSLinkAnswer(domain, response);
|
|
15
|
+
return {
|
|
16
|
+
ipfsPath: ipfsPathForAnswer(answer),
|
|
17
|
+
answer
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export const findDNSLinkAnswer = (domain, response) => {
|
|
21
|
+
const answer = response.Answer?.filter(a => a.data.includes('dnslink=/ipfs') || a.data.includes('dnslink=/ipns')).pop();
|
|
22
|
+
if (answer == null) {
|
|
23
|
+
throw new CodeError(`No dnslink records found for domain: ${domain}`, 'ERR_DNSLINK_NOT_FOUND');
|
|
24
|
+
}
|
|
25
|
+
return answer;
|
|
26
|
+
};
|
|
27
|
+
export const MAX_RECURSIVE_DEPTH = 32;
|
|
28
|
+
export const recursiveResolveDnslink = async (domain, depth, resolve, options = {}) => {
|
|
29
|
+
if (depth === 0) {
|
|
30
|
+
throw new Error('recursion limit exceeded');
|
|
31
|
+
}
|
|
32
|
+
let dnslinkRecord;
|
|
33
|
+
try {
|
|
34
|
+
dnslinkRecord = await resolve(domain, options);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
// If the code is not ENOTFOUND or ERR_DNSLINK_NOT_FOUND or ENODATA then throw the error
|
|
38
|
+
if (err.code !== 'ENOTFOUND' && err.code !== 'ERR_DNSLINK_NOT_FOUND' && err.code !== 'ENODATA') {
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
if (domain.startsWith('_dnslink.')) {
|
|
42
|
+
// The supplied domain contains a _dnslink component
|
|
43
|
+
// Check the non-_dnslink domain
|
|
44
|
+
domain = domain.replace('_dnslink.', '');
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// Check the _dnslink subdomain
|
|
48
|
+
domain = `_dnslink.${domain}`;
|
|
49
|
+
}
|
|
50
|
+
// If this throws then we propagate the error
|
|
51
|
+
dnslinkRecord = await resolve(domain, options);
|
|
52
|
+
}
|
|
53
|
+
const result = dnslinkRecord.replace('dnslink=', '');
|
|
54
|
+
// result is now a `/ipfs/<cid>` or `/ipns/<cid>` string
|
|
55
|
+
const domainOrCID = result.split('/')[2]; // e.g. ["", "ipfs", "<cid>"]
|
|
56
|
+
const isIPFSCID = isIPFS.cid(domainOrCID);
|
|
57
|
+
// if the result is a CID, or depth is 1, we've reached the end of the recursion
|
|
58
|
+
// if depth is 1, another recursive call will be made, but it would throw.
|
|
59
|
+
// we could return if depth is 1 and allow users to handle, but that may be a breaking change
|
|
60
|
+
if (isIPFSCID) {
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
return recursiveResolveDnslink(domainOrCID, depth - 1, resolve, options);
|
|
64
|
+
};
|
|
65
|
+
const DNSLINK_REGEX = /^dnslink=.+$/;
|
|
66
|
+
export const resolveFn = async (resolver, domain) => {
|
|
67
|
+
const records = await resolver.resolveTxt(domain);
|
|
68
|
+
const dnslinkRecords = records.flat()
|
|
69
|
+
.filter(record => DNSLINK_REGEX.test(record));
|
|
70
|
+
// we now have dns text entries as an array of strings
|
|
71
|
+
// only records passing the DNSLINK_REGEX text are included
|
|
72
|
+
// TODO: support multiple dnslink records
|
|
73
|
+
const dnslinkRecord = dnslinkRecords[0];
|
|
74
|
+
if (dnslinkRecord == null) {
|
|
75
|
+
throw new CodeError(`No dnslink records found for domain: ${domain}`, 'ERR_DNSLINK_NOT_FOUND');
|
|
76
|
+
}
|
|
77
|
+
return dnslinkRecord;
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=dns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dns.js","sourceRoot":"","sources":["../../../src/utils/dns.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tlru.js","sourceRoot":"","sources":["../../../src/utils/tlru.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B;;;;GAIG;AACH,MAAM,OAAO,IAAI;IACE,GAAG,CAA4B;IAEhD,YAAa,OAAe;QAC1B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IAED,GAAG,CAAE,GAAW;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAE/B,IAAI,KAAK,IAAI,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"tlru.js","sourceRoot":"","sources":["../../../src/utils/tlru.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B;;;;GAIG;AACH,MAAM,OAAO,IAAI;IACE,GAAG,CAA4B;IAEhD,YAAa,OAAe;QAC1B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IAED,GAAG,CAAE,GAAW;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAE/B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBACtD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAEpB,OAAO,SAAS,CAAA;YAClB,CAAC;YAED,OAAO,KAAK,CAAC,KAAK,CAAA;QACpB,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,GAAG,CAAE,GAAW,EAAE,KAAQ,EAAE,GAAW;QACrC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAA;IACxD,CAAC;IAED,GAAG,CAAE,GAAW;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAE3B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,CAAE,GAAW;QACjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACtB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC;CACF"}
|
package/dist/typedoc-urls.json
CHANGED
|
@@ -1,20 +1,28 @@
|
|
|
1
1
|
{
|
|
2
|
+
"DNSResolver": "https://ipfs.github.io/helia-ipns/interfaces/index.DNSResolver.html",
|
|
3
|
+
".:DNSResolver": "https://ipfs.github.io/helia-ipns/interfaces/index.DNSResolver.html",
|
|
2
4
|
"IPNS": "https://ipfs.github.io/helia-ipns/interfaces/index.IPNS.html",
|
|
3
5
|
".:IPNS": "https://ipfs.github.io/helia-ipns/interfaces/index.IPNS.html",
|
|
4
6
|
"IPNSComponents": "https://ipfs.github.io/helia-ipns/interfaces/index.IPNSComponents.html",
|
|
5
7
|
".:IPNSComponents": "https://ipfs.github.io/helia-ipns/interfaces/index.IPNSComponents.html",
|
|
8
|
+
"IPNSOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.IPNSOptions.html",
|
|
9
|
+
".:IPNSOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.IPNSOptions.html",
|
|
6
10
|
"PublishOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.PublishOptions.html",
|
|
7
11
|
".:PublishOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.PublishOptions.html",
|
|
8
12
|
"RepublishOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.RepublishOptions.html",
|
|
9
13
|
".:RepublishOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.RepublishOptions.html",
|
|
10
14
|
"ResolveDNSOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.ResolveDNSOptions.html",
|
|
11
15
|
".:ResolveDNSOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.ResolveDNSOptions.html",
|
|
16
|
+
"ResolveDnsLinkOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.ResolveDnsLinkOptions.html",
|
|
17
|
+
".:ResolveDnsLinkOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.ResolveDnsLinkOptions.html",
|
|
12
18
|
"ResolveOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.ResolveOptions.html",
|
|
13
19
|
".:ResolveOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.ResolveOptions.html",
|
|
14
20
|
"PublishProgressEvents": "https://ipfs.github.io/helia-ipns/types/index.PublishProgressEvents.html",
|
|
15
21
|
".:PublishProgressEvents": "https://ipfs.github.io/helia-ipns/types/index.PublishProgressEvents.html",
|
|
16
22
|
"RepublishProgressEvents": "https://ipfs.github.io/helia-ipns/types/index.RepublishProgressEvents.html",
|
|
17
23
|
".:RepublishProgressEvents": "https://ipfs.github.io/helia-ipns/types/index.RepublishProgressEvents.html",
|
|
24
|
+
"ResolveDnsLinkProgressEvents": "https://ipfs.github.io/helia-ipns/types/index.ResolveDnsLinkProgressEvents.html",
|
|
25
|
+
".:ResolveDnsLinkProgressEvents": "https://ipfs.github.io/helia-ipns/types/index.ResolveDnsLinkProgressEvents.html",
|
|
18
26
|
"ResolveProgressEvents": "https://ipfs.github.io/helia-ipns/types/index.ResolveProgressEvents.html",
|
|
19
27
|
".:ResolveProgressEvents": "https://ipfs.github.io/helia-ipns/types/index.ResolveProgressEvents.html",
|
|
20
28
|
"ipns": "https://ipfs.github.io/helia-ipns/functions/index.ipns-1.html",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@helia/ipns",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "An implementation of IPNS for Helia",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/ipfs/helia-ipns/tree/master/packages/ipns#readme",
|
|
@@ -46,6 +46,10 @@
|
|
|
46
46
|
"./routing": {
|
|
47
47
|
"types": "./dist/src/routing/index.d.ts",
|
|
48
48
|
"import": "./dist/src/routing/index.js"
|
|
49
|
+
},
|
|
50
|
+
"./dns-resolvers": {
|
|
51
|
+
"types": "./dist/src/dns-resolvers/index.d.ts",
|
|
52
|
+
"import": "./dist/src/dns-resolvers/index.js"
|
|
49
53
|
}
|
|
50
54
|
},
|
|
51
55
|
"eslintConfig": {
|
|
@@ -155,10 +159,11 @@
|
|
|
155
159
|
"release": "aegir release"
|
|
156
160
|
},
|
|
157
161
|
"dependencies": {
|
|
158
|
-
"@libp2p/interface": "^0.1.2",
|
|
159
162
|
"@libp2p/kad-dht": "^10.0.11",
|
|
160
163
|
"@libp2p/logger": "^3.0.2",
|
|
161
164
|
"@libp2p/peer-id": "^3.0.2",
|
|
165
|
+
"dns-over-http-resolver": "^2.1.3",
|
|
166
|
+
"dns-packet": "^5.6.0",
|
|
162
167
|
"hashlru": "^2.3.0",
|
|
163
168
|
"interface-datastore": "^8.0.0",
|
|
164
169
|
"ipns": "^7.0.1",
|
|
@@ -169,13 +174,17 @@
|
|
|
169
174
|
"uint8arrays": "^4.0.3"
|
|
170
175
|
},
|
|
171
176
|
"devDependencies": {
|
|
177
|
+
"@libp2p/interface": "^0.1.4",
|
|
172
178
|
"@libp2p/peer-id-factory": "^3.0.3",
|
|
173
|
-
"
|
|
179
|
+
"@types/dns-packet": "^5.6.4",
|
|
174
180
|
"datastore-core": "^9.0.3",
|
|
175
181
|
"sinon": "^17.0.0",
|
|
176
182
|
"sinon-ts": "^1.0.0"
|
|
177
183
|
},
|
|
178
184
|
"browser": {
|
|
179
|
-
"./dist/src/
|
|
185
|
+
"./dist/src/dns-resolvers/resolver.js": "./dist/src/dns-resolvers/resolver.browser.js"
|
|
186
|
+
},
|
|
187
|
+
"typedoc": {
|
|
188
|
+
"entryPoint": "./src/index.ts"
|
|
180
189
|
}
|
|
181
190
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { MAX_RECURSIVE_DEPTH, recursiveResolveDnslink } from '../utils/dns.js'
|
|
2
|
+
import resolve from './resolver.js'
|
|
3
|
+
import type { DNSResolver, ResolveDnsLinkOptions } from '../index.js'
|
|
4
|
+
|
|
5
|
+
export function defaultResolver (): DNSResolver {
|
|
6
|
+
return async (domain: string, options: ResolveDnsLinkOptions = {}): Promise<string> => {
|
|
7
|
+
return recursiveResolveDnslink(domain, MAX_RECURSIVE_DEPTH, resolve, options)
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/* eslint-env browser */
|
|
2
|
+
|
|
3
|
+
import PQueue from 'p-queue'
|
|
4
|
+
import { CustomProgressEvent } from 'progress-events'
|
|
5
|
+
import { type DNSResponse, MAX_RECURSIVE_DEPTH, recursiveResolveDnslink, ipfsPathAndAnswer } from '../utils/dns.js'
|
|
6
|
+
import { TLRU } from '../utils/tlru.js'
|
|
7
|
+
import type { ResolveDnsLinkOptions, DNSResolver } from '../index.js'
|
|
8
|
+
|
|
9
|
+
// Avoid sending multiple queries for the same hostname by caching results
|
|
10
|
+
const cache = new TLRU<string>(1000)
|
|
11
|
+
// This TTL will be used if the remote service does not return one
|
|
12
|
+
const ttl = 60 * 1000
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Uses the RFC 8427 'application/dns-json' content-type to resolve DNS queries.
|
|
16
|
+
*
|
|
17
|
+
* Supports and server that uses the same schema as Google's DNS over HTTPS
|
|
18
|
+
* resolver.
|
|
19
|
+
*
|
|
20
|
+
* This resolver needs fewer dependencies than the regular DNS-over-HTTPS
|
|
21
|
+
* resolver so can result in a smaller bundle size and consequently is preferred
|
|
22
|
+
* for browser use.
|
|
23
|
+
*
|
|
24
|
+
* @see https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-json/
|
|
25
|
+
* @see https://github.com/curl/curl/wiki/DNS-over-HTTPS#publicly-available-servers
|
|
26
|
+
* @see https://dnsprivacy.org/public_resolvers/
|
|
27
|
+
* @see https://datatracker.ietf.org/doc/html/rfc8427
|
|
28
|
+
*/
|
|
29
|
+
export function dnsJsonOverHttps (url: string): DNSResolver {
|
|
30
|
+
// browsers limit concurrent connections per host,
|
|
31
|
+
// we don't want preload calls to exhaust the limit (~6)
|
|
32
|
+
const httpQueue = new PQueue({ concurrency: 4 })
|
|
33
|
+
|
|
34
|
+
const resolve = async (fqdn: string, options: ResolveDnsLinkOptions = {}): Promise<string> => {
|
|
35
|
+
const searchParams = new URLSearchParams()
|
|
36
|
+
searchParams.set('name', fqdn)
|
|
37
|
+
searchParams.set('type', 'TXT')
|
|
38
|
+
|
|
39
|
+
const query = searchParams.toString()
|
|
40
|
+
|
|
41
|
+
// try cache first
|
|
42
|
+
if (options.nocache !== true && cache.has(query)) {
|
|
43
|
+
const response = cache.get(query)
|
|
44
|
+
|
|
45
|
+
if (response != null) {
|
|
46
|
+
options.onProgress?.(new CustomProgressEvent<string>('dnslink:cache', { detail: response }))
|
|
47
|
+
return response
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
options.onProgress?.(new CustomProgressEvent<string>('dnslink:query', { detail: fqdn }))
|
|
52
|
+
|
|
53
|
+
// query DNS-JSON over HTTPS server
|
|
54
|
+
const response = await httpQueue.add(async () => {
|
|
55
|
+
const res = await fetch(`${url}?${searchParams}`, {
|
|
56
|
+
headers: {
|
|
57
|
+
accept: 'application/dns-json'
|
|
58
|
+
},
|
|
59
|
+
signal: options.signal
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
if (res.status !== 200) {
|
|
63
|
+
throw new Error(`Unexpected HTTP status: ${res.status} - ${res.statusText}`)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const query = new URL(res.url).search.slice(1)
|
|
67
|
+
const json: DNSResponse = await res.json()
|
|
68
|
+
|
|
69
|
+
options.onProgress?.(new CustomProgressEvent<DNSResponse>('dnslink:answer', { detail: json }))
|
|
70
|
+
|
|
71
|
+
const { ipfsPath, answer } = ipfsPathAndAnswer(fqdn, json)
|
|
72
|
+
|
|
73
|
+
cache.set(query, ipfsPath, answer.TTL ?? ttl)
|
|
74
|
+
|
|
75
|
+
return ipfsPath
|
|
76
|
+
}, {
|
|
77
|
+
signal: options.signal
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
if (response == null) {
|
|
81
|
+
throw new Error('No DNS response received')
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return response
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return async (domain: string, options: ResolveDnsLinkOptions = {}) => {
|
|
88
|
+
return recursiveResolveDnslink(domain, MAX_RECURSIVE_DEPTH, resolve, options)
|
|
89
|
+
}
|
|
90
|
+
}
|