libp2p 2.8.11 → 2.8.12

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 (50) hide show
  1. package/dist/index.min.js +7 -7
  2. package/dist/index.min.js.map +4 -4
  3. package/dist/src/config.js +1 -1
  4. package/dist/src/config.js.map +1 -1
  5. package/dist/src/connection-manager/constants.defaults.d.ts +4 -0
  6. package/dist/src/connection-manager/constants.defaults.d.ts.map +1 -1
  7. package/dist/src/connection-manager/constants.defaults.js +4 -0
  8. package/dist/src/connection-manager/constants.defaults.js.map +1 -1
  9. package/dist/src/connection-manager/dial-queue.d.ts +4 -3
  10. package/dist/src/connection-manager/dial-queue.d.ts.map +1 -1
  11. package/dist/src/connection-manager/dial-queue.js +7 -9
  12. package/dist/src/connection-manager/dial-queue.js.map +1 -1
  13. package/dist/src/connection-manager/index.d.ts +3 -3
  14. package/dist/src/connection-manager/index.d.ts.map +1 -1
  15. package/dist/src/connection-manager/index.js +1 -1
  16. package/dist/src/connection-manager/index.js.map +1 -1
  17. package/dist/src/connection-manager/resolvers/dnsaddr.d.ts +11 -0
  18. package/dist/src/connection-manager/resolvers/dnsaddr.d.ts.map +1 -0
  19. package/dist/src/connection-manager/resolvers/dnsaddr.js +52 -0
  20. package/dist/src/connection-manager/resolvers/dnsaddr.js.map +1 -0
  21. package/dist/src/connection-manager/resolvers/index.d.ts +23 -0
  22. package/dist/src/connection-manager/resolvers/index.d.ts.map +1 -0
  23. package/dist/src/connection-manager/resolvers/index.js +31 -0
  24. package/dist/src/connection-manager/resolvers/index.js.map +1 -0
  25. package/dist/src/connection-manager/utils.d.ts +1 -6
  26. package/dist/src/connection-manager/utils.d.ts.map +1 -1
  27. package/dist/src/connection-manager/utils.js +4 -23
  28. package/dist/src/connection-manager/utils.js.map +1 -1
  29. package/dist/src/errors.d.ts +3 -0
  30. package/dist/src/errors.d.ts.map +1 -1
  31. package/dist/src/errors.js +6 -0
  32. package/dist/src/errors.js.map +1 -1
  33. package/dist/src/index.d.ts +1 -0
  34. package/dist/src/index.d.ts.map +1 -1
  35. package/dist/src/index.js +1 -0
  36. package/dist/src/index.js.map +1 -1
  37. package/dist/src/version.d.ts +1 -1
  38. package/dist/src/version.js +1 -1
  39. package/dist/typedoc-urls.json +1 -0
  40. package/package.json +10 -10
  41. package/src/config.ts +1 -1
  42. package/src/connection-manager/constants.defaults.ts +5 -0
  43. package/src/connection-manager/dial-queue.ts +10 -13
  44. package/src/connection-manager/index.ts +4 -4
  45. package/src/connection-manager/resolvers/dnsaddr.ts +69 -0
  46. package/src/connection-manager/resolvers/index.ts +59 -0
  47. package/src/connection-manager/utils.ts +6 -32
  48. package/src/errors.ts +7 -0
  49. package/src/index.ts +2 -0
  50. package/src/version.ts +1 -1
@@ -26,6 +26,7 @@ export type ServiceFactoryMap<T extends ServiceMap = ServiceMap> = {
26
26
  [Property in keyof T]: (components: Components & T) => T[Property];
27
27
  };
28
28
  export type { AddressManagerInit, AddressFilter };
