libp2p 0.46.20 → 0.46.21-0b4a2ee79
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 +53 -40
- package/dist/index.min.js +40 -28
- package/dist/src/address-manager/index.d.ts +3 -1
- package/dist/src/address-manager/index.d.ts.map +1 -1
- package/dist/src/address-manager/index.js +3 -3
- package/dist/src/address-manager/index.js.map +1 -1
- package/dist/src/components.d.ts +3 -1
- package/dist/src/components.d.ts.map +1 -1
- package/dist/src/components.js.map +1 -1
- package/dist/src/connection/index.d.ts +2 -2
- package/dist/src/connection/index.d.ts.map +1 -1
- package/dist/src/connection/index.js +9 -9
- package/dist/src/connection/index.js.map +1 -1
- package/dist/src/connection-manager/auto-dial.d.ts +1 -1
- package/dist/src/connection-manager/auto-dial.d.ts.map +1 -1
- package/dist/src/connection-manager/auto-dial.js +21 -21
- package/dist/src/connection-manager/auto-dial.js.map +1 -1
- package/dist/src/connection-manager/connection-pruner.d.ts +1 -1
- package/dist/src/connection-manager/connection-pruner.d.ts.map +1 -1
- package/dist/src/connection-manager/connection-pruner.js +8 -8
- package/dist/src/connection-manager/connection-pruner.js.map +1 -1
- package/dist/src/connection-manager/constants.defaults.d.ts +0 -4
- package/dist/src/connection-manager/constants.defaults.d.ts.map +1 -1
- package/dist/src/connection-manager/constants.defaults.js +0 -4
- package/dist/src/connection-manager/constants.defaults.js.map +1 -1
- package/dist/src/connection-manager/dial-queue.d.ts +1 -3
- package/dist/src/connection-manager/dial-queue.d.ts.map +1 -1
- package/dist/src/connection-manager/dial-queue.js +30 -37
- package/dist/src/connection-manager/dial-queue.js.map +1 -1
- package/dist/src/connection-manager/index.d.ts +1 -8
- package/dist/src/connection-manager/index.d.ts.map +1 -1
- package/dist/src/connection-manager/index.js +16 -17
- package/dist/src/connection-manager/index.js.map +1 -1
- package/dist/src/content-routing/index.js +1 -1
- package/dist/src/content-routing/index.js.map +1 -1
- package/dist/src/errors.d.ts +0 -2
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +0 -2
- package/dist/src/errors.js.map +1 -1
- package/dist/src/get-peer.d.ts.map +1 -1
- package/dist/src/get-peer.js +0 -3
- package/dist/src/get-peer.js.map +1 -1
- package/dist/src/index.d.ts +5 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/libp2p.d.ts +1 -2
- package/dist/src/libp2p.d.ts.map +1 -1
- package/dist/src/libp2p.js +23 -54
- package/dist/src/libp2p.js.map +1 -1
- package/dist/src/peer-routing.d.ts +5 -1
- package/dist/src/peer-routing.d.ts.map +1 -1
- package/dist/src/peer-routing.js +11 -8
- package/dist/src/peer-routing.js.map +1 -1
- package/dist/src/registrar.d.ts +3 -0
- package/dist/src/registrar.d.ts.map +1 -1
- package/dist/src/registrar.js +3 -3
- package/dist/src/registrar.js.map +1 -1
- package/dist/src/transport-manager.d.ts +3 -1
- package/dist/src/transport-manager.d.ts.map +1 -1
- package/dist/src/transport-manager.js +10 -10
- package/dist/src/transport-manager.js.map +1 -1
- package/dist/src/upgrader.d.ts +2 -2
- package/dist/src/upgrader.d.ts.map +1 -1
- package/dist/src/upgrader.js +75 -37
- package/dist/src/upgrader.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 +34 -106
- package/src/address-manager/index.ts +5 -5
- package/src/components.ts +3 -1
- package/src/connection/index.ts +9 -10
- package/src/connection-manager/auto-dial.ts +21 -21
- package/src/connection-manager/connection-pruner.ts +8 -8
- package/src/connection-manager/constants.defaults.ts +0 -5
- package/src/connection-manager/dial-queue.ts +29 -38
- package/src/connection-manager/index.ts +16 -25
- package/src/content-routing/index.ts +1 -1
- package/src/errors.ts +0 -2
- package/src/get-peer.ts +0 -4
- package/src/index.ts +6 -7
- package/src/libp2p.ts +23 -61
- package/src/peer-routing.ts +15 -10
- package/src/registrar.ts +6 -5
- package/src/transport-manager.ts +12 -12
- package/src/upgrader.ts +100 -40
- package/src/version.ts +1 -1
- package/dist/src/autonat/constants.d.ts +0 -18
- package/dist/src/autonat/constants.d.ts.map +0 -1
- package/dist/src/autonat/constants.js +0 -18
- package/dist/src/autonat/constants.js.map +0 -1
- package/dist/src/autonat/index.d.ts +0 -62
- package/dist/src/autonat/index.d.ts.map +0 -1
- package/dist/src/autonat/index.js +0 -447
- package/dist/src/autonat/index.js.map +0 -1
- package/dist/src/autonat/pb/index.d.ts +0 -57
- package/dist/src/autonat/pb/index.d.ts.map +0 -1
- package/dist/src/autonat/pb/index.js +0 -250
- package/dist/src/autonat/pb/index.js.map +0 -1
- package/dist/src/circuit-relay/constants.d.ts +0 -50
- package/dist/src/circuit-relay/constants.d.ts.map +0 -1
- package/dist/src/circuit-relay/constants.js +0 -56
- package/dist/src/circuit-relay/constants.js.map +0 -1
- package/dist/src/circuit-relay/index.d.ts +0 -55
- package/dist/src/circuit-relay/index.d.ts.map +0 -1
- package/dist/src/circuit-relay/index.js +0 -38
- package/dist/src/circuit-relay/index.js.map +0 -1
- package/dist/src/circuit-relay/pb/index.d.ts +0 -93
- package/dist/src/circuit-relay/pb/index.d.ts.map +0 -1
- package/dist/src/circuit-relay/pb/index.js +0 -425
- package/dist/src/circuit-relay/pb/index.js.map +0 -1
- package/dist/src/circuit-relay/server/advert-service.d.ts +0 -43
- package/dist/src/circuit-relay/server/advert-service.d.ts.map +0 -1
- package/dist/src/circuit-relay/server/advert-service.js +0 -73
- package/dist/src/circuit-relay/server/advert-service.js.map +0 -1
- package/dist/src/circuit-relay/server/index.d.ts +0 -65
- package/dist/src/circuit-relay/server/index.d.ts.map +0 -1
- package/dist/src/circuit-relay/server/index.js +0 -312
- package/dist/src/circuit-relay/server/index.js.map +0 -1
- package/dist/src/circuit-relay/server/reservation-store.d.ts +0 -49
- package/dist/src/circuit-relay/server/reservation-store.d.ts.map +0 -1
- package/dist/src/circuit-relay/server/reservation-store.js +0 -65
- package/dist/src/circuit-relay/server/reservation-store.js.map +0 -1
- package/dist/src/circuit-relay/server/reservation-voucher.d.ts +0 -18
- package/dist/src/circuit-relay/server/reservation-voucher.d.ts.map +0 -1
- package/dist/src/circuit-relay/server/reservation-voucher.js +0 -36
- package/dist/src/circuit-relay/server/reservation-voucher.js.map +0 -1
- package/dist/src/circuit-relay/transport/discovery.d.ts +0 -45
- package/dist/src/circuit-relay/transport/discovery.d.ts.map +0 -1
- package/dist/src/circuit-relay/transport/discovery.js +0 -97
- package/dist/src/circuit-relay/transport/discovery.js.map +0 -1
- package/dist/src/circuit-relay/transport/index.d.ts +0 -57
- package/dist/src/circuit-relay/transport/index.d.ts.map +0 -1
- package/dist/src/circuit-relay/transport/index.js +0 -276
- package/dist/src/circuit-relay/transport/index.js.map +0 -1
- package/dist/src/circuit-relay/transport/listener.d.ts +0 -9
- package/dist/src/circuit-relay/transport/listener.d.ts.map +0 -1
- package/dist/src/circuit-relay/transport/listener.js +0 -66
- package/dist/src/circuit-relay/transport/listener.js.map +0 -1
- package/dist/src/circuit-relay/transport/reservation-store.d.ts +0 -72
- package/dist/src/circuit-relay/transport/reservation-store.d.ts.map +0 -1
- package/dist/src/circuit-relay/transport/reservation-store.js +0 -209
- package/dist/src/circuit-relay/transport/reservation-store.js.map +0 -1
- package/dist/src/circuit-relay/utils.d.ts +0 -13
- package/dist/src/circuit-relay/utils.d.ts.map +0 -1
- package/dist/src/circuit-relay/utils.js +0 -108
- package/dist/src/circuit-relay/utils.js.map +0 -1
- package/dist/src/dcutr/dcutr.d.ts +0 -43
- package/dist/src/dcutr/dcutr.d.ts.map +0 -1
- package/dist/src/dcutr/dcutr.js +0 -313
- package/dist/src/dcutr/dcutr.js.map +0 -1
- package/dist/src/dcutr/index.d.ts +0 -92
- package/dist/src/dcutr/index.d.ts.map +0 -1
- package/dist/src/dcutr/index.js +0 -63
- package/dist/src/dcutr/index.js.map +0 -1
- package/dist/src/dcutr/pb/message.d.ts +0 -20
- package/dist/src/dcutr/pb/message.d.ts.map +0 -1
- package/dist/src/dcutr/pb/message.js +0 -77
- package/dist/src/dcutr/pb/message.js.map +0 -1
- package/dist/src/dcutr/utils.d.ts +0 -8
- package/dist/src/dcutr/utils.d.ts.map +0 -1
- package/dist/src/dcutr/utils.js +0 -27
- package/dist/src/dcutr/utils.js.map +0 -1
- package/dist/src/fetch/constants.d.ts +0 -3
- package/dist/src/fetch/constants.d.ts.map +0 -1
- package/dist/src/fetch/constants.js +0 -4
- package/dist/src/fetch/constants.js.map +0 -1
- package/dist/src/fetch/index.d.ts +0 -61
- package/dist/src/fetch/index.d.ts.map +0 -1
- package/dist/src/fetch/index.js +0 -205
- package/dist/src/fetch/index.js.map +0 -1
- package/dist/src/fetch/pb/proto.d.ts +0 -28
- package/dist/src/fetch/pb/proto.d.ts.map +0 -1
- package/dist/src/fetch/pb/proto.js +0 -120
- package/dist/src/fetch/pb/proto.js.map +0 -1
- package/dist/src/identify/consts.d.ts +0 -10
- package/dist/src/identify/consts.d.ts.map +0 -1
- package/dist/src/identify/consts.js +0 -11
- package/dist/src/identify/consts.js.map +0 -1
- package/dist/src/identify/identify.d.ts +0 -54
- package/dist/src/identify/identify.d.ts.map +0 -1
- package/dist/src/identify/identify.js +0 -447
- package/dist/src/identify/identify.js.map +0 -1
- package/dist/src/identify/index.d.ts +0 -72
- package/dist/src/identify/index.d.ts.map +0 -1
- package/dist/src/identify/index.js +0 -15
- package/dist/src/identify/index.js.map +0 -1
- package/dist/src/identify/pb/message.d.ts +0 -17
- package/dist/src/identify/pb/message.d.ts.map +0 -1
- package/dist/src/identify/pb/message.js +0 -98
- package/dist/src/identify/pb/message.js.map +0 -1
- package/dist/src/insecure/index.d.ts +0 -26
- package/dist/src/insecure/index.d.ts.map +0 -1
- package/dist/src/insecure/index.js +0 -110
- package/dist/src/insecure/index.js.map +0 -1
- package/dist/src/insecure/pb/proto.d.ts +0 -30
- package/dist/src/insecure/pb/proto.d.ts.map +0 -1
- package/dist/src/insecure/pb/proto.js +0 -127
- package/dist/src/insecure/pb/proto.js.map +0 -1
- package/dist/src/ping/constants.d.ts +0 -9
- package/dist/src/ping/constants.d.ts.map +0 -1
- package/dist/src/ping/constants.js +0 -15
- package/dist/src/ping/constants.js.map +0 -1
- package/dist/src/ping/index.d.ts +0 -24
- package/dist/src/ping/index.d.ts.map +0 -1
- package/dist/src/ping/index.js +0 -115
- package/dist/src/ping/index.js.map +0 -1
- package/dist/src/pnet/crypto.d.ts +0 -18
- package/dist/src/pnet/crypto.d.ts.map +0 -1
- package/dist/src/pnet/crypto.js +0 -60
- package/dist/src/pnet/crypto.js.map +0 -1
- package/dist/src/pnet/errors.d.ts +0 -6
- package/dist/src/pnet/errors.d.ts.map +0 -1
- package/dist/src/pnet/errors.js +0 -6
- package/dist/src/pnet/errors.js.map +0 -1
- package/dist/src/pnet/index.d.ts +0 -31
- package/dist/src/pnet/index.d.ts.map +0 -1
- package/dist/src/pnet/index.js +0 -97
- package/dist/src/pnet/index.js.map +0 -1
- package/dist/src/pnet/key-generator.d.ts +0 -11
- package/dist/src/pnet/key-generator.d.ts.map +0 -1
- package/dist/src/pnet/key-generator.js +0 -22
- package/dist/src/pnet/key-generator.js.map +0 -1
- package/dist/src/upnp-nat/index.d.ts +0 -71
- package/dist/src/upnp-nat/index.d.ts.map +0 -1
- package/dist/src/upnp-nat/index.js +0 -136
- package/dist/src/upnp-nat/index.js.map +0 -1
- package/dist/src/utils/peer-job-queue.d.ts +0 -33
- package/dist/src/utils/peer-job-queue.d.ts.map +0 -1
- package/dist/src/utils/peer-job-queue.js +0 -82
- package/dist/src/utils/peer-job-queue.js.map +0 -1
- package/dist/typedoc-urls.json +0 -71
- package/src/autonat/constants.ts +0 -19
- package/src/autonat/index.ts +0 -597
- package/src/autonat/pb/index.proto +0 -35
- package/src/autonat/pb/index.ts +0 -320
- package/src/circuit-relay/constants.ts +0 -72
- package/src/circuit-relay/index.ts +0 -59
- package/src/circuit-relay/pb/index.proto +0 -67
- package/src/circuit-relay/pb/index.ts +0 -539
- package/src/circuit-relay/server/advert-service.ts +0 -108
- package/src/circuit-relay/server/index.ts +0 -443
- package/src/circuit-relay/server/reservation-store.ts +0 -116
- package/src/circuit-relay/server/reservation-voucher.ts +0 -51
- package/src/circuit-relay/transport/discovery.ts +0 -136
- package/src/circuit-relay/transport/index.ts +0 -396
- package/src/circuit-relay/transport/listener.ts +0 -97
- package/src/circuit-relay/transport/reservation-store.ts +0 -312
- package/src/circuit-relay/utils.ts +0 -136
- package/src/dcutr/dcutr.ts +0 -378
- package/src/dcutr/index.ts +0 -102
- package/src/dcutr/pb/message.proto +0 -12
- package/src/dcutr/pb/message.ts +0 -96
- package/src/dcutr/utils.ts +0 -33
- package/src/fetch/README.md +0 -41
- package/src/fetch/constants.ts +0 -3
- package/src/fetch/index.ts +0 -315
- package/src/fetch/pb/proto.proto +0 -15
- package/src/fetch/pb/proto.ts +0 -153
- package/src/identify/README.md +0 -13
- package/src/identify/consts.ts +0 -12
- package/src/identify/identify.ts +0 -561
- package/src/identify/index.ts +0 -90
- package/src/identify/pb/message.proto +0 -30
- package/src/identify/pb/message.ts +0 -126
- package/src/insecure/index.ts +0 -138
- package/src/insecure/pb/proto.proto +0 -18
- package/src/insecure/pb/proto.ts +0 -161
- package/src/ping/constants.ts +0 -15
- package/src/ping/index.ts +0 -170
- package/src/pnet/README.md +0 -68
- package/src/pnet/crypto.ts +0 -67
- package/src/pnet/errors.ts +0 -5
- package/src/pnet/index.ts +0 -126
- package/src/pnet/key-generator.ts +0 -23
- package/src/upnp-nat/index.ts +0 -212
- package/src/utils/peer-job-queue.ts +0 -119
package/src/libp2p.ts
CHANGED
|
@@ -4,7 +4,6 @@ import { CodeError } from '@libp2p/interface/errors'
|
|
|
4
4
|
import { TypedEventEmitter, CustomEvent, setMaxListeners } from '@libp2p/interface/events'
|
|
5
5
|
import { peerDiscovery } from '@libp2p/interface/peer-discovery'
|
|
6
6
|
import { type PeerRouting, peerRouting } from '@libp2p/interface/peer-routing'
|
|
7
|
-
import { DefaultKeyChain } from '@libp2p/keychain'
|
|
8
7
|
import { defaultLogger } from '@libp2p/logger'
|
|
9
8
|
import { PeerSet } from '@libp2p/peer-collections'
|
|
10
9
|
import { peerIdFromString } from '@libp2p/peer-id'
|
|
@@ -12,7 +11,6 @@ import { createEd25519PeerId } from '@libp2p/peer-id-factory'
|
|
|
12
11
|
import { PersistentPeerStore } from '@libp2p/peer-store'
|
|
13
12
|
import { isMultiaddr, type Multiaddr } from '@multiformats/multiaddr'
|
|
14
13
|
import { MemoryDatastore } from 'datastore-core/memory'
|
|
15
|
-
import mergeOptions from 'merge-options'
|
|
16
14
|
import { concat as uint8ArrayConcat } from 'uint8arrays/concat'
|
|
17
15
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
18
16
|
import { DefaultAddressManager } from './address-manager/index.js'
|
|
@@ -26,32 +24,30 @@ import { DefaultPeerRouting } from './peer-routing.js'
|
|
|
26
24
|
import { DefaultRegistrar } from './registrar.js'
|
|
27
25
|
import { DefaultTransportManager } from './transport-manager.js'
|
|
28
26
|
import { DefaultUpgrader } from './upgrader.js'
|
|
27
|
+
import * as pkg from './version.js'
|
|
29
28
|
import type { Components } from './components.js'
|
|
30
29
|
import type { Libp2p, Libp2pInit, Libp2pOptions } from './index.js'
|
|
31
30
|
import type { Libp2pEvents, PendingDial, ServiceMap, AbortOptions, ComponentLogger, Logger } from '@libp2p/interface'
|
|
32
31
|
import type { Connection, NewStreamOptions, Stream } from '@libp2p/interface/connection'
|
|
33
|
-
import type { KeyChain } from '@libp2p/interface/keychain'
|
|
34
32
|
import type { Metrics } from '@libp2p/interface/metrics'
|
|
35
33
|
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
36
34
|
import type { PeerInfo } from '@libp2p/interface/peer-info'
|
|
37
35
|
import type { PeerStore } from '@libp2p/interface/peer-store'
|
|
38
36
|
import type { Topology } from '@libp2p/interface/topology'
|
|
39
37
|
import type { StreamHandler, StreamHandlerOptions } from '@libp2p/interface-internal/registrar'
|
|
40
|
-
import type { Datastore } from 'interface-datastore'
|
|
41
38
|
|
|
42
39
|
export class Libp2pNode<T extends ServiceMap = Record<string, unknown>> extends TypedEventEmitter<Libp2pEvents> implements Libp2p<T> {
|
|
43
40
|
public peerId: PeerId
|
|
44
41
|
public peerStore: PeerStore
|
|
45
42
|
public contentRouting: ContentRouting
|
|
46
43
|
public peerRouting: PeerRouting
|
|
47
|
-
public keychain: KeyChain
|
|
48
44
|
public metrics?: Metrics
|
|
49
45
|
public services: T
|
|
50
46
|
public logger: ComponentLogger
|
|
51
47
|
|
|
52
48
|
public components: Components
|
|
53
49
|
#started: boolean
|
|
54
|
-
readonly
|
|
50
|
+
private readonly log: Logger
|
|
55
51
|
|
|
56
52
|
constructor (init: Libp2pInit<T>) {
|
|
57
53
|
super()
|
|
@@ -75,11 +71,15 @@ export class Libp2pNode<T extends ServiceMap = Record<string, unknown>> extends
|
|
|
75
71
|
this.#started = false
|
|
76
72
|
this.peerId = init.peerId
|
|
77
73
|
this.logger = init.logger ?? defaultLogger()
|
|
78
|
-
this
|
|
74
|
+
this.log = this.logger.forComponent('libp2p')
|
|
79
75
|
// @ts-expect-error {} may not be of type T
|
|
80
76
|
this.services = {}
|
|
81
77
|
const components = this.components = defaultComponents({
|
|
82
78
|
peerId: init.peerId,
|
|
79
|
+
nodeInfo: init.nodeInfo ?? {
|
|
80
|
+
name: pkg.name,
|
|
81
|
+
version: pkg.version
|
|
82
|
+
},
|
|
83
83
|
logger: this.logger,
|
|
84
84
|
events,
|
|
85
85
|
datastore: init.datastore ?? new MemoryDatastore(),
|
|
@@ -101,8 +101,7 @@ export class Libp2pNode<T extends ServiceMap = Record<string, unknown>> extends
|
|
|
101
101
|
if (evt.detail.previous == null) {
|
|
102
102
|
const peerInfo: PeerInfo = {
|
|
103
103
|
id: evt.detail.peer.id,
|
|
104
|
-
multiaddrs: evt.detail.peer.addresses.map(a => a.multiaddr)
|
|
105
|
-
protocols: evt.detail.peer.protocols
|
|
104
|
+
multiaddrs: evt.detail.peer.addresses.map(a => a.multiaddr)
|
|
106
105
|
}
|
|
107
106
|
|
|
108
107
|
components.events.safeDispatchEvent('peer:discovery', { detail: peerInfo })
|
|
@@ -133,13 +132,6 @@ export class Libp2pNode<T extends ServiceMap = Record<string, unknown>> extends
|
|
|
133
132
|
// Addresses {listen, announce, noAnnounce}
|
|
134
133
|
this.configureComponent('addressManager', new DefaultAddressManager(this.components, init.addresses))
|
|
135
134
|
|
|
136
|
-
// Create keychain
|
|
137
|
-
const keychainOpts = DefaultKeyChain.generateOptions()
|
|
138
|
-
this.keychain = this.configureComponent('keyChain', new DefaultKeyChain(this.components, {
|
|
139
|
-
...keychainOpts,
|
|
140
|
-
...init.keychain
|
|
141
|
-
}))
|
|
142
|
-
|
|
143
135
|
// Peer routers
|
|
144
136
|
const peerRouters: PeerRouting[] = (init.peerRouters ?? []).map((fn, index) => this.configureComponent(`peer-router-${index}`, fn(this.components)))
|
|
145
137
|
this.peerRouting = this.components.peerRouting = this.configureComponent('peerRouting', new DefaultPeerRouting(this.components, {
|
|
@@ -173,7 +165,7 @@ export class Libp2pNode<T extends ServiceMap = Record<string, unknown>> extends
|
|
|
173
165
|
const service: any = createService(this.components)
|
|
174
166
|
|
|
175
167
|
if (service == null) {
|
|
176
|
-
this
|
|
168
|
+
this.log.error('service factory %s returned null or undefined instance', name)
|
|
177
169
|
continue
|
|
178
170
|
}
|
|
179
171
|
|
|
@@ -181,17 +173,17 @@ export class Libp2pNode<T extends ServiceMap = Record<string, unknown>> extends
|
|
|
181
173
|
this.configureComponent(name, service)
|
|
182
174
|
|
|
183
175
|
if (service[contentRouting] != null) {
|
|
184
|
-
this
|
|
176
|
+
this.log('registering service %s for content routing', name)
|
|
185
177
|
contentRouters.push(service[contentRouting])
|
|
186
178
|
}
|
|
187
179
|
|
|
188
180
|
if (service[peerRouting] != null) {
|
|
189
|
-
this
|
|
181
|
+
this.log('registering service %s for peer routing', name)
|
|
190
182
|
peerRouters.push(service[peerRouting])
|
|
191
183
|
}
|
|
192
184
|
|
|
193
185
|
if (service[peerDiscovery] != null) {
|
|
194
|
-
this
|
|
186
|
+
this.log('registering service %s for peer discovery', name)
|
|
195
187
|
service[peerDiscovery].addEventListener('peer', (evt: CustomEvent<PeerInfo>) => {
|
|
196
188
|
this.#onDiscoveryPeer(evt)
|
|
197
189
|
})
|
|
@@ -202,7 +194,7 @@ export class Libp2pNode<T extends ServiceMap = Record<string, unknown>> extends
|
|
|
202
194
|
|
|
203
195
|
private configureComponent <T> (name: string, component: T): T {
|
|
204
196
|
if (component == null) {
|
|
205
|
-
this
|
|
197
|
+
this.log.error('component %s was null or undefined', name)
|
|
206
198
|
}
|
|
207
199
|
|
|
208
200
|
this.components[name] = component
|
|
@@ -220,14 +212,7 @@ export class Libp2pNode<T extends ServiceMap = Record<string, unknown>> extends
|
|
|
220
212
|
|
|
221
213
|
this.#started = true
|
|
222
214
|
|
|
223
|
-
this
|
|
224
|
-
|
|
225
|
-
const keys = await this.keychain.listKeys()
|
|
226
|
-
|
|
227
|
-
if (keys.find(key => key.name === 'self') == null) {
|
|
228
|
-
this.#log('importing self key into keychain')
|
|
229
|
-
await this.keychain.importPeer('self', this.components.peerId)
|
|
230
|
-
}
|
|
215
|
+
this.log('libp2p is starting')
|
|
231
216
|
|
|
232
217
|
try {
|
|
233
218
|
await this.components.beforeStart?.()
|
|
@@ -235,9 +220,9 @@ export class Libp2pNode<T extends ServiceMap = Record<string, unknown>> extends
|
|
|
235
220
|
await this.components.afterStart?.()
|
|
236
221
|
|
|
237
222
|
this.safeDispatchEvent('start', { detail: this })
|
|
238
|
-
this
|
|
223
|
+
this.log('libp2p has started')
|
|
239
224
|
} catch (err: any) {
|
|
240
|
-
this
|
|
225
|
+
this.log.error('An error occurred starting libp2p', err)
|
|
241
226
|
await this.stop()
|
|
242
227
|
throw err
|
|
243
228
|
}
|
|
@@ -251,7 +236,7 @@ export class Libp2pNode<T extends ServiceMap = Record<string, unknown>> extends
|
|
|
251
236
|
return
|
|
252
237
|
}
|
|
253
238
|
|
|
254
|
-
this
|
|
239
|
+
this.log('libp2p is stopping')
|
|
255
240
|
|
|
256
241
|
this.#started = false
|
|
257
242
|
|
|
@@ -260,7 +245,7 @@ export class Libp2pNode<T extends ServiceMap = Record<string, unknown>> extends
|
|
|
260
245
|
await this.components.afterStop?.()
|
|
261
246
|
|
|
262
247
|
this.safeDispatchEvent('stop', { detail: this })
|
|
263
|
-
this
|
|
248
|
+
this.log('libp2p has stopped')
|
|
264
249
|
}
|
|
265
250
|
|
|
266
251
|
isStarted (): boolean {
|
|
@@ -325,7 +310,7 @@ export class Libp2pNode<T extends ServiceMap = Record<string, unknown>> extends
|
|
|
325
310
|
* Get the public key for the given peer id
|
|
326
311
|
*/
|
|
327
312
|
async getPublicKey (peer: PeerId, options: AbortOptions = {}): Promise<Uint8Array> {
|
|
328
|
-
this
|
|
313
|
+
this.log('getPublicKey %p', peer)
|
|
329
314
|
|
|
330
315
|
if (peer.publicKey != null) {
|
|
331
316
|
return peer.publicKey
|
|
@@ -394,15 +379,14 @@ export class Libp2pNode<T extends ServiceMap = Record<string, unknown>> extends
|
|
|
394
379
|
const { detail: peer } = evt
|
|
395
380
|
|
|
396
381
|
if (peer.id.toString() === this.peerId.toString()) {
|
|
397
|
-
this
|
|
382
|
+
this.log.error(new Error(codes.ERR_DISCOVERED_SELF))
|
|
398
383
|
return
|
|
399
384
|
}
|
|
400
385
|
|
|
401
386
|
void this.components.peerStore.merge(peer.id, {
|
|
402
|
-
multiaddrs: peer.multiaddrs
|
|
403
|
-
protocols: peer.protocols
|
|
387
|
+
multiaddrs: peer.multiaddrs
|
|
404
388
|
})
|
|
405
|
-
.catch(err => { this
|
|
389
|
+
.catch(err => { this.log.error(err) })
|
|
406
390
|
}
|
|
407
391
|
}
|
|
408
392
|
|
|
@@ -411,29 +395,7 @@ export class Libp2pNode<T extends ServiceMap = Record<string, unknown>> extends
|
|
|
411
395
|
* libp2p interface and is useful for testing and debugging.
|
|
412
396
|
*/
|
|
413
397
|
export async function createLibp2pNode <T extends ServiceMap = Record<string, unknown>> (options: Libp2pOptions<T>): Promise<Libp2pNode<T>> {
|
|
414
|
-
|
|
415
|
-
const datastore = options.datastore as Datastore | undefined
|
|
416
|
-
|
|
417
|
-
if (datastore != null) {
|
|
418
|
-
try {
|
|
419
|
-
// try load the peer id from the keychain
|
|
420
|
-
const keyChain = new DefaultKeyChain({
|
|
421
|
-
datastore
|
|
422
|
-
}, mergeOptions(DefaultKeyChain.generateOptions(), options.keychain))
|
|
423
|
-
|
|
424
|
-
options.peerId = await keyChain.exportPeerId('self')
|
|
425
|
-
} catch (err: any) {
|
|
426
|
-
if (err.code !== 'ERR_NOT_FOUND') {
|
|
427
|
-
throw err
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
if (options.peerId == null) {
|
|
434
|
-
// no peer id in the keychain, create a new peer id
|
|
435
|
-
options.peerId = await createEd25519PeerId()
|
|
436
|
-
}
|
|
398
|
+
options.peerId ??= await createEd25519PeerId()
|
|
437
399
|
|
|
438
400
|
return new Libp2pNode(validateConfig(options))
|
|
439
401
|
}
|
package/src/peer-routing.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interface/errors'
|
|
2
|
-
import { logger } from '@libp2p/logger'
|
|
3
2
|
import filter from 'it-filter'
|
|
4
3
|
import first from 'it-first'
|
|
5
4
|
import merge from 'it-merge'
|
|
@@ -10,13 +9,12 @@ import {
|
|
|
10
9
|
requirePeers
|
|
11
10
|
} from './content-routing/utils.js'
|
|
12
11
|
import { codes, messages } from './errors.js'
|
|
13
|
-
import type { AbortOptions } from '@libp2p/interface'
|
|
12
|
+
import type { AbortOptions, Logger } from '@libp2p/interface'
|
|
14
13
|
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
15
14
|
import type { PeerInfo } from '@libp2p/interface/peer-info'
|
|
16
15
|
import type { PeerRouting } from '@libp2p/interface/peer-routing'
|
|
17
16
|
import type { PeerStore } from '@libp2p/interface/peer-store'
|
|
18
|
-
|
|
19
|
-
const log = logger('libp2p:peer-routing')
|
|
17
|
+
import type { ComponentLogger } from '@libp2p/logger'
|
|
20
18
|
|
|
21
19
|
export interface PeerRoutingInit {
|
|
22
20
|
routers?: PeerRouting[]
|
|
@@ -25,14 +23,19 @@ export interface PeerRoutingInit {
|
|
|
25
23
|
export interface DefaultPeerRoutingComponents {
|
|
26
24
|
peerId: PeerId
|
|
27
25
|
peerStore: PeerStore
|
|
26
|
+
logger: ComponentLogger
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
export class DefaultPeerRouting implements PeerRouting {
|
|
31
|
-
private readonly
|
|
30
|
+
private readonly log: Logger
|
|
31
|
+
private readonly peerId: PeerId
|
|
32
|
+
private readonly peerStore: PeerStore
|
|
32
33
|
private readonly routers: PeerRouting[]
|
|
33
34
|
|
|
34
35
|
constructor (components: DefaultPeerRoutingComponents, init: PeerRoutingInit) {
|
|
35
|
-
this.
|
|
36
|
+
this.log = components.logger.forComponent('libp2p:peer-routing')
|
|
37
|
+
this.peerId = components.peerId
|
|
38
|
+
this.peerStore = components.peerStore
|
|
36
39
|
this.routers = init.routers ?? []
|
|
37
40
|
}
|
|
38
41
|
|
|
@@ -44,22 +47,24 @@ export class DefaultPeerRouting implements PeerRouting {
|
|
|
44
47
|
throw new CodeError('No peer routers available', codes.ERR_NO_ROUTERS_AVAILABLE)
|
|
45
48
|
}
|
|
46
49
|
|
|
47
|
-
if (id.toString() === this.
|
|
50
|
+
if (id.toString() === this.peerId.toString()) {
|
|
48
51
|
throw new CodeError('Should not try to find self', codes.ERR_FIND_SELF)
|
|
49
52
|
}
|
|
50
53
|
|
|
54
|
+
const self = this
|
|
55
|
+
|
|
51
56
|
const output = await pipe(
|
|
52
57
|
merge(
|
|
53
58
|
...this.routers.map(router => (async function * () {
|
|
54
59
|
try {
|
|
55
60
|
yield await router.findPeer(id, options)
|
|
56
61
|
} catch (err) {
|
|
57
|
-
log.error(err)
|
|
62
|
+
self.log.error(err)
|
|
58
63
|
}
|
|
59
64
|
})())
|
|
60
65
|
),
|
|
61
66
|
(source) => filter(source, Boolean),
|
|
62
|
-
(source) => storeAddresses(source, this.
|
|
67
|
+
(source) => storeAddresses(source, this.peerStore),
|
|
63
68
|
async (source) => first(source)
|
|
64
69
|
)
|
|
65
70
|
|
|
@@ -82,7 +87,7 @@ export class DefaultPeerRouting implements PeerRouting {
|
|
|
82
87
|
merge(
|
|
83
88
|
...this.routers.map(router => router.getClosestPeers(key, options))
|
|
84
89
|
),
|
|
85
|
-
(source) => storeAddresses(source, this.
|
|
90
|
+
(source) => storeAddresses(source, this.peerStore),
|
|
86
91
|
(source) => uniquePeers(source),
|
|
87
92
|
(source) => requirePeers(source)
|
|
88
93
|
)
|
package/src/registrar.ts
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interface/errors'
|
|
2
|
-
import { logger } from '@libp2p/logger'
|
|
3
2
|
import merge from 'merge-options'
|
|
4
3
|
import { codes } from './errors.js'
|
|
5
|
-
import type { IdentifyResult, Libp2pEvents, PeerUpdate } from '@libp2p/interface'
|
|
4
|
+
import type { IdentifyResult, Libp2pEvents, Logger, PeerUpdate } from '@libp2p/interface'
|
|
6
5
|
import type { TypedEventTarget } from '@libp2p/interface/events'
|
|
7
6
|
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
8
7
|
import type { PeerStore } from '@libp2p/interface/peer-store'
|
|
9
8
|
import type { Topology } from '@libp2p/interface/topology'
|
|
10
9
|
import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager'
|
|
11
10
|
import type { StreamHandlerOptions, StreamHandlerRecord, Registrar, StreamHandler } from '@libp2p/interface-internal/registrar'
|
|
12
|
-
|
|
13
|
-
const log = logger('libp2p:registrar')
|
|
11
|
+
import type { ComponentLogger } from '@libp2p/logger'
|
|
14
12
|
|
|
15
13
|
export const DEFAULT_MAX_INBOUND_STREAMS = 32
|
|
16
14
|
export const DEFAULT_MAX_OUTBOUND_STREAMS = 64
|
|
@@ -20,17 +18,20 @@ export interface RegistrarComponents {
|
|
|
20
18
|
connectionManager: ConnectionManager
|
|
21
19
|
peerStore: PeerStore
|
|
22
20
|
events: TypedEventTarget<Libp2pEvents>
|
|
21
|
+
logger: ComponentLogger
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
/**
|
|
26
25
|
* Responsible for notifying registered protocols of events in the network.
|
|
27
26
|
*/
|
|
28
27
|
export class DefaultRegistrar implements Registrar {
|
|
28
|
+
private readonly log: Logger
|
|
29
29
|
private readonly topologies: Map<string, Map<string, Topology>>
|
|
30
30
|
private readonly handlers: Map<string, StreamHandlerRecord>
|
|
31
31
|
private readonly components: RegistrarComponents
|
|
32
32
|
|
|
33
33
|
constructor (components: RegistrarComponents) {
|
|
34
|
+
this.log = components.logger.forComponent('libp2p:registrar')
|
|
34
35
|
this.topologies = new Map()
|
|
35
36
|
this.handlers = new Map()
|
|
36
37
|
this.components = components
|
|
@@ -178,7 +179,7 @@ export class DefaultRegistrar implements Registrar {
|
|
|
178
179
|
return
|
|
179
180
|
}
|
|
180
181
|
|
|
181
|
-
log.error('could not inform topologies of disconnecting peer %p', remotePeer, err)
|
|
182
|
+
this.log.error('could not inform topologies of disconnecting peer %p', remotePeer, err)
|
|
182
183
|
})
|
|
183
184
|
}
|
|
184
185
|
|
package/src/transport-manager.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interface/errors'
|
|
2
2
|
import { trackedMap } from '@libp2p/interface/metrics/tracked-map'
|
|
3
3
|
import { FaultTolerance } from '@libp2p/interface/transport'
|
|
4
|
-
import { logger } from '@libp2p/logger'
|
|
5
4
|
import { codes } from './errors.js'
|
|
6
|
-
import type { Libp2pEvents, AbortOptions } from '@libp2p/interface'
|
|
5
|
+
import type { Libp2pEvents, AbortOptions, ComponentLogger, Logger } from '@libp2p/interface'
|
|
7
6
|
import type { Connection } from '@libp2p/interface/connection'
|
|
8
7
|
import type { TypedEventTarget } from '@libp2p/interface/events'
|
|
9
8
|
import type { Metrics } from '@libp2p/interface/metrics'
|
|
@@ -13,8 +12,6 @@ import type { AddressManager } from '@libp2p/interface-internal/address-manager'
|
|
|
13
12
|
import type { TransportManager } from '@libp2p/interface-internal/transport-manager'
|
|
14
13
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
15
14
|
|
|
16
|
-
const log = logger('libp2p:transports')
|
|
17
|
-
|
|
18
15
|
export interface TransportManagerInit {
|
|
19
16
|
faultTolerance?: FaultTolerance
|
|
20
17
|
}
|
|
@@ -24,9 +21,11 @@ export interface DefaultTransportManagerComponents {
|
|
|
24
21
|
addressManager: AddressManager
|
|
25
22
|
upgrader: Upgrader
|
|
26
23
|
events: TypedEventTarget<Libp2pEvents>
|
|
24
|
+
logger: ComponentLogger
|
|
27
25
|
}
|
|
28
26
|
|
|
29
27
|
export class DefaultTransportManager implements TransportManager, Startable {
|
|
28
|
+
private readonly log: Logger
|
|
30
29
|
private readonly components: DefaultTransportManagerComponents
|
|
31
30
|
private readonly transports: Map<string, Transport>
|
|
32
31
|
private readonly listeners: Map<string, Listener[]>
|
|
@@ -34,6 +33,7 @@ export class DefaultTransportManager implements TransportManager, Startable {
|
|
|
34
33
|
private started: boolean
|
|
35
34
|
|
|
36
35
|
constructor (components: DefaultTransportManagerComponents, init: TransportManagerInit = {}) {
|
|
36
|
+
this.log = components.logger.forComponent('libp2p:transports')
|
|
37
37
|
this.components = components
|
|
38
38
|
this.started = false
|
|
39
39
|
this.transports = new Map<string, Transport>()
|
|
@@ -58,7 +58,7 @@ export class DefaultTransportManager implements TransportManager, Startable {
|
|
|
58
58
|
throw new CodeError(`There is already a transport with the tag ${tag}`, codes.ERR_DUPLICATE_TRANSPORT)
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
log('adding transport %s', tag)
|
|
61
|
+
this.log('adding transport %s', tag)
|
|
62
62
|
|
|
63
63
|
this.transports.set(tag, transport)
|
|
64
64
|
|
|
@@ -88,7 +88,7 @@ export class DefaultTransportManager implements TransportManager, Startable {
|
|
|
88
88
|
async stop (): Promise<void> {
|
|
89
89
|
const tasks = []
|
|
90
90
|
for (const [key, listeners] of this.listeners) {
|
|
91
|
-
log('closing listeners for %s', key)
|
|
91
|
+
this.log('closing listeners for %s', key)
|
|
92
92
|
while (listeners.length > 0) {
|
|
93
93
|
const listener = listeners.pop()
|
|
94
94
|
|
|
@@ -101,7 +101,7 @@ export class DefaultTransportManager implements TransportManager, Startable {
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
await Promise.all(tasks)
|
|
104
|
-
log('all listeners closed')
|
|
104
|
+
this.log('all listeners closed')
|
|
105
105
|
for (const key of this.listeners.keys()) {
|
|
106
106
|
this.listeners.set(key, [])
|
|
107
107
|
}
|
|
@@ -182,7 +182,7 @@ export class DefaultTransportManager implements TransportManager, Startable {
|
|
|
182
182
|
}
|
|
183
183
|
|
|
184
184
|
if (addrs == null || addrs.length === 0) {
|
|
185
|
-
log('no addresses were provided for listening, this node is dial only')
|
|
185
|
+
this.log('no addresses were provided for listening, this node is dial only')
|
|
186
186
|
return
|
|
187
187
|
}
|
|
188
188
|
|
|
@@ -194,7 +194,7 @@ export class DefaultTransportManager implements TransportManager, Startable {
|
|
|
194
194
|
|
|
195
195
|
// For each supported multiaddr, create a listener
|
|
196
196
|
for (const addr of supportedAddrs) {
|
|
197
|
-
log('creating listener for %s on %a', key, addr)
|
|
197
|
+
this.log('creating listener for %s on %a', key, addr)
|
|
198
198
|
const listener = transport.createListener({
|
|
199
199
|
upgrader: this.components.upgrader
|
|
200
200
|
})
|
|
@@ -253,7 +253,7 @@ export class DefaultTransportManager implements TransportManager, Startable {
|
|
|
253
253
|
if (this.faultTolerance === FaultTolerance.FATAL_ALL) {
|
|
254
254
|
throw new CodeError(message, codes.ERR_NO_VALID_ADDRESSES)
|
|
255
255
|
}
|
|
256
|
-
log(`libp2p in dial mode only: ${message}`)
|
|
256
|
+
this.log(`libp2p in dial mode only: ${message}`)
|
|
257
257
|
}
|
|
258
258
|
}
|
|
259
259
|
|
|
@@ -263,11 +263,11 @@ export class DefaultTransportManager implements TransportManager, Startable {
|
|
|
263
263
|
*/
|
|
264
264
|
async remove (key: string): Promise<void> {
|
|
265
265
|
const listeners = this.listeners.get(key) ?? []
|
|
266
|
-
log.trace('removing transport %s', key)
|
|
266
|
+
this.log.trace('removing transport %s', key)
|
|
267
267
|
|
|
268
268
|
// Close any running listeners
|
|
269
269
|
const tasks = []
|
|
270
|
-
log.trace('closing listeners for %s', key)
|
|
270
|
+
this.log.trace('closing listeners for %s', key)
|
|
271
271
|
while (listeners.length > 0) {
|
|
272
272
|
const listener = listeners.pop()
|
|
273
273
|
|