libp2p 0.44.0-e3deaa40 → 0.44.0-ef7a5f67

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 (94) hide show
  1. package/dist/index.min.js +17 -17
  2. package/dist/src/address-manager/index.d.ts +4 -0
  3. package/dist/src/address-manager/index.d.ts.map +1 -1
  4. package/dist/src/address-manager/index.js +32 -4
  5. package/dist/src/address-manager/index.js.map +1 -1
  6. package/dist/src/address-manager/utils.d.ts +2 -0
  7. package/dist/src/address-manager/utils.d.ts.map +1 -0
  8. package/dist/src/address-manager/utils.js +12 -0
  9. package/dist/src/address-manager/utils.js.map +1 -0
  10. package/dist/src/autonat/constants.d.ts +16 -2
  11. package/dist/src/autonat/constants.d.ts.map +1 -1
  12. package/dist/src/autonat/constants.js +16 -2
  13. package/dist/src/autonat/constants.js.map +1 -1
  14. package/dist/src/autonat/index.d.ts +9 -30
  15. package/dist/src/autonat/index.d.ts.map +1 -1
  16. package/dist/src/autonat/index.js +22 -18
  17. package/dist/src/autonat/index.js.map +1 -1
  18. package/dist/src/circuit-relay/server/index.d.ts.map +1 -1
  19. package/dist/src/circuit-relay/server/index.js +3 -0
  20. package/dist/src/circuit-relay/server/index.js.map +1 -1
  21. package/dist/src/circuit-relay/transport/discovery.js +2 -2
  22. package/dist/src/circuit-relay/transport/discovery.js.map +1 -1
  23. package/dist/src/circuit-relay/transport/index.d.ts.map +1 -1
  24. package/dist/src/circuit-relay/transport/index.js +4 -6
  25. package/dist/src/circuit-relay/transport/index.js.map +1 -1
  26. package/dist/src/circuit-relay/transport/listener.d.ts +0 -3
  27. package/dist/src/circuit-relay/transport/listener.d.ts.map +1 -1
  28. package/dist/src/circuit-relay/transport/listener.js +27 -24
  29. package/dist/src/circuit-relay/transport/listener.js.map +1 -1
  30. package/dist/src/circuit-relay/transport/reservation-store.d.ts +2 -4
  31. package/dist/src/circuit-relay/transport/reservation-store.d.ts.map +1 -1
  32. package/dist/src/circuit-relay/transport/reservation-store.js +28 -26
  33. package/dist/src/circuit-relay/transport/reservation-store.js.map +1 -1
  34. package/dist/src/config.d.ts.map +1 -1
  35. package/dist/src/config.js +0 -55
  36. package/dist/src/config.js.map +1 -1
  37. package/dist/src/connection-manager/dial-queue.d.ts.map +1 -1
  38. package/dist/src/connection-manager/dial-queue.js +11 -0
  39. package/dist/src/connection-manager/dial-queue.js.map +1 -1
  40. package/dist/src/identify/identify.d.ts +53 -0
  41. package/dist/src/identify/identify.d.ts.map +1 -0
  42. package/dist/src/identify/identify.js +405 -0
  43. package/dist/src/identify/identify.js.map +1 -0
  44. package/dist/src/identify/index.d.ts +1 -15
  45. package/dist/src/identify/index.d.ts.map +1 -1
  46. package/dist/src/identify/index.js +2 -387
  47. package/dist/src/identify/index.js.map +1 -1
  48. package/dist/src/index.d.ts +2 -6
  49. package/dist/src/index.d.ts.map +1 -1
  50. package/dist/src/index.js +2 -1
  51. package/dist/src/index.js.map +1 -1
  52. package/dist/src/libp2p.d.ts.map +1 -1
  53. package/dist/src/libp2p.js +0 -1
  54. package/dist/src/libp2p.js.map +1 -1
  55. package/dist/src/peer-routing.d.ts +1 -38
  56. package/dist/src/peer-routing.d.ts.map +1 -1
  57. package/dist/src/peer-routing.js +0 -60
  58. package/dist/src/peer-routing.js.map +1 -1
  59. package/dist/src/transport-manager.d.ts +5 -5
  60. package/dist/src/transport-manager.d.ts.map +1 -1
  61. package/dist/src/transport-manager.js +14 -21
  62. package/dist/src/transport-manager.js.map +1 -1
  63. package/dist/src/upgrader.d.ts.map +1 -1
  64. package/dist/src/upgrader.js +3 -2
  65. package/dist/src/upgrader.js.map +1 -1
  66. package/dist/src/upnp-nat/index.d.ts +2 -2
  67. package/dist/src/upnp-nat/index.d.ts.map +1 -1
  68. package/dist/src/upnp-nat/index.js +1 -1
  69. package/dist/src/upnp-nat/index.js.map +1 -1
  70. package/dist/src/version.d.ts +1 -1
  71. package/dist/src/version.d.ts.map +1 -1
  72. package/dist/src/version.js +1 -1
  73. package/dist/src/version.js.map +1 -1
  74. package/package.json +5 -5
  75. package/src/address-manager/index.ts +42 -4
  76. package/src/address-manager/utils.ts +14 -0
  77. package/src/autonat/constants.ts +17 -2
  78. package/src/autonat/index.ts +37 -30
  79. package/src/circuit-relay/server/index.ts +4 -0
  80. package/src/circuit-relay/transport/discovery.ts +2 -2
  81. package/src/circuit-relay/transport/index.ts +4 -7
  82. package/src/circuit-relay/transport/listener.ts +35 -29
  83. package/src/circuit-relay/transport/reservation-store.ts +21 -15
  84. package/src/config.ts +0 -55
  85. package/src/connection-manager/dial-queue.ts +11 -0
  86. package/src/identify/identify.ts +518 -0
  87. package/src/identify/index.ts +5 -505
  88. package/src/index.ts +2 -7
  89. package/src/libp2p.ts +0 -1
  90. package/src/peer-routing.ts +1 -103
  91. package/src/transport-manager.ts +17 -25
  92. package/src/upgrader.ts +3 -3
  93. package/src/upnp-nat/index.ts +2 -2
  94. package/src/version.ts +1 -1