29
+ export { dnsaddrResolver } from './connection-manager/resolvers/index.ts';
29
30
  /**
30
31
  * For Libp2p configurations and modules details read the [Configuration Document](https://github.com/libp2p/js-libp2p/tree/main/doc/CONFIGURATION.md).
31
32
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -17,6 +17,7 @@ import { generateKeyPair } from '@libp2p/crypto/keys';
17
17
  import { peerIdFromPrivateKey } from '@libp2p/peer-id';
18
18
  import { validateConfig } from './config.js';
19
19
  import { Libp2p as Libp2pClass } from './libp2p.js';
20
+ export { dnsaddrResolver } from "./connection-manager/resolvers/index.js";
20
21
  /**
21
22
  * Returns a new instance of the Libp2p interface, generating a new PeerId
22
23
  * if one is not passed as part of the options.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,aAAa,CAAA;AAyJnD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAsC,UAA4B,EAAE;IACpG,OAAO,CAAC,UAAU,KAAK,MAAM,eAAe,CAAC,SAAS,CAAC,CAAA;IAEvD,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC;QAC3B,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC;QAChC,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC;KACjD,CAAC,CAAA;IAEF,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,aAAa,CAAA;AAiBnD,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AA0IzE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAsC,UAA4B,EAAE;IACpG,OAAO,CAAC,UAAU,KAAK,MAAM,eAAe,CAAC,SAAS,CAAC,CAAA;IAEvD,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC;QAC3B,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC;QAChC,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC;KACjD,CAAC,CAAA;IAEF,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -1,3 +1,3 @@
1
- export declare const version = "2.8.11";
1
+ export declare const version = "2.8.12";
2
2
  export declare const name = "js-libp2p";
3
3
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
- export const version = '2.8.11';
1
+ export const version = '2.8.12';
2
2
  export const name = 'js-libp2p';
3
3
  //# sourceMappingURL=version.js.map
@@ -10,6 +10,7 @@
10
10
  ".:Libp2pOptions": "https://libp2p.github.io/js-libp2p/types/libp2p.index.Libp2pOptions.html",
11
11
  "ServiceFactoryMap": "https://libp2p.github.io/js-libp2p/types/libp2p.index.ServiceFactoryMap.html",
12
12
  ".:ServiceFactoryMap": "https://libp2p.github.io/js-libp2p/types/libp2p.index.ServiceFactoryMap.html",
13
+ "dnsaddrResolver": "https://libp2p.github.io/js-libp2p/variables/libp2p.index.dnsaddrResolver.html",
13
14
  "createLibp2p": "https://libp2p.github.io/js-libp2p/functions/libp2p.index.createLibp2p.html",
14
15
  ".:createLibp2p": "https://libp2p.github.io/js-libp2p/functions/libp2p.index.createLibp2p.html",
15
16
  "userAgent": "https://libp2p.github.io/js-libp2p/functions/libp2p.user-agent.userAgent.html",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "libp2p",
3
- "version": "2.8.11",
3
+ "version": "2.8.12",
4
4
  "description": "JavaScript implementation of libp2p, a modular peer to peer network stack",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/libp2p#readme",
@@ -80,15 +80,15 @@
80
80
  "dependencies": {
81
81
  "@chainsafe/is-ip": "^2.1.0",
82
82
  "@chainsafe/netmask": "^2.0.0",
83
- "@libp2p/crypto": "^5.1.6",
84
- "@libp2p/interface": "^2.10.4",
85
- "@libp2p/interface-internal": "^2.3.17",
86
- "@libp2p/logger": "^5.1.20",
87
- "@libp2p/multistream-select": "^6.0.27",
88
- "@libp2p/peer-collections": "^6.0.33",
89
- "@libp2p/peer-id": "^5.1.7",
90
- "@libp2p/peer-store": "^11.2.5",
91
- "@libp2p/utils": "^6.7.0",
83
+ "@libp2p/crypto": "^5.1.7",
84
+ "@libp2p/interface": "^2.10.5",
85
+ "@libp2p/interface-internal": "^2.3.18",
86
+ "@libp2p/logger": "^5.1.21",
87
+ "@libp2p/multistream-select": "^6.0.28",
88
+ "@libp2p/peer-collections": "^6.0.34",
89
+ "@libp2p/peer-id": "^5.1.8",
90
+ "@libp2p/peer-store": "^11.2.6",
91
+ "@libp2p/utils": "^6.7.1",
92
92
  "@multiformats/dns": "^1.0.6",
93
93
  "@multiformats/multiaddr": "^12.4.4",
94
94
  "@multiformats/multiaddr-matcher": "^1.7.2",
package/src/config.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { FaultTolerance, InvalidParametersError } from '@libp2p/interface'
2
2
  import { mergeOptions } from '@libp2p/utils/merge-options'
3
- import { dnsaddrResolver } from '@multiformats/multiaddr/resolvers'
3
+ import { dnsaddrResolver } from './connection-manager/resolvers/dnsaddr.ts'
4
4
  import type { Libp2pInit } from './index.js'
5
5
  import type { ServiceMap } from '@libp2p/interface'
6
6
  import type { Multiaddr } from '@multiformats/multiaddr'
@@ -54,3 +54,8 @@ export const LAST_DIAL_SUCCESS_KEY = 'last-dial-success'
54
54
  * @see https://libp2p.github.io/js-libp2p/interfaces/index._internal_.ConnectionManagerConfig.html#maxDialQueueLength
55
55
  */
