@libp2p/identify 3.0.38-cf9aab5c8 → 3.0.39-0f07e3df5
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 +1 -1
- package/dist/index.min.js.map +4 -4
- package/dist/src/identify-push.d.ts +2 -2
- package/dist/src/identify-push.d.ts.map +1 -1
- package/dist/src/identify-push.js +24 -33
- package/dist/src/identify-push.js.map +1 -1
- package/dist/src/identify.d.ts +2 -2
- package/dist/src/identify.d.ts.map +1 -1
- package/dist/src/identify.js +52 -58
- package/dist/src/identify.js.map +1 -1
- package/dist/src/utils.d.ts +3 -9
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +6 -19
- package/dist/src/utils.js.map +1 -1
- package/package.json +15 -18
- package/src/identify-push.ts +26 -34
- package/src/identify.ts +59 -66
- package/src/utils.ts +9 -22
package/src/identify-push.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { serviceCapabilities } from '@libp2p/interface'
|
|
2
2
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record'
|
|
3
|
-
import { debounce } from '@libp2p/utils
|
|
4
|
-
import {
|
|
3
|
+
import { debounce, pbStream } from '@libp2p/utils'
|
|
4
|
+
import { CODE_P2P } from '@multiformats/multiaddr'
|
|
5
5
|
import drain from 'it-drain'
|
|
6
6
|
import parallel from 'it-parallel'
|
|
7
|
-
import { pbStream } from 'it-protobuf-stream'
|
|
8
7
|
import { setMaxListeners } from 'main-event'
|
|
9
8
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
10
9
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
|
|
@@ -16,7 +15,7 @@ import {
|
|
|
16
15
|
import { Identify as IdentifyMessage } from './pb/message.js'
|
|
17
16
|
import { AbstractIdentify, consumeIdentifyMessage, defaultValues } from './utils.js'
|
|
18
17
|
import type { IdentifyPush as IdentifyPushInterface, IdentifyPushComponents, IdentifyPushInit } from './index.js'
|
|
19
|
-
import type { Stream, Startable,
|
|
18
|
+
import type { Stream, Startable, Connection } from '@libp2p/interface'
|
|
20
19
|
import type { ConnectionManager } from '@libp2p/interface-internal'
|
|
21
20
|
|
|
22
21
|
export class IdentifyPush extends AbstractIdentify implements Startable, IdentifyPushInterface {
|
|
@@ -64,22 +63,21 @@ export class IdentifyPush extends AbstractIdentify implements Startable, Identif
|
|
|
64
63
|
}
|
|
65
64
|
|
|
66
65
|
try {
|
|
67
|
-
const listenAddresses = this.addressManager.getAddresses().map(ma => ma.decapsulateCode(
|
|
66
|
+
const listenAddresses = this.components.addressManager.getAddresses().map(ma => ma.decapsulateCode(CODE_P2P))
|
|
68
67
|
const peerRecord = new PeerRecord({
|
|
69
|
-
peerId: this.peerId,
|
|
68
|
+
peerId: this.components.peerId,
|
|
70
69
|
multiaddrs: listenAddresses
|
|
71
70
|
})
|
|
72
|
-
const signedPeerRecord = await RecordEnvelope.seal(peerRecord, this.privateKey)
|
|
73
|
-
const supportedProtocols = this.registrar.getProtocols()
|
|
74
|
-
const peer = await this.peerStore.get(this.peerId)
|
|
71
|
+
const signedPeerRecord = await RecordEnvelope.seal(peerRecord, this.components.privateKey)
|
|
72
|
+
const supportedProtocols = this.components.registrar.getProtocols()
|
|
73
|
+
const peer = await this.components.peerStore.get(this.components.peerId)
|
|
75
74
|
const agentVersion = uint8ArrayToString(peer.metadata.get('AgentVersion') ?? uint8ArrayFromString(this.host.agentVersion))
|
|
76
75
|
const protocolVersion = uint8ArrayToString(peer.metadata.get('ProtocolVersion') ?? uint8ArrayFromString(this.host.protocolVersion))
|
|
77
76
|
const self = this
|
|
78
77
|
|
|
79
78
|
async function * pushToConnections (): AsyncGenerator<() => Promise<void>> {
|
|
80
79
|
for (const connection of self.connectionManager.getConnections()) {
|
|
81
|
-
const peer = await self.peerStore.get(connection.remotePeer)
|
|
82
|
-
const log = connection.log.newScope('identify-push')
|
|
80
|
+
const peer = await self.components.peerStore.get(connection.remotePeer)
|
|
83
81
|
|
|
84
82
|
if (!peer.protocols.includes(self.protocol)) {
|
|
85
83
|
continue
|
|
@@ -115,8 +113,9 @@ export class IdentifyPush extends AbstractIdentify implements Startable, Identif
|
|
|
115
113
|
signal
|
|
116
114
|
})
|
|
117
115
|
} catch (err: any) {
|
|
118
|
-
// Just log errors
|
|
119
|
-
log.
|
|
116
|
+
// Just log errors if the stream was opened
|
|
117
|
+
const log = stream?.log.newScope('identify-push')
|
|
118
|
+
log?.error('could not push identify update to peer', err)
|
|
120
119
|
stream?.abort(err)
|
|
121
120
|
}
|
|
122
121
|
}
|
|
@@ -134,32 +133,25 @@ export class IdentifyPush extends AbstractIdentify implements Startable, Identif
|
|
|
134
133
|
/**
|
|
135
134
|
* Reads the Identify Push message from the given `connection`
|
|
136
135
|
*/
|
|
137
|
-
async handleProtocol (
|
|
138
|
-
const
|
|
139
|
-
const log = connection.log.newScope('identify-push')
|
|
136
|
+
async handleProtocol (stream: Stream, connection: Connection): Promise<void> {
|
|
137
|
+
const log = stream.log.newScope('identify-push')
|
|
140
138
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}
|
|
139
|
+
if (this.components.peerId.equals(connection.remotePeer)) {
|
|
140
|
+
throw new Error('received push from ourselves?')
|
|
141
|
+
}
|
|
145
142
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
143
|
+
const options = {
|
|
144
|
+
signal: AbortSignal.timeout(this.timeout)
|
|
145
|
+
}
|
|
149
146
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
147
|
+
const pb = pbStream(stream, {
|
|
148
|
+
maxDataLength: this.maxMessageSize
|
|
149
|
+
}).pb(IdentifyMessage)
|
|
153
150
|
|
|
154
|
-
|
|
155
|
-
|
|
151
|
+
const message = await pb.read(options)
|
|
152
|
+
await stream.close(options)
|
|
156
153
|
|
|
157
|
-
|
|
158
|
-
} catch (err: any) {
|
|
159
|
-
log.error('received invalid message', err)
|
|
160
|
-
stream.abort(err)
|
|
161
|
-
return
|
|
162
|
-
}
|
|
154
|
+
await consumeIdentifyMessage(this.components.peerStore, this.components.events, log, connection, message)
|
|
163
155
|
|
|
164
156
|
log.trace('handled push from %p', connection.remotePeer)
|
|
165
157
|
}
|
package/src/identify.ts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { publicKeyFromProtobuf, publicKeyToProtobuf } from '@libp2p/crypto/keys'
|
|
2
|
-
import { InvalidMessageError,
|
|
2
|
+
import { InvalidMessageError, serviceCapabilities } from '@libp2p/interface'
|
|
3
3
|
import { peerIdFromCID } from '@libp2p/peer-id'
|
|
4
4
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record'
|
|
5
|
-
import { isGlobalUnicast } from '@libp2p/utils
|
|
6
|
-
import {
|
|
7
|
-
import { CODE_IP6, CODE_IP6ZONE, protocols } from '@multiformats/multiaddr'
|
|
5
|
+
import { isGlobalUnicast, isPrivate, pbStream } from '@libp2p/utils'
|
|
6
|
+
import { CODE_IP6, CODE_IP6ZONE, CODE_P2P } from '@multiformats/multiaddr'
|
|
8
7
|
import { IP_OR_DOMAIN, TCP } from '@multiformats/multiaddr-matcher'
|
|
9
|
-
import { pbStream } from 'it-protobuf-stream'
|
|
10
8
|
import { setMaxListeners } from 'main-event'
|
|
11
9
|
import {
|
|
12
10
|
MULTICODEC_IDENTIFY_PROTOCOL_NAME,
|
|
@@ -15,7 +13,7 @@ import {
|
|
|
15
13
|
import { Identify as IdentifyMessage } from './pb/message.js'
|
|
16
14
|
import { AbstractIdentify, consumeIdentifyMessage, defaultValues, getCleanMultiaddr } from './utils.js'
|
|
17
15
|
import type { Identify as IdentifyInterface, IdentifyComponents, IdentifyInit } from './index.js'
|
|
18
|
-
import type { IdentifyResult, AbortOptions, Connection, Stream, Startable,
|
|
16
|
+
import type { IdentifyResult, AbortOptions, Connection, Stream, Startable, Logger } from '@libp2p/interface'
|
|
19
17
|
|
|
20
18
|
export class Identify extends AbstractIdentify implements Startable, IdentifyInterface {
|
|
21
19
|
constructor (components: IdentifyComponents, init: IdentifyInit = {}) {
|
|
@@ -30,14 +28,7 @@ export class Identify extends AbstractIdentify implements Startable, IdentifyInt
|
|
|
30
28
|
components.events.addEventListener('connection:open', (evt) => {
|
|
31
29
|
const connection = evt.detail
|
|
32
30
|
this.identify(connection)
|
|
33
|
-
.catch(
|
|
34
|
-
if (err.name === UnsupportedProtocolError.name) {
|
|
35
|
-
// the remote did not support identify, ignore the error
|
|
36
|
-
return
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
this.log.error('error during identify trigged by connection:open', err)
|
|
40
|
-
})
|
|
31
|
+
.catch(() => {})
|
|
41
32
|
})
|
|
42
33
|
}
|
|
43
34
|
}
|
|
@@ -48,6 +39,7 @@ export class Identify extends AbstractIdentify implements Startable, IdentifyInt
|
|
|
48
39
|
|
|
49
40
|
async _identify (connection: Connection, options: AbortOptions = {}): Promise<IdentifyMessage> {
|
|
50
41
|
let stream: Stream | undefined
|
|
42
|
+
let log: Logger | undefined
|
|
51
43
|
|
|
52
44
|
if (options.signal == null) {
|
|
53
45
|
const signal = AbortSignal.timeout(this.timeout)
|
|
@@ -64,17 +56,21 @@ export class Identify extends AbstractIdentify implements Startable, IdentifyInt
|
|
|
64
56
|
...options,
|
|
65
57
|
runOnLimitedConnection: this.runOnLimitedConnection
|
|
66
58
|
})
|
|
59
|
+
log = stream.log.newScope('identify')
|
|
67
60
|
|
|
68
61
|
const pb = pbStream(stream, {
|
|
69
62
|
maxDataLength: this.maxMessageSize
|
|
70
63
|
}).pb(IdentifyMessage)
|
|
71
64
|
|
|
65
|
+
log('read response')
|
|
72
66
|
const message = await pb.read(options)
|
|
73
67
|
|
|
74
|
-
|
|
68
|
+
log('close write')
|
|
69
|
+
await pb.unwrap().unwrap().close(options)
|
|
75
70
|
|
|
76
71
|
return message
|
|
77
72
|
} catch (err: any) {
|
|
73
|
+
log?.error('identify failed - %e', err)
|
|
78
74
|
stream?.abort(err)
|
|
79
75
|
throw err
|
|
80
76
|
}
|
|
@@ -94,43 +90,41 @@ export class Identify extends AbstractIdentify implements Startable, IdentifyInt
|
|
|
94
90
|
|
|
95
91
|
const key = publicKeyFromProtobuf(publicKey)
|
|
96
92
|
const id = peerIdFromCID(key.toCID())
|
|
97
|
-
const log = connection.log.newScope('identify')
|
|
98
93
|
|
|
99
94
|
if (!connection.remotePeer.equals(id)) {
|
|
100
95
|
throw new InvalidMessageError('Identified peer does not match the expected peer')
|
|
101
96
|
}
|
|
102
97
|
|
|
103
|
-
if (this.peerId.equals(id)) {
|
|
98
|
+
if (this.components.peerId.equals(id)) {
|
|
104
99
|
throw new InvalidMessageError('Identified peer is our own peer id?')
|
|
105
100
|
}
|
|
106
101
|
|
|
107
102
|
// if the observed address is publicly routable, add it to the address
|
|
108
103
|
// manager for verification via AutoNAT
|
|
109
|
-
this.maybeAddObservedAddress(observedAddr
|
|
104
|
+
this.maybeAddObservedAddress(observedAddr)
|
|
110
105
|
|
|
111
|
-
log('completed for peer %p and protocols %o', id, protocols)
|
|
106
|
+
this.log('completed for peer %p and protocols %o', id, protocols)
|
|
112
107
|
|
|
113
|
-
return consumeIdentifyMessage(this.peerStore, this.events, log, connection, message)
|
|
108
|
+
return consumeIdentifyMessage(this.components.peerStore, this.components.events, this.log, connection, message)
|
|
114
109
|
}
|
|
115
110
|
|
|
116
|
-
private maybeAddObservedAddress (observedAddr: Uint8Array | undefined
|
|
111
|
+
private maybeAddObservedAddress (observedAddr: Uint8Array | undefined): void {
|
|
117
112
|
const cleanObservedAddr = getCleanMultiaddr(observedAddr)
|
|
118
113
|
|
|
119
114
|
if (cleanObservedAddr == null) {
|
|
120
115
|
return
|
|
121
116
|
}
|
|
122
117
|
|
|
123
|
-
log.trace('our observed address was %a', cleanObservedAddr)
|
|
118
|
+
this.log.trace('our observed address was %a', cleanObservedAddr)
|
|
124
119
|
|
|
125
120
|
if (isPrivate(cleanObservedAddr)) {
|
|
126
|
-
this.log.trace('our observed address was private')
|
|
127
121
|
return
|
|
128
122
|
}
|
|
129
123
|
|
|
130
124
|
const tuples = cleanObservedAddr.getComponents()
|
|
131
125
|
|
|
132
126
|
if (((tuples[0].code === CODE_IP6) || (tuples[0].code === CODE_IP6ZONE && tuples[1].code === CODE_IP6)) && !isGlobalUnicast(cleanObservedAddr)) {
|
|
133
|
-
log.trace('our observed address was IPv6 but not a global unicast address')
|
|
127
|
+
this.log.trace('our observed address was IPv6 but not a global unicast address')
|
|
134
128
|
return
|
|
135
129
|
}
|
|
136
130
|
|
|
@@ -142,63 +136,62 @@ export class Identify extends AbstractIdentify implements Startable, IdentifyInt
|
|
|
142
136
|
return
|
|
143
137
|
}
|
|
144
138
|
|
|
145
|
-
log.trace('storing the observed address')
|
|
146
|
-
this.addressManager.addObservedAddr(cleanObservedAddr)
|
|
139
|
+
this.log.trace('storing the observed address')
|
|
140
|
+
this.components.addressManager.addObservedAddr(cleanObservedAddr)
|
|
147
141
|
}
|
|
148
142
|
|
|
149
143
|
/**
|
|
150
144
|
* Sends the `Identify` response with the Signed Peer Record
|
|
151
145
|
* to the requesting peer over the given `connection`
|
|
152
146
|
*/
|
|
153
|
-
async handleProtocol (
|
|
154
|
-
const
|
|
155
|
-
const log = connection.log.newScope('identify')
|
|
147
|
+
async handleProtocol (stream: Stream, connection: Connection): Promise<void> {
|
|
148
|
+
const log = stream.log.newScope('identify')
|
|
156
149
|
|
|
157
150
|
const signal = AbortSignal.timeout(this.timeout)
|
|
158
|
-
|
|
159
151
|
setMaxListeners(Infinity, signal)
|
|
160
152
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
if (multiaddrs.length > 0 && signedPeerRecord == null) {
|
|
167
|
-
const peerRecord = new PeerRecord({
|
|
168
|
-
peerId: this.peerId,
|
|
169
|
-
multiaddrs
|
|
170
|
-
})
|
|
171
|
-
|
|
172
|
-
const envelope = await RecordEnvelope.seal(peerRecord, this.privateKey)
|
|
173
|
-
signedPeerRecord = envelope.marshal().subarray()
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
let observedAddr: Uint8Array | undefined = connection.remoteAddr.bytes
|
|
177
|
-
|
|
178
|
-
if (!IP_OR_DOMAIN.matches(connection.remoteAddr)) {
|
|
179
|
-
observedAddr = undefined
|
|
180
|
-
}
|
|
153
|
+
const peerData = await this.components.peerStore.get(this.components.peerId, {
|
|
154
|
+
signal
|
|
155
|
+
})
|
|
156
|
+
const multiaddrs = this.components.addressManager.getAddresses().map(ma => ma.decapsulateCode(CODE_P2P))
|
|
157
|
+
let signedPeerRecord = peerData.peerRecordEnvelope
|
|
181
158
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
agentVersion: this.host.agentVersion,
|
|
187
|
-
publicKey: publicKeyToProtobuf(this.privateKey.publicKey),
|
|
188
|
-
listenAddrs: multiaddrs.map(addr => addr.bytes),
|
|
189
|
-
signedPeerRecord,
|
|
190
|
-
observedAddr,
|
|
191
|
-
protocols: peerData.protocols
|
|
192
|
-
}, {
|
|
193
|
-
signal
|
|
159
|
+
if (multiaddrs.length > 0 && signedPeerRecord == null) {
|
|
160
|
+
const peerRecord = new PeerRecord({
|
|
161
|
+
peerId: this.components.peerId,
|
|
162
|
+
multiaddrs
|
|
194
163
|
})
|
|
195
164
|
|
|
196
|
-
await
|
|
165
|
+
const envelope = await RecordEnvelope.seal(peerRecord, this.components.privateKey, {
|
|
197
166
|
signal
|
|
198
167
|
})
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
168
|
+
signedPeerRecord = envelope.marshal().subarray()
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
let observedAddr: Uint8Array | undefined = connection.remoteAddr.bytes
|
|
172
|
+
|
|
173
|
+
if (!IP_OR_DOMAIN.matches(connection.remoteAddr)) {
|
|
174
|
+
observedAddr = undefined
|
|
202
175
|
}
|
|
176
|
+
|
|
177
|
+
const pb = pbStream(stream).pb(IdentifyMessage)
|
|
178
|
+
|
|
179
|
+
log('send response')
|
|
180
|
+
await pb.write({
|
|
181
|
+
protocolVersion: this.host.protocolVersion,
|
|
182
|
+
agentVersion: this.host.agentVersion,
|
|
183
|
+
publicKey: publicKeyToProtobuf(this.components.privateKey.publicKey),
|
|
184
|
+
listenAddrs: multiaddrs.map(addr => addr.bytes),
|
|
185
|
+
signedPeerRecord,
|
|
186
|
+
observedAddr,
|
|
187
|
+
protocols: peerData.protocols
|
|
188
|
+
}, {
|
|
189
|
+
signal
|
|
190
|
+
})
|
|
191
|
+
|
|
192
|
+
log('close write')
|
|
193
|
+
await pb.unwrap().unwrap().close({
|
|
194
|
+
signal
|
|
195
|
+
})
|
|
203
196
|
}
|
|
204
197
|
}
|
package/src/utils.ts
CHANGED
|
@@ -7,8 +7,7 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
|
7
7
|
import { IDENTIFY_PROTOCOL_VERSION, MAX_IDENTIFY_MESSAGE_SIZE, MAX_PUSH_CONCURRENCY } from './consts.js'
|
|
8
8
|
import type { IdentifyComponents, IdentifyInit } from './index.js'
|
|
9
9
|
import type { Identify as IdentifyMessage } from './pb/message.js'
|
|
10
|
-
import type { Libp2pEvents, IdentifyResult, SignedPeerRecord, Logger, Connection, Peer, PeerData, PeerStore, NodeInfo, Startable,
|
|
11
|
-
import type { AddressManager, Registrar } from '@libp2p/interface-internal'
|
|
10
|
+
import type { Libp2pEvents, IdentifyResult, SignedPeerRecord, Logger, Connection, Peer, PeerData, PeerStore, NodeInfo, Startable, Stream } from '@libp2p/interface'
|
|
12
11
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
13
12
|
import type { TypedEventTarget } from 'main-event'
|
|
14
13
|
|
|
@@ -191,31 +190,21 @@ export abstract class AbstractIdentify implements Startable {
|
|
|
191
190
|
agentVersion: string
|
|
192
191
|
}
|
|
193
192
|
|
|
193
|
+
protected components: IdentifyComponents
|
|
194
194
|
protected protocol: string
|
|
195
195
|
protected started: boolean
|
|
196
196
|
protected readonly timeout: number
|
|
197
|
-
protected readonly peerId: PeerId
|
|
198
|
-
protected readonly privateKey: PrivateKey
|
|
199
|
-
protected readonly peerStore: PeerStore
|
|
200
|
-
protected readonly registrar: Registrar
|
|
201
|
-
protected readonly addressManager: AddressManager
|
|
202
197
|
private readonly maxInboundStreams: number
|
|
203
198
|
private readonly maxOutboundStreams: number
|
|
204
199
|
protected readonly maxMessageSize: number
|
|
205
200
|
protected readonly maxObservedAddresses: number
|
|
206
|
-
protected readonly events: TypedEventTarget<Libp2pEvents>
|
|
207
201
|
protected readonly runOnLimitedConnection: boolean
|
|
208
202
|
protected readonly log: Logger
|
|
209
203
|
|
|
210
204
|
constructor (components: IdentifyComponents, init: AbstractIdentifyInit) {
|
|
211
205
|
this.protocol = init.protocol
|
|
212
206
|
this.started = false
|
|
213
|
-
this.
|
|
214
|
-
this.privateKey = components.privateKey
|
|
215
|
-
this.peerStore = components.peerStore
|
|
216
|
-
this.registrar = components.registrar
|
|
217
|
-
this.addressManager = components.addressManager
|
|
218
|
-
this.events = components.events
|
|
207
|
+
this.components = components
|
|
219
208
|
this.log = init.log
|
|
220
209
|
|
|
221
210
|
this.timeout = init.timeout ?? defaultValues.timeout
|
|
@@ -230,6 +219,8 @@ export abstract class AbstractIdentify implements Startable {
|
|
|
230
219
|
protocolVersion: `${init.protocolPrefix ?? defaultValues.protocolPrefix}/${IDENTIFY_PROTOCOL_VERSION}`,
|
|
231
220
|
agentVersion: getAgentVersion(components.nodeInfo, init.agentVersion)
|
|
232
221
|
}
|
|
222
|
+
|
|
223
|
+
this.handleProtocol = this.handleProtocol.bind(this)
|
|
233
224
|
}
|
|
234
225
|
|
|
235
226
|
isStarted (): boolean {
|
|
@@ -241,18 +232,14 @@ export abstract class AbstractIdentify implements Startable {
|
|
|
241
232
|
return
|
|
242
233
|
}
|
|
243
234
|
|
|
244
|
-
await this.peerStore.merge(this.peerId, {
|
|
235
|
+
await this.components.peerStore.merge(this.components.peerId, {
|
|
245
236
|
metadata: {
|
|
246
237
|
AgentVersion: uint8ArrayFromString(this.host.agentVersion),
|
|
247
238
|
ProtocolVersion: uint8ArrayFromString(this.host.protocolVersion)
|
|
248
239
|
}
|
|
249
240
|
})
|
|
250
241
|
|
|
251
|
-
await this.registrar.handle(this.protocol,
|
|
252
|
-
void this.handleProtocol(data).catch(err => {
|
|
253
|
-
this.log.error(err)
|
|
254
|
-
})
|
|
255
|
-
}, {
|
|
242
|
+
await this.components.registrar.handle(this.protocol, this.handleProtocol, {
|
|
256
243
|
maxInboundStreams: this.maxInboundStreams,
|
|
257
244
|
maxOutboundStreams: this.maxOutboundStreams,
|
|
258
245
|
runOnLimitedConnection: this.runOnLimitedConnection
|
|
@@ -262,10 +249,10 @@ export abstract class AbstractIdentify implements Startable {
|
|
|
262
249
|
}
|
|
263
250
|
|
|
264
251
|
async stop (): Promise<void> {
|
|
265
|
-
await this.registrar.unhandle(this.protocol)
|
|
252
|
+
await this.components.registrar.unhandle(this.protocol)
|
|
266
253
|
|
|
267
254
|
this.started = false
|
|
268
255
|
}
|
|
269
256
|
|
|
270
|
-
protected abstract handleProtocol (
|
|
257
|
+
protected abstract handleProtocol (stream: Stream, connection: Connection): Promise<void>
|
|
271
258
|
}
|