@@ -9,49 +9,17 @@ import {
9
9
  import merge from 'it-merge'
10
10
  import { pipe } from 'it-pipe'
11
11
  import first from 'it-first'
12
- import drain from 'it-drain'
13
12
  import filter from 'it-filter'
14
- import {
15
- setDelayedInterval,
16
- clearDelayedInterval
17
- // @ts-expect-error module with no types
18
- } from 'set-delayed-interval'
19
- import { setMaxListeners } from 'events'
20
13
  import type { PeerId } from '@libp2p/interface-peer-id'
21
14
  import type { PeerRouting } from '@libp2p/interface-peer-routing'
22
15
  import type { AbortOptions } from '@libp2p/interfaces'
23
- import type { Startable } from '@libp2p/interfaces/startable'
24
16
  import type { PeerInfo } from '@libp2p/interface-peer-info'
25
17
  import type { PeerStore } from '@libp2p/interface-peer-store'
26
- import { anySignal } from 'any-signal'
27
18
 
28
19
  const log = logger('libp2p:peer-routing')
29
20
 
30
- export interface RefreshManagerInit {
31
- /**
32
- * Whether to enable the Refresh manager
33
- */
34
- enabled?: boolean
35
-
36
- /**
37
- * Boot delay to start the Refresh Manager (in ms)
38
- */
39
- bootDelay?: number
40
-
41
- /**
42
- * Interval between each Refresh Manager run (in ms)
43
- */
44
- interval?: number
45
-
46
- /**
47
- * How long to let each refresh run (in ms)
48
- */
49
- timeout?: number
50
- }
51
-
52
21
  export interface PeerRoutingInit {
53
22
  routers?: PeerRouting[]
54
- refreshManager?: RefreshManagerInit
55
23
  }
56
24
 
57
25
  export interface DefaultPeerRoutingComponents {
@@ -59,83 +27,13 @@ export interface DefaultPeerRoutingComponents {
59
27
  peerStore: PeerStore
60
28
  }
61
29
 
62
- export class DefaultPeerRouting implements PeerRouting, Startable {
30
+ export class DefaultPeerRouting implements PeerRouting {
63
31
  private readonly components: DefaultPeerRoutingComponents
64
32
  private readonly routers: PeerRouting[]
65
- private readonly refreshManagerInit: RefreshManagerInit
66
- private timeoutId?: ReturnType<typeof setTimeout>
67
- private started: boolean
68
- private abortController?: AbortController
69
33
 
70
34
  constructor (components: DefaultPeerRoutingComponents, init: PeerRoutingInit) {
71
35
  this.components = components
72
36
  this.routers = init.routers ?? []
73
- this.refreshManagerInit = init.refreshManager ?? {}
74
- this.started = false
75
-
76
- this._findClosestPeersTask = this._findClosestPeersTask.bind(this)
77
- }
78
-
79
- isStarted (): boolean {
80
- return this.started
81
- }
82
-
83
- /**
84
- * Start peer routing service.
85
- */
86
- async start (): Promise<void> {
87
- if (this.started || this.routers.length === 0 || this.timeoutId != null || this.refreshManagerInit.enabled === false) {
88
- return
89
- }
90
-
91
- this.timeoutId = setDelayedInterval(
92
- this._findClosestPeersTask, this.refreshManagerInit.interval, this.refreshManagerInit.bootDelay
93
- )
94
-
95
- this.started = true
96
- }
97
-
98
- /**
99
- * Recurrent task to find closest peers and add their addresses to the Address Book.
100
- */
101
- async _findClosestPeersTask (): Promise<void> {
102
- if (this.abortController != null) {
103
- // we are already running the query
104
- return
105
- }
106
-
107
- this.abortController = new AbortController()
108
-
109
- const signal = anySignal([this.abortController.signal, AbortSignal.timeout(this.refreshManagerInit.timeout ?? 10e3)])
110
-
111
- try {
112
- // this controller may be used while dialing lots of peers so prevent MaxListenersExceededWarning
113
- // appearing in the console
114
- try {
115
- setMaxListeners?.(Infinity, signal)
116
- } catch {}
117
-
118
- // nb getClosestPeers adds the addresses to the address book
119
- await drain(this.getClosestPeers(this.components.peerId.toBytes(), { signal }))
120
- } catch (err: any) {
121
- log.error(err)
122
- } finally {
123
- this.abortController?.abort()
124
- this.abortController = undefined
125
- signal.clear()
126
- }
127
- }
128
-
129
- /**
130
- * Stop peer routing service.
131
- */
132
- async stop (): Promise<void> {
133
- clearDelayedInterval(this.timeoutId)
134
-
135
- // abort query if it is in-flight
136
- this.abortController?.abort()
137
-
138
- this.started = false
139
37
  }
140
38
 
141
39
  /**
@@ -12,8 +12,6 @@ import { trackedMap } from '@libp2p/tracked-map'
12
12
  import type { Metrics } from '@libp2p/interface-metrics'
13
13
  import type { AddressManager } from '@libp2p/interface-address-manager'
14
14
  import type { Libp2pEvents } from '@libp2p/interface-libp2p'
15
- import type { PeerStore } from '@libp2p/interface-peer-store'
16
- import type { PeerId } from '@libp2p/interface-peer-id'
17
15
 
18
16
  const log = logger('libp2p:transports')
19
17
 
@@ -26,8 +24,6 @@ export interface DefaultTransportManagerComponents {
26
24
  addressManager: AddressManager
27
25
  upgrader: Upgrader
28
26
  events: EventEmitter<Libp2pEvents>
29
- peerId: PeerId
30
- peerStore: PeerStore
31
27
  }
32
28
 
33
29
  export class DefaultTransportManager implements TransportManager, Startable {
@@ -157,6 +153,13 @@ export class DefaultTransportManager implements TransportManager, Startable {
157
153
  return Array.of(...this.transports.values())
158
154
  }
159
155
 
156
+ /**
157
+ * Returns all the listener instances
158
+ */
159
+ getListeners (): Listener[] {
160
+ return Array.of(...this.listeners.values()).flat()
161
+ }
162
+
160
163
  /**
161
164
  * Finds a transport that matches the given Multiaddr
162
165
  */
@@ -192,7 +195,7 @@ export class DefaultTransportManager implements TransportManager, Startable {
192
195
  upgrader: this.components.upgrader
193
196
  })
194
197
 
195
- let listeners = this.listeners.get(key)
198
+ let listeners: Listener[] = this.listeners.get(key) ?? []
196
199
 
197
200
  if (listeners == null) {
198
201
  listeners = []
@@ -203,30 +206,19 @@ export class DefaultTransportManager implements TransportManager, Startable {
203
206
 
204
207
  // Track listen/close events
205
208
  listener.addEventListener('listening', () => {
206
- this.components.peerStore.patch(this.components.peerId, {
207
- multiaddrs: this.getAddrs()
209
+ this.components.events.safeDispatchEvent('transport:listening', {
210
+ detail: listener
208
211
  })
209
- .then(() => {
210
- this.components.events.safeDispatchEvent('transport:listening', {
211
- detail: listener
212
- })
213
- })
214
- .catch(err => {
215
- log.error('error while updating peer record after listener began listening', err)
216
- })
217
212
  })
218
213
  listener.addEventListener('close', () => {
219
- this.components.peerStore.patch(this.components.peerId, {
220
- multiaddrs: this.getAddrs()
214
+ const index = listeners.findIndex(l => l === listener)
215
+
216
+ // remove the listener
217
+ listeners.splice(index, 1)
218
+
219
+ this.components.events.safeDispatchEvent('transport:close', {
220
+ detail: listener
221
221
  })
222
- .then(() => {
223
- this.components.events.safeDispatchEvent('transport:close', {
224
- detail: listener
225
- })
226
- })
227
- .catch(err => {
228
- log.error('error while updating peer record after listener stopped listening', err)
229
- })
230
222
  })
231
223
 
232
224
  // We need to attempt to listen on everything
package/src/upgrader.ts CHANGED
@@ -73,7 +73,6 @@ function findIncomingStreamLimit (protocol: string, registrar: Registrar): numbe
73
73
  function findOutgoingStreamLimit (protocol: string, registrar: Registrar): number | undefined {
74
74
  try {
75
75
  const { options } = registrar.getHandler(protocol)
76
-
77
76
  return options.maxOutboundStreams
78
77
  } catch (err: any) {
79
78
  if (err.code !== codes.ERR_NO_HANDLER_FOR_PROTOCOL) {
@@ -392,9 +391,10 @@ export class DefaultUpgrader implements Upgrader {
392
391
  const streamCount = countStreams(protocol, 'inbound', connection)
393
392
 
394
393
  if (streamCount === incomingLimit) {
395
- muxedStream.abort(new CodeError(`Too many inbound protocol streams for protocol "${protocol}" - limit ${incomingLimit}`, codes.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS))
394
+ const err = new CodeError(`Too many inbound protocol streams for protocol "${protocol}" - limit ${incomingLimit}`, codes.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS)
395
+ muxedStream.abort(err)
396
396
 
397
- return
397
+ throw err
398
398
  }
399
399
 
400
400
  // after the handshake the returned stream can have early data so override
@@ -50,7 +50,7 @@ export interface UPnPNATInit {
50
50
  /**
51
51
  * Whether to automatically refresh UPnP port mappings when their TTL is reached
52
52
  */
53
- keepAlive: boolean
53
+ keepAlive?: boolean
54
54
 
55
55
  /**
56
56
  * Pass a value to use instead of auto-detection
@@ -205,7 +205,7 @@ class UPnPNAT implements Startable {
205
205
  }
206
206
  }
207
207
 
208
- export function uPnPNAT (init: UPnPNATInit): (components: UPnPNATComponents) => {} {
208
+ export function uPnPNATService (init: UPnPNATInit = {}): (components: UPnPNATComponents) => {} {
209
209
  return (components: UPnPNATComponents) => {
210
210
  return new UPnPNAT(components, init)
211
211
  }
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '0.44.0-e3deaa40'
1
+ export const version = '0.44.0-ef7a5f67'
2
2
  export const name = 'libp2p'