56
56
  export const MAX_DIAL_QUEUE_LENGTH = 500
57
+
58
+ /**
59
+ * @see https://libp2p.github.io/js-libp2p/interfaces/index._internal_.ConnectionManagerConfig.html#maxRecursiveDepth
60
+ */
61
+ export const MAX_RECURSIVE_DEPTH = 32
@@ -2,8 +2,7 @@
2
2
  import { TimeoutError, DialError, AbortError } from '@libp2p/interface'
3
3
  import { PeerMap } from '@libp2p/peer-collections'
4
4
  import { PriorityQueue } from '@libp2p/utils/priority-queue'
5
- import { resolvers, multiaddr } from '@multiformats/multiaddr'
6
- import { dnsaddrResolver } from '@multiformats/multiaddr/resolvers'
5
+ import { multiaddr } from '@multiformats/multiaddr'
7
6
  import { Circuit } from '@multiformats/multiaddr-matcher'
8
7
  import { anySignal } from 'any-signal'
9
8
  import { setMaxListeners } from 'main-event'
@@ -20,13 +19,13 @@ import {
20
19
  MAX_DIAL_QUEUE_LENGTH,
21
20
  LAST_DIAL_SUCCESS_KEY
22
21
  } from './constants.js'
23
- import { resolveMultiaddrs } from './utils.js'
22
+ import { resolveMultiaddr, dnsaddrResolver } from './resolvers/index.js'
24
23
  import { DEFAULT_DIAL_PRIORITY } from './index.js'
25
- import type { AddressSorter, ComponentLogger, Logger, Connection, ConnectionGater, Metrics, PeerId, Address, PeerStore, PeerRouting, IsDialableOptions, OpenConnectionProgressEvents } from '@libp2p/interface'
24
+ import type { AddressSorter, ComponentLogger, Logger, Connection, ConnectionGater, Metrics, PeerId, Address, PeerStore, PeerRouting, IsDialableOptions, OpenConnectionProgressEvents, MultiaddrResolver } from '@libp2p/interface'
26
25
  import type { OpenConnectionOptions, TransportManager } from '@libp2p/interface-internal'
27
26
  import type { PriorityQueueJobOptions } from '@libp2p/utils/priority-queue'
28
27
  import type { DNS } from '@multiformats/dns'
29
- import type { Multiaddr, Resolver } from '@multiformats/multiaddr'
28
+ import type { Multiaddr } from '@multiformats/multiaddr'
30
29
  import type { ProgressOptions } from 'progress-events'
31
30
 
