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.
- package/dist/index.min.js +17 -17
- package/dist/src/address-manager/index.d.ts +4 -0
- package/dist/src/address-manager/index.d.ts.map +1 -1
- package/dist/src/address-manager/index.js +32 -4
- package/dist/src/address-manager/index.js.map +1 -1
- package/dist/src/address-manager/utils.d.ts +2 -0
- package/dist/src/address-manager/utils.d.ts.map +1 -0
- package/dist/src/address-manager/utils.js +12 -0
- package/dist/src/address-manager/utils.js.map +1 -0
- package/dist/src/autonat/constants.d.ts +16 -2
- package/dist/src/autonat/constants.d.ts.map +1 -1
- package/dist/src/autonat/constants.js +16 -2
- package/dist/src/autonat/constants.js.map +1 -1
- package/dist/src/autonat/index.d.ts +9 -30
- package/dist/src/autonat/index.d.ts.map +1 -1
- package/dist/src/autonat/index.js +22 -18
- package/dist/src/autonat/index.js.map +1 -1
- package/dist/src/circuit-relay/server/index.d.ts.map +1 -1
- package/dist/src/circuit-relay/server/index.js +3 -0
- package/dist/src/circuit-relay/server/index.js.map +1 -1
- package/dist/src/circuit-relay/transport/discovery.js +2 -2
- package/dist/src/circuit-relay/transport/discovery.js.map +1 -1
- package/dist/src/circuit-relay/transport/index.d.ts.map +1 -1
- package/dist/src/circuit-relay/transport/index.js +4 -6
- package/dist/src/circuit-relay/transport/index.js.map +1 -1
- package/dist/src/circuit-relay/transport/listener.d.ts +0 -3
- package/dist/src/circuit-relay/transport/listener.d.ts.map +1 -1
- package/dist/src/circuit-relay/transport/listener.js +27 -24
- package/dist/src/circuit-relay/transport/listener.js.map +1 -1
- package/dist/src/circuit-relay/transport/reservation-store.d.ts +2 -4
- package/dist/src/circuit-relay/transport/reservation-store.d.ts.map +1 -1
- package/dist/src/circuit-relay/transport/reservation-store.js +28 -26
- package/dist/src/circuit-relay/transport/reservation-store.js.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +0 -55
- package/dist/src/config.js.map +1 -1
- package/dist/src/connection-manager/dial-queue.d.ts.map +1 -1
- package/dist/src/connection-manager/dial-queue.js +11 -0
- package/dist/src/connection-manager/dial-queue.js.map +1 -1
- package/dist/src/identify/identify.d.ts +53 -0
- package/dist/src/identify/identify.d.ts.map +1 -0
- package/dist/src/identify/identify.js +405 -0
- package/dist/src/identify/identify.js.map +1 -0
- package/dist/src/identify/index.d.ts +1 -15
- package/dist/src/identify/index.d.ts.map +1 -1
- package/dist/src/identify/index.js +2 -387
- package/dist/src/identify/index.js.map +1 -1
- package/dist/src/index.d.ts +2 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/libp2p.d.ts.map +1 -1
- package/dist/src/libp2p.js +0 -1
- package/dist/src/libp2p.js.map +1 -1
- package/dist/src/peer-routing.d.ts +1 -38
- package/dist/src/peer-routing.d.ts.map +1 -1
- package/dist/src/peer-routing.js +0 -60
- package/dist/src/peer-routing.js.map +1 -1
- package/dist/src/transport-manager.d.ts +5 -5
- package/dist/src/transport-manager.d.ts.map +1 -1
- package/dist/src/transport-manager.js +14 -21
- package/dist/src/transport-manager.js.map +1 -1
- package/dist/src/upgrader.d.ts.map +1 -1
- package/dist/src/upgrader.js +3 -2
- package/dist/src/upgrader.js.map +1 -1
- package/dist/src/upnp-nat/index.d.ts +2 -2
- package/dist/src/upnp-nat/index.d.ts.map +1 -1
- package/dist/src/upnp-nat/index.js +1 -1
- package/dist/src/upnp-nat/index.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.d.ts.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/package.json +5 -5
- package/src/address-manager/index.ts +42 -4
- package/src/address-manager/utils.ts +14 -0
- package/src/autonat/constants.ts +17 -2
- package/src/autonat/index.ts +37 -30
- package/src/circuit-relay/server/index.ts +4 -0
- package/src/circuit-relay/transport/discovery.ts +2 -2
- package/src/circuit-relay/transport/index.ts +4 -7
- package/src/circuit-relay/transport/listener.ts +35 -29
- package/src/circuit-relay/transport/reservation-store.ts +21 -15
- package/src/config.ts +0 -55
- package/src/connection-manager/dial-queue.ts +11 -0
- package/src/identify/identify.ts +518 -0
- package/src/identify/index.ts +5 -505
- package/src/index.ts +2 -7
- package/src/libp2p.ts +0 -1
- package/src/peer-routing.ts +1 -103
- package/src/transport-manager.ts +17 -25
- package/src/upgrader.ts +3 -3
- package/src/upnp-nat/index.ts +2 -2
- package/src/version.ts +1 -1
package/src/peer-routing.ts
CHANGED
|
@@ -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
|
|
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
|
/**
|
package/src/transport-manager.ts
CHANGED
|
@@ -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.
|
|
207
|
-
|
|
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
|
-
|
|
220
|
-
|
|
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
|
-
|
|
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
|
-
|
|
397
|
+
throw err
|
|
398
398
|
}
|
|
399
399
|
|
|
400
400
|
// after the handshake the returned stream can have early data so override
|
package/src/upnp-nat/index.ts
CHANGED
|
@@ -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
|
|
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
|
|
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-
|
|
1
|
+
export const version = '0.44.0-ef7a5f67'
|
|
2
2
|
export const name = 'libp2p'
|