libp2p 0.37.2 → 0.37.3-de30c2c
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/src/address-manager/index.d.ts +2 -2
- package/dist/src/address-manager/index.d.ts.map +1 -1
- package/dist/src/circuit/auto-relay.d.ts +4 -4
- package/dist/src/circuit/auto-relay.d.ts.map +1 -1
- package/dist/src/circuit/circuit/hop.d.ts +2 -2
- package/dist/src/circuit/circuit/hop.d.ts.map +1 -1
- package/dist/src/circuit/circuit/hop.js +2 -2
- package/dist/src/circuit/circuit/hop.js.map +1 -1
- package/dist/src/circuit/circuit/stop.d.ts +1 -1
- package/dist/src/circuit/circuit/stop.d.ts.map +1 -1
- package/dist/src/circuit/circuit/stop.js +1 -1
- package/dist/src/circuit/circuit/stop.js.map +1 -1
- package/dist/src/circuit/circuit/stream-handler.d.ts +1 -1
- package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
- package/dist/src/circuit/index.d.ts +2 -2
- package/dist/src/circuit/index.d.ts.map +1 -1
- package/dist/src/circuit/listener.d.ts +3 -3
- package/dist/src/circuit/listener.d.ts.map +1 -1
- package/dist/src/circuit/transport.d.ts +5 -5
- package/dist/src/circuit/transport.d.ts.map +1 -1
- package/dist/src/circuit/transport.js +2 -2
- package/dist/src/circuit/transport.js.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +11 -3
- package/dist/src/config.js.map +1 -1
- package/dist/src/connection-manager/auto-dialler.d.ts +1 -1
- package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
- package/dist/src/connection-manager/dialer/auto-dialer.d.ts +2 -2
- package/dist/src/connection-manager/dialer/auto-dialer.d.ts.map +1 -1
- package/dist/src/connection-manager/dialer/dial-request.d.ts +1 -1
- package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -1
- package/dist/src/connection-manager/dialer/index.d.ts +5 -5
- package/dist/src/connection-manager/dialer/index.d.ts.map +1 -1
- package/dist/src/connection-manager/dialer/index.js +1 -1
- package/dist/src/connection-manager/dialer/index.js.map +1 -1
- package/dist/src/connection-manager/index.d.ts +9 -9
- package/dist/src/connection-manager/index.d.ts.map +1 -1
- package/dist/src/connection-manager/index.js +42 -32
- package/dist/src/connection-manager/index.js.map +1 -1
- package/dist/src/content-routing/index.d.ts +4 -4
- package/dist/src/content-routing/index.d.ts.map +1 -1
- package/dist/src/content-routing/utils.d.ts +2 -2
- package/dist/src/content-routing/utils.d.ts.map +1 -1
- package/dist/src/dht/dht-content-routing.d.ts +3 -3
- package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
- package/dist/src/dht/dht-peer-routing.d.ts +5 -5
- package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
- package/dist/src/dht/dummy-dht.d.ts +3 -3
- package/dist/src/dht/dummy-dht.d.ts.map +1 -1
- package/dist/src/dht/dummy-dht.js +1 -1
- package/dist/src/dht/dummy-dht.js.map +1 -1
- package/dist/src/errors.d.ts +4 -1
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +3 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/fetch/index.d.ts +7 -4
- package/dist/src/fetch/index.d.ts.map +1 -1
- package/dist/src/fetch/index.js +61 -39
- package/dist/src/fetch/index.js.map +1 -1
- package/dist/src/get-peer.d.ts +2 -2
- package/dist/src/get-peer.d.ts.map +1 -1
- package/dist/src/get-peer.js +1 -1
- package/dist/src/get-peer.js.map +1 -1
- package/dist/src/identify/index.d.ts +7 -7
- package/dist/src/identify/index.d.ts.map +1 -1
- package/dist/src/identify/index.js +15 -23
- package/dist/src/identify/index.js.map +1 -1
- package/dist/src/index.d.ts +17 -17
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/insecure/index.d.ts +2 -2
- package/dist/src/insecure/index.d.ts.map +1 -1
- package/dist/src/insecure/index.js +1 -1
- package/dist/src/insecure/index.js.map +1 -1
- package/dist/src/keychain/index.d.ts +2 -2
- package/dist/src/keychain/index.d.ts.map +1 -1
- package/dist/src/libp2p.d.ts +14 -14
- package/dist/src/libp2p.d.ts.map +1 -1
- package/dist/src/libp2p.js +14 -4
- package/dist/src/libp2p.js.map +1 -1
- package/dist/src/metrics/index.d.ts +2 -2
- package/dist/src/metrics/index.d.ts.map +1 -1
- package/dist/src/metrics/moving-average.d.ts +1 -1
- package/dist/src/metrics/moving-average.d.ts.map +1 -1
- package/dist/src/metrics/stats.d.ts +1 -1
- package/dist/src/metrics/stats.d.ts.map +1 -1
- package/dist/src/nat-manager.d.ts +1 -1
- package/dist/src/nat-manager.d.ts.map +1 -1
- package/dist/src/peer-record-updater.d.ts +1 -1
- package/dist/src/peer-record-updater.d.ts.map +1 -1
- package/dist/src/peer-routing.d.ts +4 -4
- package/dist/src/peer-routing.d.ts.map +1 -1
- package/dist/src/ping/index.d.ts +6 -3
- package/dist/src/ping/index.d.ts.map +1 -1
- package/dist/src/ping/index.js +6 -2
- package/dist/src/ping/index.js.map +1 -1
- package/dist/src/pnet/index.d.ts +1 -2
- package/dist/src/pnet/index.d.ts.map +1 -1
- package/dist/src/pnet/index.js.map +1 -1
- package/dist/src/pubsub/dummy-pubsub.d.ts +2 -2
- package/dist/src/pubsub/dummy-pubsub.d.ts.map +1 -1
- package/dist/src/registrar.d.ts +10 -8
- package/dist/src/registrar.d.ts.map +1 -1
- package/dist/src/registrar.js +63 -44
- package/dist/src/registrar.js.map +1 -1
- package/dist/src/transport-manager.d.ts +3 -3
- package/dist/src/transport-manager.d.ts.map +1 -1
- package/dist/src/upgrader.d.ts +6 -6
- package/dist/src/upgrader.d.ts.map +1 -1
- package/dist/src/upgrader.js +69 -8
- package/dist/src/upgrader.js.map +1 -1
- package/package.json +51 -29
- package/src/address-manager/index.ts +2 -2
- package/src/circuit/auto-relay.ts +4 -4
- package/src/circuit/circuit/hop.ts +4 -4
- package/src/circuit/circuit/stop.ts +2 -2
- package/src/circuit/circuit/stream-handler.ts +1 -1
- package/src/circuit/index.ts +2 -2
- package/src/circuit/listener.ts +3 -3
- package/src/circuit/transport.ts +5 -5
- package/src/config.ts +11 -3
- package/src/connection-manager/auto-dialler.ts +1 -1
- package/src/connection-manager/dialer/auto-dialer.ts +2 -2
- package/src/connection-manager/dialer/dial-request.ts +1 -1
- package/src/connection-manager/dialer/index.ts +5 -5
- package/src/connection-manager/index.ts +55 -39
- package/src/content-routing/index.ts +2 -2
- package/src/content-routing/utils.ts +2 -2
- package/src/dht/dht-content-routing.ts +2 -2
- package/src/dht/dht-peer-routing.ts +3 -3
- package/src/dht/dummy-dht.ts +3 -3
- package/src/errors.ts +4 -1
- package/src/fetch/index.ts +91 -50
- package/src/get-peer.ts +3 -3
- package/src/identify/index.ts +24 -29
- package/src/index.ts +17 -17
- package/src/insecure/index.ts +3 -3
- package/src/keychain/index.ts +2 -2
- package/src/libp2p.ts +31 -15
- package/src/metrics/index.ts +2 -2
- package/src/metrics/moving-average.ts +1 -1
- package/src/metrics/stats.ts +1 -1
- package/src/nat-manager.ts +1 -1
- package/src/peer-record-updater.ts +1 -1
- package/src/peer-routing.ts +4 -4
- package/src/ping/index.ts +12 -5
- package/src/pnet/index.ts +1 -2
- package/src/pubsub/dummy-pubsub.ts +2 -2
- package/src/registrar.ts +79 -55
- package/src/transport-manager.ts +3 -3
- package/src/upgrader.ts +94 -16
package/src/errors.ts
CHANGED
|
@@ -70,5 +70,8 @@ export enum codes {
|
|
|
70
70
|
ERR_NOT_IMPLEMENTED = 'ERR_NOT_IMPLEMENTED',
|
|
71
71
|
ERR_WRONG_PING_ACK = 'ERR_WRONG_PING_ACK',
|
|
72
72
|
ERR_INVALID_RECORD = 'ERR_INVALID_RECORD',
|
|
73
|
-
ERR_ALREADY_SUCCEEDED = 'ERR_ALREADY_SUCCEEDED'
|
|
73
|
+
ERR_ALREADY_SUCCEEDED = 'ERR_ALREADY_SUCCEEDED',
|
|
74
|
+
ERR_NO_HANDLER_FOR_PROTOCOL = 'ERR_NO_HANDLER_FOR_PROTOCOL',
|
|
75
|
+
ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS = 'ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS',
|
|
76
|
+
ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS = 'ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS'
|
|
74
77
|
}
|
package/src/fetch/index.ts
CHANGED
|
@@ -3,21 +3,24 @@ import errCode from 'err-code'
|
|
|
3
3
|
import { codes } from '../errors.js'
|
|
4
4
|
import * as lp from 'it-length-prefixed'
|
|
5
5
|
import { FetchRequest, FetchResponse } from './pb/proto.js'
|
|
6
|
-
import { handshake } from 'it-handshake'
|
|
7
6
|
import { PROTOCOL_NAME, PROTOCOL_VERSION } from './constants.js'
|
|
8
|
-
import type { PeerId } from '@libp2p/
|
|
7
|
+
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
9
8
|
import type { Startable } from '@libp2p/interfaces/startable'
|
|
10
|
-
import type { Stream } from '@libp2p/
|
|
11
|
-
import type { IncomingStreamData } from '@libp2p/
|
|
12
|
-
import type { Components } from '@libp2p/
|
|
9
|
+
import type { Stream } from '@libp2p/interface-connection'
|
|
10
|
+
import type { IncomingStreamData } from '@libp2p/interface-registrar'
|
|
11
|
+
import type { Components } from '@libp2p/components'
|
|
13
12
|
import type { AbortOptions } from '@libp2p/interfaces'
|
|
14
13
|
import type { Duplex } from 'it-stream-types'
|
|
15
14
|
import { abortableDuplex } from 'abortable-iterator'
|
|
15
|
+
import { pipe } from 'it-pipe'
|
|
16
|
+
import first from 'it-first'
|
|
16
17
|
|
|
17
18
|
const log = logger('libp2p:fetch')
|
|
18
19
|
|
|
19
20
|
export interface FetchServiceInit {
|
|
20
21
|
protocolPrefix: string
|
|
22
|
+
maxInboundStreams: number
|
|
23
|
+
maxOutboundStreams: number
|
|
21
24
|
}
|
|
22
25
|
|
|
23
26
|
export interface HandleMessageOptions {
|
|
@@ -40,6 +43,7 @@ export class FetchService implements Startable {
|
|
|
40
43
|
private readonly components: Components
|
|
41
44
|
private readonly lookupFunctions: Map<string, LookupFunction>
|
|
42
45
|
private started: boolean
|
|
46
|
+
private readonly init: FetchServiceInit
|
|
43
47
|
|
|
44
48
|
constructor (components: Components, init: FetchServiceInit) {
|
|
45
49
|
this.started = false
|
|
@@ -47,13 +51,21 @@ export class FetchService implements Startable {
|
|
|
47
51
|
this.protocol = `/${init.protocolPrefix ?? 'libp2p'}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`
|
|
48
52
|
this.lookupFunctions = new Map() // Maps key prefix to value lookup function
|
|
49
53
|
this.handleMessage = this.handleMessage.bind(this)
|
|
54
|
+
this.init = init
|
|
50
55
|
}
|
|
51
56
|
|
|
52
57
|
async start () {
|
|
53
58
|
await this.components.getRegistrar().handle(this.protocol, (data) => {
|
|
54
|
-
void this.handleMessage(data)
|
|
55
|
-
|
|
56
|
-
|
|
59
|
+
void this.handleMessage(data)
|
|
60
|
+
.catch(err => {
|
|
61
|
+
log.error(err)
|
|
62
|
+
})
|
|
63
|
+
.finally(() => {
|
|
64
|
+
data.stream.close()
|
|
65
|
+
})
|
|
66
|
+
}, {
|
|
67
|
+
maxInboundStreams: this.init.maxInboundStreams,
|
|
68
|
+
maxOutboundStreams: this.init.maxOutboundStreams
|
|
57
69
|
})
|
|
58
70
|
this.started = true
|
|
59
71
|
}
|
|
@@ -74,7 +86,7 @@ export class FetchService implements Startable {
|
|
|
74
86
|
log('dialing %s to %p', this.protocol, peer)
|
|
75
87
|
|
|
76
88
|
const connection = await this.components.getConnectionManager().openConnection(peer, options)
|
|
77
|
-
const
|
|
89
|
+
const stream = await connection.newStream([this.protocol], options)
|
|
78
90
|
let source: Duplex<Uint8Array> = stream
|
|
79
91
|
|
|
80
92
|
// make stream abortable if AbortSignal passed
|
|
@@ -82,28 +94,42 @@ export class FetchService implements Startable {
|
|
|
82
94
|
source = abortableDuplex(stream, options.signal)
|
|
83
95
|
}
|
|
84
96
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
97
|
+
try {
|
|
98
|
+
const result = await pipe(
|
|
99
|
+
[FetchRequest.encode({ identifier: key })],
|
|
100
|
+
lp.encode(),
|
|
101
|
+
source,
|
|
102
|
+
lp.decode(),
|
|
103
|
+
async function (source) {
|
|
104
|
+
const buf = await first(source)
|
|
105
|
+
|
|
106
|
+
if (buf == null) {
|
|
107
|
+
throw errCode(new Error('No data received'), codes.ERR_INVALID_MESSAGE)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const response = FetchResponse.decode(buf)
|
|
111
|
+
|
|
112
|
+
switch (response.status) {
|
|
113
|
+
case (FetchResponse.StatusCode.OK): {
|
|
114
|
+
return response.data
|
|
115
|
+
}
|
|
116
|
+
case (FetchResponse.StatusCode.NOT_FOUND): {
|
|
117
|
+
return null
|
|
118
|
+
}
|
|
119
|
+
case (FetchResponse.StatusCode.ERROR): {
|
|
120
|
+
const errmsg = (new TextDecoder()).decode(response.data)
|
|
121
|
+
throw errCode(new Error('Error in fetch protocol response: ' + errmsg), codes.ERR_INVALID_PARAMETERS)
|
|
122
|
+
}
|
|
123
|
+
default: {
|
|
124
|
+
throw errCode(new Error('Unknown response status'), codes.ERR_INVALID_MESSAGE)
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
return result ?? null
|
|
131
|
+
} finally {
|
|
132
|
+
stream.close()
|
|
107
133
|
}
|
|
108
134
|
}
|
|
109
135
|
|
|
@@ -114,25 +140,40 @@ export class FetchService implements Startable {
|
|
|
114
140
|
*/
|
|
115
141
|
async handleMessage (data: IncomingStreamData) {
|
|
116
142
|
const { stream } = data
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
143
|
+
const self = this
|
|
144
|
+
|
|
145
|
+
await pipe(
|
|
146
|
+
stream,
|
|
147
|
+
lp.decode(),
|
|
148
|
+
async function * (source) {
|
|
149
|
+
const buf = await first(source)
|
|
150
|
+
|
|
151
|
+
if (buf == null) {
|
|
152
|
+
throw errCode(new Error('No data received'), codes.ERR_INVALID_MESSAGE)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// for await (const buf of source) {
|
|
156
|
+
const request = FetchRequest.decode(buf)
|
|
157
|
+
|
|
158
|
+
let response: FetchResponse
|
|
159
|
+
const lookup = self._getLookupFunction(request.identifier)
|
|
160
|
+
if (lookup != null) {
|
|
161
|
+
const data = await lookup(request.identifier)
|
|
162
|
+
if (data != null) {
|
|
163
|
+
response = { status: FetchResponse.StatusCode.OK, data }
|
|
164
|
+
} else {
|
|
165
|
+
response = { status: FetchResponse.StatusCode.NOT_FOUND, data: new Uint8Array(0) }
|
|
166
|
+
}
|
|
167
|
+
} else {
|
|
168
|
+
const errmsg = (new TextEncoder()).encode('No lookup function registered for key: ' + request.identifier)
|
|
169
|
+
response = { status: FetchResponse.StatusCode.ERROR, data: errmsg }
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
yield FetchResponse.encode(response)
|
|
173
|
+
},
|
|
174
|
+
lp.encode(),
|
|
175
|
+
stream
|
|
176
|
+
)
|
|
136
177
|
}
|
|
137
178
|
|
|
138
179
|
/**
|
package/src/get-peer.ts
CHANGED
|
@@ -2,9 +2,9 @@ import { peerIdFromString } from '@libp2p/peer-id'
|
|
|
2
2
|
import { Multiaddr } from '@multiformats/multiaddr'
|
|
3
3
|
import errCode from 'err-code'
|
|
4
4
|
import { codes } from './errors.js'
|
|
5
|
-
import { isPeerId } from '@libp2p/
|
|
6
|
-
import type { PeerId } from '@libp2p/
|
|
7
|
-
import type { PeerInfo } from '@libp2p/
|
|
5
|
+
import { isPeerId } from '@libp2p/interface-peer-id'
|
|
6
|
+
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
7
|
+
import type { PeerInfo } from '@libp2p/interface-peer-info'
|
|
8
8
|
|
|
9
9
|
function peerIdFromMultiaddr (ma: Multiaddr) {
|
|
10
10
|
const idStr = ma.getPeerId()
|
package/src/identify/index.ts
CHANGED
|
@@ -18,11 +18,11 @@ import {
|
|
|
18
18
|
MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION
|
|
19
19
|
} from './consts.js'
|
|
20
20
|
import { codes } from '../errors.js'
|
|
21
|
-
import type { IncomingStreamData } from '@libp2p/
|
|
22
|
-
import type { Connection, Stream } from '@libp2p/
|
|
21
|
+
import type { IncomingStreamData } from '@libp2p/interface-registrar'
|
|
22
|
+
import type { Connection, Stream } from '@libp2p/interface-connection'
|
|
23
23
|
import type { Startable } from '@libp2p/interfaces/startable'
|
|
24
24
|
import { peerIdFromKeys } from '@libp2p/peer-id'
|
|
25
|
-
import type { Components } from '@libp2p/
|
|
25
|
+
import type { Components } from '@libp2p/components'
|
|
26
26
|
import { TimeoutController } from 'timeout-abort-controller'
|
|
27
27
|
import type { AbortOptions } from '@libp2p/interfaces'
|
|
28
28
|
import { abortableDuplex } from 'abortable-iterator'
|
|
@@ -60,6 +60,12 @@ export interface IdentifyServiceInit {
|
|
|
60
60
|
* Identify responses larger than this in bytes will be rejected (default: 8192)
|
|
61
61
|
*/
|
|
62
62
|
maxIdentifyMessageSize?: number
|
|
63
|
+
|
|
64
|
+
maxInboundStreams: number
|
|
65
|
+
maxOutboundStreams: number
|
|
66
|
+
|
|
67
|
+
maxPushIncomingStreams: number
|
|
68
|
+
maxPushOutgoingStreams: number
|
|
63
69
|
}
|
|
64
70
|
|
|
65
71
|
export class IdentifyService implements Startable {
|
|
@@ -79,8 +85,6 @@ export class IdentifyService implements Startable {
|
|
|
79
85
|
this.started = false
|
|
80
86
|
this.init = init
|
|
81
87
|
|
|
82
|
-
this.handleMessage = this.handleMessage.bind(this)
|
|
83
|
-
|
|
84
88
|
this.identifyProtocolStr = `/${init.protocolPrefix}/${MULTICODEC_IDENTIFY_PROTOCOL_NAME}/${MULTICODEC_IDENTIFY_PROTOCOL_VERSION}`
|
|
85
89
|
this.identifyPushProtocolStr = `/${init.protocolPrefix}/${MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME}/${MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION}`
|
|
86
90
|
|
|
@@ -127,13 +131,21 @@ export class IdentifyService implements Startable {
|
|
|
127
131
|
await this.components.getPeerStore().metadataBook.setValue(this.components.getPeerId(), 'AgentVersion', uint8ArrayFromString(this.host.agentVersion))
|
|
128
132
|
await this.components.getPeerStore().metadataBook.setValue(this.components.getPeerId(), 'ProtocolVersion', uint8ArrayFromString(this.host.protocolVersion))
|
|
129
133
|
|
|
130
|
-
await this.components.getRegistrar().handle(
|
|
131
|
-
this.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
134
|
+
await this.components.getRegistrar().handle(this.identifyProtocolStr, (data) => {
|
|
135
|
+
void this._handleIdentify(data).catch(err => {
|
|
136
|
+
log.error(err)
|
|
137
|
+
})
|
|
138
|
+
}, {
|
|
139
|
+
maxInboundStreams: this.init.maxInboundStreams,
|
|
140
|
+
maxOutboundStreams: this.init.maxOutboundStreams
|
|
141
|
+
})
|
|
142
|
+
await this.components.getRegistrar().handle(this.identifyPushProtocolStr, (data) => {
|
|
143
|
+
void this._handlePush(data).catch(err => {
|
|
135
144
|
log.error(err)
|
|
136
145
|
})
|
|
146
|
+
}, {
|
|
147
|
+
maxInboundStreams: this.init.maxPushIncomingStreams,
|
|
148
|
+
maxOutboundStreams: this.init.maxPushOutgoingStreams
|
|
137
149
|
})
|
|
138
150
|
|
|
139
151
|
this.started = true
|
|
@@ -159,10 +171,9 @@ export class IdentifyService implements Startable {
|
|
|
159
171
|
let stream: Stream | undefined
|
|
160
172
|
|
|
161
173
|
try {
|
|
162
|
-
|
|
174
|
+
stream = await connection.newStream([this.identifyPushProtocolStr], {
|
|
163
175
|
signal: timeoutController.signal
|
|
164
176
|
})
|
|
165
|
-
stream = data.stream
|
|
166
177
|
|
|
167
178
|
// make stream abortable
|
|
168
179
|
const source: Duplex<Uint8Array> = abortableDuplex(stream, timeoutController.signal)
|
|
@@ -218,7 +229,7 @@ export class IdentifyService implements Startable {
|
|
|
218
229
|
}
|
|
219
230
|
|
|
220
231
|
async _identify (connection: Connection, options: AbortOptions = {}): Promise<Identify> {
|
|
221
|
-
const
|
|
232
|
+
const stream = await connection.newStream([this.identifyProtocolStr], options)
|
|
222
233
|
let source: Duplex<Uint8Array> = stream
|
|
223
234
|
let timeoutController
|
|
224
235
|
let signal = options.signal
|
|
@@ -353,22 +364,6 @@ export class IdentifyService implements Startable {
|
|
|
353
364
|
// this.components.getAddressManager().addObservedAddr(observedAddr)
|
|
354
365
|
}
|
|
355
366
|
|
|
356
|
-
/**
|
|
357
|
-
* A handler to register with Libp2p to process identify messages
|
|
358
|
-
*/
|
|
359
|
-
handleMessage (data: IncomingStreamData) {
|
|
360
|
-
const { protocol } = data
|
|
361
|
-
|
|
362
|
-
switch (protocol) {
|
|
363
|
-
case this.identifyProtocolStr:
|
|
364
|
-
return this._handleIdentify(data)
|
|
365
|
-
case this.identifyPushProtocolStr:
|
|
366
|
-
return this._handlePush(data)
|
|
367
|
-
default:
|
|
368
|
-
log.error('cannot handle unknown protocol %s', protocol)
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
|
|
372
367
|
/**
|
|
373
368
|
* Sends the `Identify` response with the Signed Peer Record
|
|
374
369
|
* to the requesting peer over the given `connection`
|
package/src/index.ts
CHANGED
|
@@ -5,23 +5,23 @@ import type { Startable } from '@libp2p/interfaces/startable'
|
|
|
5
5
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
6
6
|
import type { FaultTolerance } from './transport-manager.js'
|
|
7
7
|
import type { IdentifyServiceInit } from './identify/index.js'
|
|
8
|
-
import type { DualDHT } from '@libp2p/
|
|
8
|
+
import type { DualDHT } from '@libp2p/interface-dht'
|
|
9
9
|
import type { Datastore } from 'interface-datastore'
|
|
10
|
-
import type { PeerStore, PeerStoreInit } from '@libp2p/
|
|
11
|
-
import type { PeerId } from '@libp2p/
|
|
10
|
+
import type { PeerStore, PeerStoreInit } from '@libp2p/interface-peer-store'
|
|
11
|
+
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
12
12
|
import type { AutoRelayConfig, RelayAdvertiseConfig } from './circuit/index.js'
|
|
13
|
-
import type { PeerDiscovery } from '@libp2p/
|
|
14
|
-
import type { Connection, ConnectionGater, ConnectionProtector,
|
|
15
|
-
import type { Transport } from '@libp2p/
|
|
16
|
-
import type { StreamMuxerFactory } from '@libp2p/
|
|
17
|
-
import type { ConnectionEncrypter } from '@libp2p/
|
|
18
|
-
import type { PeerRouting } from '@libp2p/
|
|
19
|
-
import type { ContentRouting } from '@libp2p/
|
|
20
|
-
import type { PubSub } from '@libp2p/
|
|
21
|
-
import type { Registrar, StreamHandler } from '@libp2p/
|
|
22
|
-
import type { ConnectionManager } from '@libp2p/
|
|
23
|
-
import type { Metrics, MetricsInit } from '@libp2p/
|
|
24
|
-
import type { PeerInfo } from '@libp2p/
|
|
13
|
+
import type { PeerDiscovery } from '@libp2p/interface-peer-discovery'
|
|
14
|
+
import type { Connection, ConnectionGater, ConnectionProtector, Stream } from '@libp2p/interface-connection'
|
|
15
|
+
import type { Transport } from '@libp2p/interface-transport'
|
|
16
|
+
import type { StreamMuxerFactory } from '@libp2p/interface-stream-muxer'
|
|
17
|
+
import type { ConnectionEncrypter } from '@libp2p/interface-connection-encrypter'
|
|
18
|
+
import type { PeerRouting } from '@libp2p/interface-peer-routing'
|
|
19
|
+
import type { ContentRouting } from '@libp2p/interface-content-routing'
|
|
20
|
+
import type { PubSub } from '@libp2p/interface-pubsub'
|
|
21
|
+
import type { Registrar, StreamHandler, StreamHandlerOptions } from '@libp2p/interface-registrar'
|
|
22
|
+
import type { ConnectionManager } from '@libp2p/interface-connection-manager'
|
|
23
|
+
import type { Metrics, MetricsInit } from '@libp2p/interface-metrics'
|
|
24
|
+
import type { PeerInfo } from '@libp2p/interface-peer-info'
|
|
25
25
|
import type { KeyChain } from './keychain/index.js'
|
|
26
26
|
import type { ConnectionManagerInit } from './connection-manager/index.js'
|
|
27
27
|
import type { PingServiceInit } from './ping/index.js'
|
|
@@ -177,7 +177,7 @@ export interface Libp2p extends Startable, EventEmitter<Libp2pEvents> {
|
|
|
177
177
|
* If successful, the known metadata of the peer will be added to the nodes `peerStore`,
|
|
178
178
|
* and the `MuxedStream` will be returned together with the successful negotiated protocol.
|
|
179
179
|
*/
|
|
180
|
-
dialProtocol: (peer: PeerId | Multiaddr, protocols: string | string[], options?: AbortOptions) => Promise<
|
|
180
|
+
dialProtocol: (peer: PeerId | Multiaddr, protocols: string | string[], options?: AbortOptions) => Promise<Stream>
|
|
181
181
|
|
|
182
182
|
/**
|
|
183
183
|
* Disconnects all connections to the given `peer`
|
|
@@ -187,7 +187,7 @@ export interface Libp2p extends Startable, EventEmitter<Libp2pEvents> {
|
|
|
187
187
|
/**
|
|
188
188
|
* Registers the `handler` for each protocol
|
|
189
189
|
*/
|
|
190
|
-
handle: (protocol: string | string[], handler: StreamHandler) => Promise<void>
|
|
190
|
+
handle: (protocol: string | string[], handler: StreamHandler, options?: StreamHandlerOptions) => Promise<void>
|
|
191
191
|
|
|
192
192
|
/**
|
|
193
193
|
* Removes the handler for each protocol. The protocol
|
package/src/insecure/index.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { logger } from '@libp2p/logger'
|
|
2
2
|
import { handshake } from 'it-handshake'
|
|
3
3
|
import * as lp from 'it-length-prefixed'
|
|
4
|
-
import { UnexpectedPeerError, InvalidCryptoExchangeError } from '@libp2p/
|
|
4
|
+
import { UnexpectedPeerError, InvalidCryptoExchangeError } from '@libp2p/interface-connection-encrypter/errors'
|
|
5
5
|
import { Exchange, KeyType } from './pb/proto.js'
|
|
6
|
-
import type { PeerId } from '@libp2p/
|
|
6
|
+
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
7
7
|
import { peerIdFromBytes, peerIdFromKeys } from '@libp2p/peer-id'
|
|
8
|
-
import type { ConnectionEncrypter, SecuredConnection } from '@libp2p/
|
|
8
|
+
import type { ConnectionEncrypter, SecuredConnection } from '@libp2p/interface-connection-encrypter'
|
|
9
9
|
import type { Duplex } from 'it-stream-types'
|
|
10
10
|
|
|
11
11
|
const log = logger('libp2p:plaintext')
|
package/src/keychain/index.ts
CHANGED
|
@@ -10,8 +10,8 @@ import { codes } from '../errors.js'
|
|
|
10
10
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
|
|
11
11
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
12
12
|
import { generateKeyPair, importKey, unmarshalPrivateKey } from '@libp2p/crypto/keys'
|
|
13
|
-
import type { PeerId } from '@libp2p/
|
|
14
|
-
import type { Components } from '@libp2p/
|
|
13
|
+
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
14
|
+
import type { Components } from '@libp2p/components'
|
|
15
15
|
import { pbkdf2, randomBytes } from '@libp2p/crypto'
|
|
16
16
|
|
|
17
17
|
const log = logger('libp2p:keychain')
|
package/src/libp2p.ts
CHANGED
|
@@ -27,25 +27,25 @@ import { DHTPeerRouting } from './dht/dht-peer-routing.js'
|
|
|
27
27
|
import { PersistentPeerStore } from '@libp2p/peer-store'
|
|
28
28
|
import { DHTContentRouting } from './dht/dht-content-routing.js'
|
|
29
29
|
import { AutoDialer } from './connection-manager/dialer/auto-dialer.js'
|
|
30
|
-
import { Initializable, Components, isInitializable } from '@libp2p/
|
|
31
|
-
import type { PeerId } from '@libp2p/
|
|
32
|
-
import type { Connection } from '@libp2p/
|
|
33
|
-
import type { PeerRouting } from '@libp2p/
|
|
34
|
-
import type { ContentRouting } from '@libp2p/
|
|
35
|
-
import type { PubSub } from '@libp2p/
|
|
36
|
-
import type { Registrar, StreamHandler } from '@libp2p/
|
|
37
|
-
import type { ConnectionManager } from '@libp2p/
|
|
38
|
-
import type { PeerInfo } from '@libp2p/
|
|
30
|
+
import { Initializable, Components, isInitializable } from '@libp2p/components'
|
|
31
|
+
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
32
|
+
import type { Connection } from '@libp2p/interface-connection'
|
|
33
|
+
import type { PeerRouting } from '@libp2p/interface-peer-routing'
|
|
34
|
+
import type { ContentRouting } from '@libp2p/interface-content-routing'
|
|
35
|
+
import type { PubSub } from '@libp2p/interface-pubsub'
|
|
36
|
+
import type { Registrar, StreamHandler, StreamHandlerOptions } from '@libp2p/interface-registrar'
|
|
37
|
+
import type { ConnectionManager } from '@libp2p/interface-connection-manager'
|
|
38
|
+
import type { PeerInfo } from '@libp2p/interface-peer-info'
|
|
39
39
|
import type { Libp2p, Libp2pEvents, Libp2pInit, Libp2pOptions } from './index.js'
|
|
40
40
|
import { validateConfig } from './config.js'
|
|
41
41
|
import { createEd25519PeerId } from '@libp2p/peer-id-factory'
|
|
42
|
-
import type { PeerStore } from '@libp2p/
|
|
43
|
-
import type { DualDHT } from '@libp2p/
|
|
42
|
+
import type { PeerStore } from '@libp2p/interface-peer-store'
|
|
43
|
+
import type { DualDHT } from '@libp2p/interface-dht'
|
|
44
44
|
import { concat as uint8ArrayConcat } from 'uint8arrays/concat'
|
|
45
45
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
46
46
|
import errCode from 'err-code'
|
|
47
47
|
import { unmarshalPublicKey } from '@libp2p/crypto/keys'
|
|
48
|
-
import type { Metrics } from '@libp2p/
|
|
48
|
+
import type { Metrics } from '@libp2p/interface-metrics'
|
|
49
49
|
import { DummyDHT } from './dht/dummy-dht.js'
|
|
50
50
|
import { DummyPubSub } from './pubsub/dummy-pubsub.js'
|
|
51
51
|
import { PeerSet } from '@libp2p/peer-collections'
|
|
@@ -490,12 +490,28 @@ export class Libp2pNode extends EventEmitter<Libp2pEvents> implements Libp2p {
|
|
|
490
490
|
return await this.pingService.ping(id, options)
|
|
491
491
|
}
|
|
492
492
|
|
|
493
|
-
async handle (protocols: string | string[], handler: StreamHandler): Promise<void> {
|
|
494
|
-
|
|
493
|
+
async handle (protocols: string | string[], handler: StreamHandler, options?: StreamHandlerOptions): Promise<void> {
|
|
494
|
+
if (!Array.isArray(protocols)) {
|
|
495
|
+
protocols = [protocols]
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
await Promise.all(
|
|
499
|
+
protocols.map(async protocol => {
|
|
500
|
+
await this.components.getRegistrar().handle(protocol, handler, options)
|
|
501
|
+
})
|
|
502
|
+
)
|
|
495
503
|
}
|
|
496
504
|
|
|
497
505
|
async unhandle (protocols: string[] | string): Promise<void> {
|
|
498
|
-
|
|
506
|
+
if (!Array.isArray(protocols)) {
|
|
507
|
+
protocols = [protocols]
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
await Promise.all(
|
|
511
|
+
protocols.map(async protocol => {
|
|
512
|
+
await this.components.getRegistrar().unhandle(protocol)
|
|
513
|
+
})
|
|
514
|
+
)
|
|
499
515
|
}
|
|
500
516
|
|
|
501
517
|
/**
|
package/src/metrics/index.ts
CHANGED
|
@@ -3,8 +3,8 @@ import each from 'it-foreach'
|
|
|
3
3
|
import LRU from 'hashlru'
|
|
4
4
|
import { METRICS as defaultOptions } from '../constants.js'
|
|
5
5
|
import { DefaultStats, StatsInit } from './stats.js'
|
|
6
|
-
import type { ComponentMetricsUpdate, Metrics, Stats, TrackStreamOptions } from '@libp2p/
|
|
7
|
-
import type { PeerId } from '@libp2p/
|
|
6
|
+
import type { ComponentMetricsUpdate, Metrics, Stats, TrackStreamOptions } from '@libp2p/interface-metrics'
|
|
7
|
+
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
8
8
|
import type { Startable } from '@libp2p/interfaces/startable'
|
|
9
9
|
import type { Duplex } from 'it-stream-types'
|
|
10
10
|
|
package/src/metrics/stats.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events'
|
|
|
2
2
|
import { createMovingAverage } from './moving-average.js'
|
|
3
3
|
// @ts-expect-error no types
|
|
4
4
|
import retimer from 'retimer'
|
|
5
|
-
import type { MovingAverages, Stats, TransferStats } from '@libp2p/
|
|
5
|
+
import type { MovingAverages, Stats, TransferStats } from '@libp2p/interface-metrics'
|
|
6
6
|
|
|
7
7
|
export interface StatsEvents {
|
|
8
8
|
'update': CustomEvent<TransferStats>
|
package/src/nat-manager.ts
CHANGED
|
@@ -8,7 +8,7 @@ import errCode from 'err-code'
|
|
|
8
8
|
import { codes } from './errors.js'
|
|
9
9
|
import { isLoopback } from '@libp2p/utils/multiaddr/is-loopback'
|
|
10
10
|
import type { Startable } from '@libp2p/interfaces/startable'
|
|
11
|
-
import type { Components } from '@libp2p/
|
|
11
|
+
import type { Components } from '@libp2p/components'
|
|
12
12
|
|
|
13
13
|
const log = logger('libp2p:nat')
|
|
14
14
|
const DEFAULT_TTL = 7200
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record'
|
|
2
|
-
import type { Components } from '@libp2p/
|
|
2
|
+
import type { Components } from '@libp2p/components'
|
|
3
3
|
import type { Startable } from '@libp2p/interfaces/startable'
|
|
4
4
|
import { logger } from '@libp2p/logger'
|
|
5
5
|
import { protocols } from '@multiformats/multiaddr'
|
package/src/peer-routing.ts
CHANGED
|
@@ -18,12 +18,12 @@ import {
|
|
|
18
18
|
// @ts-expect-error module with no types
|
|
19
19
|
} from 'set-delayed-interval'
|
|
20
20
|
import { setMaxListeners } from 'events'
|
|
21
|
-
import type { PeerId } from '@libp2p/
|
|
22
|
-
import type { PeerRouting } from '@libp2p/
|
|
21
|
+
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
22
|
+
import type { PeerRouting } from '@libp2p/interface-peer-routing'
|
|
23
23
|
import type { AbortOptions } from '@libp2p/interfaces'
|
|
24
24
|
import type { Startable } from '@libp2p/interfaces/startable'
|
|
25
|
-
import type { PeerInfo } from '@libp2p/
|
|
26
|
-
import type { Components } from '@libp2p/
|
|
25
|
+
import type { PeerInfo } from '@libp2p/interface-peer-info'
|
|
26
|
+
import type { Components } from '@libp2p/components'
|
|
27
27
|
|
|
28
28
|
const log = logger('libp2p:peer-routing')
|
|
29
29
|
|
package/src/ping/index.ts
CHANGED
|
@@ -6,10 +6,10 @@ import { pipe } from 'it-pipe'
|
|
|
6
6
|
import first from 'it-first'
|
|
7
7
|
import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
|
|
8
8
|
import { PROTOCOL_NAME, PING_LENGTH, PROTOCOL_VERSION } from './constants.js'
|
|
9
|
-
import type { IncomingStreamData } from '@libp2p/
|
|
10
|
-
import type { PeerId } from '@libp2p/
|
|
9
|
+
import type { IncomingStreamData } from '@libp2p/interface-registrar'
|
|
10
|
+
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
11
11
|
import type { Startable } from '@libp2p/interfaces/startable'
|
|
12
|
-
import type { Components } from '@libp2p/
|
|
12
|
+
import type { Components } from '@libp2p/components'
|
|
13
13
|
import type { AbortOptions } from '@libp2p/interfaces'
|
|
14
14
|
import type { Duplex } from 'it-stream-types'
|
|
15
15
|
import { abortableDuplex } from 'abortable-iterator'
|
|
@@ -18,21 +18,28 @@ const log = logger('libp2p:ping')
|
|
|
18
18
|
|
|
19
19
|
export interface PingServiceInit {
|
|
20
20
|
protocolPrefix: string
|
|
21
|
+
maxInboundStreams: number
|
|
22
|
+
maxOutboundStreams: number
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
export class PingService implements Startable {
|
|
24
26
|
public readonly protocol: string
|
|
25
27
|
private readonly components: Components
|
|
26
28
|
private started: boolean
|
|
29
|
+
private readonly init: PingServiceInit
|
|
27
30
|
|
|
28
31
|
constructor (components: Components, init: PingServiceInit) {
|
|
29
32
|
this.components = components
|
|
30
33
|
this.started = false
|
|
31
34
|
this.protocol = `/${init.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`
|
|
35
|
+
this.init = init
|
|
32
36
|
}
|
|
33
37
|
|
|
34
38
|
async start () {
|
|
35
|
-
await this.components.getRegistrar().handle(this.protocol, this.handleMessage
|
|
39
|
+
await this.components.getRegistrar().handle(this.protocol, this.handleMessage, {
|
|
40
|
+
maxInboundStreams: this.init.maxInboundStreams,
|
|
41
|
+
maxOutboundStreams: this.init.maxOutboundStreams
|
|
42
|
+
})
|
|
36
43
|
this.started = true
|
|
37
44
|
}
|
|
38
45
|
|
|
@@ -67,7 +74,7 @@ export class PingService implements Startable {
|
|
|
67
74
|
log('dialing %s to %p', this.protocol, peer)
|
|
68
75
|
|
|
69
76
|
const connection = await this.components.getConnectionManager().openConnection(peer, options)
|
|
70
|
-
const
|
|
77
|
+
const stream = await connection.newStream([this.protocol], options)
|
|
71
78
|
const start = Date.now()
|
|
72
79
|
const data = randomBytes(PING_LENGTH)
|
|
73
80
|
|
package/src/pnet/index.ts
CHANGED
|
@@ -12,8 +12,7 @@ import {
|
|
|
12
12
|
} from './crypto.js'
|
|
13
13
|
import { handshake } from 'it-handshake'
|
|
14
14
|
import { NONCE_LENGTH } from './key-generator.js'
|
|
15
|
-
import type { MultiaddrConnection } from '@libp2p/
|
|
16
|
-
import type { ConnectionProtector } from '@libp2p/interfaces/connection'
|
|
15
|
+
import type { ConnectionProtector, MultiaddrConnection } from '@libp2p/interface-connection'
|
|
17
16
|
|
|
18
17
|
const log = logger('libp2p:pnet')
|
|
19
18
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from '@libp2p/interfaces/events'
|
|
2
|
-
import type { PeerId } from '@libp2p/
|
|
3
|
-
import type { PublishResult, PubSub, PubSubEvents, StrictNoSign, StrictSign } from '@libp2p/
|
|
2
|
+
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
3
|
+
import type { PublishResult, PubSub, PubSubEvents, StrictNoSign, StrictSign } from '@libp2p/interface-pubsub'
|
|
4
4
|
import errCode from 'err-code'
|
|
5
5
|
import { messages, codes } from '../errors.js'
|
|
6
6
|
|