32
31
  export interface PendingDialTarget {
@@ -45,7 +44,7 @@ interface DialerInit {
45
44
  maxDialQueueLength?: number
46
45
  maxPeerAddrsToDial?: number
47
46
  dialTimeout?: number
48
- resolvers?: Record<string, Resolver>
47
+ resolvers?: Record<string, MultiaddrResolver>
49
48
  connections?: PeerMap<Connection[]>
50
49
  }
51
50
 
@@ -80,6 +79,7 @@ export class DialQueue {
80
79
  private shutDownController: AbortController
81
80
  private readonly connections: PeerMap<Connection[]>
82
81
  private readonly log: Logger
82
+ private readonly resolvers: Record<string, MultiaddrResolver>
83
83
 
84
84
  constructor (components: DialQueueComponents, init: DialerInit = {}) {
85
85
  this.addressSorter = init.addressSorter
@@ -89,14 +89,11 @@ export class DialQueue {
89
89
  this.connections = init.connections ?? new PeerMap()
90
90
  this.log = components.logger.forComponent('libp2p:connection-manager:dial-queue')
91
91
  this.components = components
92
+ this.resolvers = init.resolvers ?? defaultOptions.resolvers
92
93
 
93
94
  this.shutDownController = new AbortController()
94
95
  setMaxListeners(Infinity, this.shutDownController.signal)
95
96
 
96
- for (const [key, value] of Object.entries(init.resolvers ?? {})) {
97
- resolvers.set(key, value)
98
- }
99
-
100
97
  // controls dial concurrency
101
98
  this.queue = new PriorityQueue({
102
99
  concurrency: init.maxParallelDials ?? defaultOptions.maxParallelDials,
@@ -415,10 +412,10 @@ export class DialQueue {
415
412
  // dnsaddrs are resolved
416
413
  let resolvedAddresses = (await Promise.all(
417
414
  addrs.map(async addr => {
418
- const result = await resolveMultiaddrs(addr.multiaddr, {
415
+ const result = await resolveMultiaddr(addr.multiaddr, this.resolvers, {
419
416
  dns: this.components.dns,
420
- ...options,
421
- log: this.log
417
+ log: this.log,
418
+ ...options
422
419
  })
423
420
 
424
421
  if (result.length === 1 && result[0].equals(addr.multiaddr)) {
@@ -2,19 +2,19 @@ import { ConnectionClosedError, InvalidMultiaddrError, InvalidParametersError, I
2
2
  import { PeerMap } from '@libp2p/peer-collections'
3
3
  import { RateLimiter } from '@libp2p/utils/rate-limiter'
4
4
  import { multiaddr } from '@multiformats/multiaddr'
5
- import { dnsaddrResolver } from '@multiformats/multiaddr/resolvers'
6
5
  import { CustomProgressEvent } from 'progress-events'
7
6
  import { getPeerAddress } from '../get-peer.js'
8
7
  import { ConnectionPruner } from './connection-pruner.js'
9
8
  import { DIAL_TIMEOUT, INBOUND_CONNECTION_THRESHOLD, MAX_CONNECTIONS, MAX_DIAL_QUEUE_LENGTH, MAX_INCOMING_PENDING_CONNECTIONS, MAX_PARALLEL_DIALS, MAX_PEER_ADDRS_TO_DIAL } from './constants.js'
10
9
  import { DialQueue } from './dial-queue.js'
11
10
  import { ReconnectQueue } from './reconnect-queue.js'
11
+ import { dnsaddrResolver } from './resolvers/index.ts'
12
12
  import { multiaddrToIpNet } from './utils.js'
13
13
  import type { IpNet } from '@chainsafe/netmask'
14
- import type { PendingDial, AddressSorter, Libp2pEvents, AbortOptions, ComponentLogger, Logger, Connection, MultiaddrConnection, ConnectionGater, Metrics, PeerId, PeerStore, Startable, PendingDialStatus, PeerRouting, IsDialableOptions } from '@libp2p/interface'
14
+ import type { PendingDial, AddressSorter, Libp2pEvents, AbortOptions, ComponentLogger, Logger, Connection, MultiaddrConnection, ConnectionGater, Metrics, PeerId, PeerStore, Startable, PendingDialStatus, PeerRouting, IsDialableOptions, MultiaddrResolver } from '@libp2p/interface'
15
15
  import type { ConnectionManager, OpenConnectionOptions, TransportManager } from '@libp2p/interface-internal'
16
16
  import type { JobStatus } from '@libp2p/utils/queue'
17
- import type { Multiaddr, Resolver } from '@multiformats/multiaddr'
17
+ import type { Multiaddr } from '@multiformats/multiaddr'
18
18
  import type { TypedEventTarget } from 'main-event'
19
19
 
20
20
  export const DEFAULT_DIAL_PRIORITY = 50
@@ -112,7 +112,7 @@ export interface ConnectionManagerInit {
112
112
  /**
113
113
  * Multiaddr resolvers to use when dialling
114
114
  */
115
- resolvers?: Record<string, Resolver>
115
+ resolvers?: Record<string, MultiaddrResolver>
116
116
 
117
117
  /**
118
118
  * A list of multiaddrs that will always be allowed (except if they are in the
@@ -0,0 +1,69 @@
1
+ import { dns, RecordType } from '@multiformats/dns'
2
+ import { multiaddr } from '@multiformats/multiaddr'
3
+ import type { MultiaddrResolver, MultiaddrResolveOptions } from '@libp2p/interface'
4
+ import type { DNS } from '@multiformats/dns'
5
+ import type { Multiaddr } from '@multiformats/multiaddr'
6
+
7
+ class DNSAddrResolver implements MultiaddrResolver {
8
+ private dns?: DNS
9
+
10
+ canResolve (ma: Multiaddr): boolean {
11
+ return ma.getComponents().some(({ name }) => name === 'dnsaddr')
12
+ }
13
+
14
+ async resolve (ma: Multiaddr, options: MultiaddrResolveOptions): Promise<Multiaddr[]> {
15
+ const hostname = ma.getComponents()
16
+ .find(component => component.name === 'dnsaddr')
17
+ ?.value
18
+
19
+ if (hostname == null) {
20
+ return [ma]
21
+ }
22
+
23
+ const resolver = this.getDNS(options)
24
+ const result = await resolver.query(`_dnsaddr.${hostname}`, {
25
+ signal: options?.signal,
26
+ types: [
27
+ RecordType.TXT
28
+ ]
29
+ })
30
+
31
+ const peerId = ma.getComponents()
32
+ .find(component => component.name === 'p2p')
33
+ ?.value
34
+ const output: Multiaddr[] = []
35
+
36
+ for (const answer of result.Answer) {
37
+ const addr = answer.data
38
+ .replace(/["']/g, '')
39
+ .trim()
40
+ .split('=')[1]
41
+
42
+ if (addr == null) {
43
+ continue
44
+ }
45
+
46
+ if (peerId != null && !addr.includes(peerId)) {
47
+ continue
48
+ }
49
+
50
+ output.push(multiaddr(addr))
51
+ }
52
+
53
+ return output
54
+ }
55
+
56
+ private getDNS (options: MultiaddrResolveOptions): DNS {
57
+ if (options.dns != null) {
58
+ return options.dns
59
+ }
60
+
61
+ if (this.dns == null) {
62
+ this.dns = dns()
63
+ }
64
+
65
+ return this.dns
66
+ }
67
+ }
68
+
69
+ export const dnsaddrResolver = new DNSAddrResolver()
@@ -0,0 +1,59 @@
1
+ import { RecursionLimitError } from '../../errors.ts'
2
+ import { MAX_RECURSIVE_DEPTH } from '../constants.defaults.ts'
3
+ import type { MultiaddrResolveOptions, MultiaddrResolver } from '@libp2p/interface'
4
+ import type { Multiaddr } from '@multiformats/multiaddr'
5
+
6
+ export interface ResolveOptions extends MultiaddrResolveOptions {
7
+ /**
8
+ * When resolving DNSADDR Multiaddrs that resolve to other DNSADDR Multiaddrs,
9
+ * limit how many times we will recursively resolve them.
10
+ *
11
+ * @default 32
12
+ */
13
+ maxRecursiveDepth?: number
14
+
15
+ /**
16
+ * The current recursive depth
17
+ *
18
+ * @default 0
19
+ */
20
+ depth?: number
21
+ }
22
+
23
+ /**
24
+ * Recursively resolve multiaddrs
25
+ */
26
+ export async function resolveMultiaddr (address: Multiaddr, resolvers: Record<string, MultiaddrResolver>, options: ResolveOptions): Promise<Multiaddr[]> {
27
+ const depth = options.depth ?? 0
28
+
29
+ if (depth > (options.maxRecursiveDepth ?? MAX_RECURSIVE_DEPTH)) {
30
+ throw new RecursionLimitError('Max recursive depth reached')
31
+ }
32
+
33
+ let resolved = false
34
+ const output: Multiaddr[] = []
35
+
36
+ for (const resolver of Object.values(resolvers)) {
37
+ if (resolver.canResolve(address)) {
38
+ resolved = true
39
+ const addresses = await resolver.resolve(address, options)
40
+
41
+ for (const address of addresses) {
42
+ output.push(
43
+ ...(await resolveMultiaddr(address, resolvers, {
44
+ ...options,
45
+ depth: depth + 1
46
+ }))
47
+ )
48
+ }
49
+ }
50
+ }
51
+
52
+ if (resolved === false) {
53
+ output.push(address)
54
+ }
55
+
56
+ return output
57
+ }
58
+
59
+ export { dnsaddrResolver } from './dnsaddr.js'
@@ -1,35 +1,7 @@
1
- import { multiaddr, resolvers } from '@multiformats/multiaddr'
1
+ import { multiaddr } from '@multiformats/multiaddr'
2
2
  import { convertToIpNet } from '@multiformats/multiaddr/convert'
3
3
  import type { IpNet } from '@chainsafe/netmask'
4
- import type { LoggerOptions } from '@libp2p/interface'
5
- import type { Multiaddr, ResolveOptions } from '@multiformats/multiaddr'
6
-
7
- /**
8
- * Recursively resolve DNSADDR multiaddrs
9
- */
10
- export async function resolveMultiaddrs (ma: Multiaddr, options: ResolveOptions & LoggerOptions): Promise<Multiaddr[]> {
11
- // check multiaddr resolvers
12
- let resolvable = false
13
-
14
- for (const key of resolvers.keys()) {
15
- resolvable = ma.protoNames().includes(key)
16
-
17
- if (resolvable) {
18
- break
19
- }
20
- }
21
-
22
- // return multiaddr if it is not resolvable
23
- if (!resolvable) {
24
- return [ma]
25
- }
26
-
27
- const output = await ma.resolve(options)
28
-
29
- options.log('resolved %s to', ma, output.map(ma => ma.toString()))
30
-
31
- return output
32
- }
4
+ import type { Multiaddr } from '@multiformats/multiaddr'
33
5
 
34
6
  /**
35
7
  * Converts a multiaddr string or object to an IpNet object.
@@ -50,9 +22,11 @@ export function multiaddrToIpNet (ma: string | Multiaddr): IpNet {
50
22
  parsedMa = ma
51
23
  }
52
24
 
25
+ const protoNames = new Set([...parsedMa.getComponents().map(component => component.name)])
26
+
53
27
  // Check if /ipcidr is already present
54
- if (!parsedMa.protoNames().includes('ipcidr')) {
55
- const isIPv6 = parsedMa.protoNames().includes('ip6')
28
+ if (!protoNames.has('ipcidr')) {
29
+ const isIPv6 = protoNames.has('ip6')
56
30
  const cidr = isIPv6 ? '/ipcidr/128' : '/ipcidr/32'
57
31
  parsedMa = parsedMa.encapsulate(cidr)
58
32
  }
package/src/errors.ts CHANGED
@@ -114,3 +114,10 @@ export class TransportUnavailableError extends Error {
114
114
  this.name = 'TransportUnavailableError'
115
115
  }
116
116
  }
117
+
118
+ export class RecursionLimitError extends Error {
119
+ constructor (message = 'Max recursive depth reached') {
120
+ super(message)
121
+ this.name = 'RecursionLimitError'
122
+ }
123
+ }
package/src/index.ts CHANGED
@@ -34,6 +34,8 @@ export type ServiceFactoryMap<T extends ServiceMap = ServiceMap> = {
34
34
 
35
35
  export type { AddressManagerInit, AddressFilter }
36
36
 
37
+ export { dnsaddrResolver } from './connection-manager/resolvers/index.ts'
38
+
37
39
  /**
38
40
  * For Libp2p configurations and modules details read the [Configuration Document](https://github.com/libp2p/js-libp2p/tree/main/doc/CONFIGURATION.md).
39
41
  */
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '2.8.11'
1
+ export const version = '2.8.12'
2
2
  export const name = 'js-libp2p'