libp2p 0.45.8 → 0.45.9-06f4901a
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 +96 -77
- package/dist/index.min.js +28 -28
- package/dist/src/address-manager/index.d.ts +5 -5
- package/dist/src/address-manager/index.d.ts.map +1 -1
- package/dist/src/autonat/index.d.ts +6 -6
- package/dist/src/autonat/index.d.ts.map +1 -1
- package/dist/src/autonat/index.js +3 -3
- package/dist/src/circuit-relay/index.d.ts +1 -1
- package/dist/src/circuit-relay/index.d.ts.map +1 -1
- package/dist/src/circuit-relay/server/advert-service.d.ts +3 -3
- package/dist/src/circuit-relay/server/advert-service.d.ts.map +1 -1
- package/dist/src/circuit-relay/server/advert-service.js +1 -1
- package/dist/src/circuit-relay/server/advert-service.js.map +1 -1
- package/dist/src/circuit-relay/server/index.d.ts +12 -7
- package/dist/src/circuit-relay/server/index.d.ts.map +1 -1
- package/dist/src/circuit-relay/server/index.js +18 -10
- package/dist/src/circuit-relay/server/index.js.map +1 -1
- package/dist/src/circuit-relay/server/reservation-store.d.ts +3 -3
- package/dist/src/circuit-relay/server/reservation-store.d.ts.map +1 -1
- package/dist/src/circuit-relay/server/reservation-voucher.d.ts +2 -2
- package/dist/src/circuit-relay/transport/discovery.d.ts +8 -8
- package/dist/src/circuit-relay/transport/discovery.d.ts.map +1 -1
- package/dist/src/circuit-relay/transport/discovery.js +3 -4
- package/dist/src/circuit-relay/transport/discovery.js.map +1 -1
- package/dist/src/circuit-relay/transport/index.d.ts +12 -12
- package/dist/src/circuit-relay/transport/index.d.ts.map +1 -1
- package/dist/src/circuit-relay/transport/index.js +10 -9
- package/dist/src/circuit-relay/transport/index.js.map +1 -1
- package/dist/src/circuit-relay/transport/listener.d.ts +2 -2
- package/dist/src/circuit-relay/transport/listener.d.ts.map +1 -1
- package/dist/src/circuit-relay/transport/listener.js +3 -3
- package/dist/src/circuit-relay/transport/listener.js.map +1 -1
- package/dist/src/circuit-relay/transport/reservation-store.d.ts +7 -7
- package/dist/src/circuit-relay/transport/reservation-store.d.ts.map +1 -1
- package/dist/src/circuit-relay/transport/reservation-store.js +2 -2
- package/dist/src/circuit-relay/transport/reservation-store.js.map +1 -1
- package/dist/src/circuit-relay/utils.d.ts +1 -1
- package/dist/src/components.d.ts +15 -14
- package/dist/src/components.d.ts.map +1 -1
- package/dist/src/components.js +2 -2
- package/dist/src/components.js.map +1 -1
- package/dist/src/config/connection-gater.browser.d.ts +1 -1
- package/dist/src/config/connection-gater.d.ts +1 -1
- package/dist/src/config.d.ts +1 -2
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +2 -2
- package/dist/src/config.js.map +1 -1
- package/dist/src/connection/index.d.ts +4 -4
- package/dist/src/connection/index.d.ts.map +1 -1
- package/dist/src/connection/index.js +3 -3
- package/dist/src/connection/index.js.map +1 -1
- package/dist/src/connection-manager/auto-dial.d.ts +5 -5
- package/dist/src/connection-manager/auto-dial.d.ts.map +1 -1
- package/dist/src/connection-manager/connection-pruner.d.ts +4 -4
- package/dist/src/connection-manager/connection-pruner.d.ts.map +1 -1
- package/dist/src/connection-manager/dial-queue.d.ts +7 -8
- package/dist/src/connection-manager/dial-queue.d.ts.map +1 -1
- package/dist/src/connection-manager/dial-queue.js +6 -6
- package/dist/src/connection-manager/dial-queue.js.map +1 -1
- package/dist/src/connection-manager/index.d.ts +10 -11
- package/dist/src/connection-manager/index.d.ts.map +1 -1
- package/dist/src/connection-manager/index.js +6 -6
- package/dist/src/connection-manager/index.js.map +1 -1
- package/dist/src/content-routing/index.d.ts +5 -5
- package/dist/src/content-routing/index.d.ts.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/content-routing/utils.d.ts +2 -2
- package/dist/src/content-routing/utils.js +1 -1
- package/dist/src/content-routing/utils.js.map +1 -1
- package/dist/src/fetch/index.d.ts +5 -5
- package/dist/src/fetch/index.d.ts.map +1 -1
- package/dist/src/fetch/index.js +1 -1
- package/dist/src/fetch/index.js.map +1 -1
- package/dist/src/get-peer.d.ts +1 -1
- package/dist/src/get-peer.js +2 -2
- package/dist/src/get-peer.js.map +1 -1
- package/dist/src/identify/identify.d.ts +7 -7
- package/dist/src/identify/identify.d.ts.map +1 -1
- package/dist/src/identify/identify.js +13 -9
- package/dist/src/identify/identify.js.map +1 -1
- package/dist/src/identify/index.d.ts +24 -9
- package/dist/src/identify/index.d.ts.map +1 -1
- package/dist/src/identify/index.js.map +1 -1
- package/dist/src/index.d.ts +11 -12
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/insecure/index.d.ts +1 -1
- package/dist/src/insecure/index.js +1 -1
- package/dist/src/insecure/index.js.map +1 -1
- package/dist/src/libp2p.d.ts +11 -11
- package/dist/src/libp2p.d.ts.map +1 -1
- package/dist/src/libp2p.js +5 -5
- package/dist/src/libp2p.js.map +1 -1
- package/dist/src/peer-routing.d.ts +5 -5
- package/dist/src/peer-routing.d.ts.map +1 -1
- package/dist/src/peer-routing.js +1 -1
- package/dist/src/peer-routing.js.map +1 -1
- package/dist/src/ping/index.d.ts +4 -4
- package/dist/src/ping/index.d.ts.map +1 -1
- package/dist/src/ping/index.js +1 -1
- package/dist/src/ping/index.js.map +1 -1
- package/dist/src/pnet/index.d.ts +1 -1
- package/dist/src/pnet/index.js +1 -1
- package/dist/src/pnet/index.js.map +1 -1
- package/dist/src/registrar.d.ts +7 -6
- package/dist/src/registrar.d.ts.map +1 -1
- package/dist/src/registrar.js +7 -11
- package/dist/src/registrar.js.map +1 -1
- package/dist/src/transport-manager.d.ts +9 -9
- package/dist/src/transport-manager.d.ts.map +1 -1
- package/dist/src/transport-manager.js +4 -4
- package/dist/src/transport-manager.js.map +1 -1
- package/dist/src/upgrader.d.ts +12 -12
- package/dist/src/upgrader.d.ts.map +1 -1
- package/dist/src/upgrader.js +8 -6
- package/dist/src/upgrader.js.map +1 -1
- package/dist/src/upnp-nat/index.d.ts +4 -4
- package/dist/src/upnp-nat/index.d.ts.map +1 -1
- package/dist/src/upnp-nat/index.js +1 -1
- package/dist/src/upnp-nat/index.js.map +1 -1
- package/dist/src/utils/peer-job-queue.d.ts +1 -1
- package/dist/src/utils/peer-job-queue.js +1 -1
- package/dist/src/utils/peer-job-queue.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 +45 -74
- package/src/address-manager/index.ts +5 -5
- package/src/autonat/index.ts +12 -12
- package/src/circuit-relay/index.ts +1 -1
- package/src/circuit-relay/server/advert-service.ts +3 -3
- package/src/circuit-relay/server/index.ts +33 -18
- package/src/circuit-relay/server/reservation-store.ts +3 -3
- package/src/circuit-relay/server/reservation-voucher.ts +2 -2
- package/src/circuit-relay/transport/discovery.ts +10 -11
- package/src/circuit-relay/transport/index.ts +22 -22
- package/src/circuit-relay/transport/listener.ts +7 -7
- package/src/circuit-relay/transport/reservation-store.ts +9 -9
- package/src/circuit-relay/utils.ts +1 -1
- package/src/components.ts +16 -15
- package/src/config/connection-gater.browser.ts +1 -1
- package/src/config/connection-gater.ts +1 -1
- package/src/config.ts +3 -4
- package/src/connection/index.ts +6 -6
- package/src/connection-manager/auto-dial.ts +5 -5
- package/src/connection-manager/connection-pruner.ts +4 -4
- package/src/connection-manager/dial-queue.ts +13 -14
- package/src/connection-manager/index.ts +16 -17
- package/src/content-routing/index.ts +6 -6
- package/src/content-routing/utils.ts +3 -3
- package/src/fetch/index.ts +7 -7
- package/src/get-peer.ts +3 -3
- package/src/identify/identify.ts +26 -22
- package/src/identify/index.ts +27 -8
- package/src/index.ts +11 -12
- package/src/insecure/index.ts +3 -3
- package/src/libp2p.ts +14 -14
- package/src/peer-routing.ts +6 -6
- package/src/ping/index.ts +7 -7
- package/src/pnet/index.ts +2 -2
- package/src/registrar.ts +14 -17
- package/src/transport-manager.ts +12 -12
- package/src/upgrader.ts +22 -20
- package/src/upnp-nat/index.ts +5 -5
- package/src/utils/peer-job-queue.ts +2 -2
- package/src/version.ts +1 -1
- package/dist/src/pubsub/dummy-pubsub.d.ts +0 -18
- package/dist/src/pubsub/dummy-pubsub.d.ts.map +0 -1
- package/dist/src/pubsub/dummy-pubsub.js +0 -38
- package/dist/src/pubsub/dummy-pubsub.js.map +0 -1
- package/src/pubsub/dummy-pubsub.ts +0 -53
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { setMaxListeners } from 'events'
|
|
2
|
-
import { EventEmitter } from '@libp2p/
|
|
2
|
+
import { EventEmitter } from '@libp2p/interface/events'
|
|
3
3
|
import { logger } from '@libp2p/logger'
|
|
4
4
|
import { peerIdFromBytes } from '@libp2p/peer-id'
|
|
5
5
|
import { RecordEnvelope } from '@libp2p/peer-record'
|
|
6
6
|
import { type Multiaddr, multiaddr } from '@multiformats/multiaddr'
|
|
7
7
|
import { pbStream, type ProtobufStream } from 'it-pb-stream'
|
|
8
8
|
import pDefer from 'p-defer'
|
|
9
|
+
import { MAX_CONNECTIONS } from '../../connection-manager/constants.js'
|
|
9
10
|
import {
|
|
10
11
|
CIRCUIT_PROTO_CODE,
|
|
11
12
|
DEFAULT_HOP_TIMEOUT,
|
|
@@ -18,14 +19,14 @@ import { AdvertService, type AdvertServiceComponents, type AdvertServiceInit } f
|
|
|
18
19
|
import { ReservationStore, type ReservationStoreInit } from './reservation-store.js'
|
|
19
20
|
import { ReservationVoucherRecord } from './reservation-voucher.js'
|
|
20
21
|
import type { CircuitRelayService, RelayReservation } from '../index.js'
|
|
21
|
-
import type {
|
|
22
|
-
import type {
|
|
23
|
-
import type {
|
|
24
|
-
import type {
|
|
25
|
-
import type {
|
|
26
|
-
import type {
|
|
27
|
-
import type {
|
|
28
|
-
import type {
|
|
22
|
+
import type { Connection, Stream } from '@libp2p/interface/connection'
|
|
23
|
+
import type { ConnectionGater } from '@libp2p/interface/connection-gater'
|
|
24
|
+
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
25
|
+
import type { PeerStore } from '@libp2p/interface/peer-store'
|
|
26
|
+
import type { Startable } from '@libp2p/interface/startable'
|
|
27
|
+
import type { AddressManager } from '@libp2p/interface-internal/address-manager'
|
|
28
|
+
import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager'
|
|
29
|
+
import type { IncomingStreamData, Registrar } from '@libp2p/interface-internal/registrar'
|
|
29
30
|
import type { PeerMap } from '@libp2p/peer-collections'
|
|
30
31
|
|
|
31
32
|
const log = logger('libp2p:circuit-relay:server')
|
|
@@ -59,6 +60,12 @@ export interface CircuitRelayServerInit {
|
|
|
59
60
|
* The maximum number of simultaneous HOP outbound streams that can be open at once
|
|
60
61
|
*/
|
|
61
62
|
maxOutboundHopStreams?: number
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The maximum number of simultaneous STOP outbound streams that can be open at
|
|
66
|
+
* once. (default: 300)
|
|
67
|
+
*/
|
|
68
|
+
maxOutboundStopStreams?: number
|
|
62
69
|
}
|
|
63
70
|
|
|
64
71
|
export interface HopProtocolOptions {
|
|
@@ -87,6 +94,10 @@ export interface RelayServerEvents {
|
|
|
87
94
|
'relay:advert:error': CustomEvent<Error>
|
|
88
95
|
}
|
|
89
96
|
|
|
97
|
+
const defaults = {
|
|
98
|
+
maxOutboundStopStreams: MAX_CONNECTIONS
|
|
99
|
+
}
|
|
100
|
+
|
|
90
101
|
class CircuitRelayServer extends EventEmitter<RelayServerEvents> implements Startable, CircuitRelayService {
|
|
91
102
|
private readonly registrar: Registrar
|
|
92
103
|
private readonly peerStore: PeerStore
|
|
@@ -101,6 +112,7 @@ class CircuitRelayServer extends EventEmitter<RelayServerEvents> implements Star
|
|
|
101
112
|
private readonly shutdownController: AbortController
|
|
102
113
|
private readonly maxInboundHopStreams?: number
|
|
103
114
|
private readonly maxOutboundHopStreams?: number
|
|
115
|
+
private readonly maxOutboundStopStreams: number
|
|
104
116
|
|
|
105
117
|
/**
|
|
106
118
|
* Creates an instance of Relay
|
|
@@ -119,6 +131,7 @@ class CircuitRelayServer extends EventEmitter<RelayServerEvents> implements Star
|
|
|
119
131
|
this.shutdownController = new AbortController()
|
|
120
132
|
this.maxInboundHopStreams = init.maxInboundHopStreams
|
|
121
133
|
this.maxOutboundHopStreams = init.maxOutboundHopStreams
|
|
134
|
+
this.maxOutboundStopStreams = init.maxOutboundStopStreams ?? defaults.maxOutboundStopStreams
|
|
122
135
|
|
|
123
136
|
try {
|
|
124
137
|
// fails on node < 15.4
|
|
@@ -180,7 +193,7 @@ class CircuitRelayServer extends EventEmitter<RelayServerEvents> implements Star
|
|
|
180
193
|
}
|
|
181
194
|
|
|
182
195
|
async onHop ({ connection, stream }: IncomingStreamData): Promise<void> {
|
|
183
|
-
log('received circuit v2 hop protocol stream from %
|
|
196
|
+
log('received circuit v2 hop protocol stream from %p', connection.remotePeer)
|
|
184
197
|
|
|
185
198
|
const hopTimeoutPromise = pDefer<HopMessage>()
|
|
186
199
|
const timeout = setTimeout(() => {
|
|
@@ -226,7 +239,7 @@ class CircuitRelayServer extends EventEmitter<RelayServerEvents> implements Star
|
|
|
226
239
|
case HopMessage.Type.RESERVE: await this.handleReserve({ stream, request, connection }); break
|
|
227
240
|
case HopMessage.Type.CONNECT: await this.handleConnect({ stream, request, connection }); break
|
|
228
241
|
default: {
|
|
229
|
-
log.error('invalid hop request type %s via peer %
|
|
242
|
+
log.error('invalid hop request type %s via peer %p', request.type, connection.remotePeer)
|
|
230
243
|
stream.pb(HopMessage).write({ type: HopMessage.Type.STATUS, status: Status.UNEXPECTED_MESSAGE })
|
|
231
244
|
}
|
|
232
245
|
}
|
|
@@ -234,7 +247,7 @@ class CircuitRelayServer extends EventEmitter<RelayServerEvents> implements Star
|
|
|
234
247
|
|
|
235
248
|
async handleReserve ({ stream, request, connection }: HopProtocolOptions): Promise<void> {
|
|
236
249
|
const hopstr = stream.pb(HopMessage)
|
|
237
|
-
log('hop reserve request from %
|
|
250
|
+
log('hop reserve request from %p', connection.remotePeer)
|
|
238
251
|
|
|
239
252
|
if (isRelayAddr(connection.remoteAddr)) {
|
|
240
253
|
log.error('relay reservation over circuit connection denied for peer: %p', connection.remotePeer)
|
|
@@ -316,7 +329,7 @@ class CircuitRelayServer extends EventEmitter<RelayServerEvents> implements Star
|
|
|
316
329
|
return
|
|
317
330
|
}
|
|
318
331
|
|
|
319
|
-
log('hop connect request from %
|
|
332
|
+
log('hop connect request from %p', connection.remotePeer)
|
|
320
333
|
|
|
321
334
|
let dstPeer: PeerId
|
|
322
335
|
|
|
@@ -368,7 +381,7 @@ class CircuitRelayServer extends EventEmitter<RelayServerEvents> implements Star
|
|
|
368
381
|
})
|
|
369
382
|
|
|
370
383
|
if (destinationStream == null) {
|
|
371
|
-
log.error('failed to open stream to destination peer %
|
|
384
|
+
log.error('failed to open stream to destination peer %p', destinationConnection?.remotePeer)
|
|
372
385
|
hopstr.write({ type: HopMessage.Type.STATUS, status: Status.CONNECTION_FAILED })
|
|
373
386
|
return
|
|
374
387
|
}
|
|
@@ -390,7 +403,9 @@ class CircuitRelayServer extends EventEmitter<RelayServerEvents> implements Star
|
|
|
390
403
|
request
|
|
391
404
|
}: StopOptions): Promise<Stream | undefined> {
|
|
392
405
|
log('starting circuit relay v2 stop request to %s', connection.remotePeer)
|
|
393
|
-
const stream = await connection.newStream([RELAY_V2_STOP_CODEC]
|
|
406
|
+
const stream = await connection.newStream([RELAY_V2_STOP_CODEC], {
|
|
407
|
+
maxOutboundStreams: this.maxOutboundStopStreams
|
|
408
|
+
})
|
|
394
409
|
const pbstr = pbStream(stream)
|
|
395
410
|
const stopstr = pbstr.pb(StopMessage)
|
|
396
411
|
stopstr.write(request)
|
|
@@ -399,17 +414,17 @@ class CircuitRelayServer extends EventEmitter<RelayServerEvents> implements Star
|
|
|
399
414
|
try {
|
|
400
415
|
response = await stopstr.read()
|
|
401
416
|
} catch (err) {
|
|
402
|
-
log.error('error parsing stop message response from %
|
|
417
|
+
log.error('error parsing stop message response from %p', connection.remotePeer)
|
|
403
418
|
}
|
|
404
419
|
|
|
405
420
|
if (response == null) {
|
|
406
|
-
log.error('could not read response from %
|
|
421
|
+
log.error('could not read response from %p', connection.remotePeer)
|
|
407
422
|
stream.close()
|
|
408
423
|
return
|
|
409
424
|
}
|
|
410
425
|
|
|
411
426
|
if (response.status === Status.OK) {
|
|
412
|
-
log('stop request to %
|
|
427
|
+
log('stop request to %p was successful', connection.remotePeer)
|
|
413
428
|
return pbstr.unwrap()
|
|
414
429
|
}
|
|
415
430
|
|
|
@@ -2,9 +2,9 @@ import { PeerMap } from '@libp2p/peer-collections'
|
|
|
2
2
|
import { DEFAULT_DATA_LIMIT, DEFAULT_DURATION_LIMIT, DEFAULT_MAX_RESERVATION_CLEAR_INTERVAL, DEFAULT_MAX_RESERVATION_STORE_SIZE, DEFAULT_MAX_RESERVATION_TTL } from '../constants.js'
|
|
3
3
|
import { type Limit, Status } from '../pb/index.js'
|
|
4
4
|
import type { RelayReservation } from '../index.js'
|
|
5
|
-
import type {
|
|
6
|
-
import type {
|
|
7
|
-
import type { Startable } from '@libp2p/
|
|
5
|
+
import type { RecursivePartial } from '@libp2p/interface'
|
|
6
|
+
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
7
|
+
import type { Startable } from '@libp2p/interface/startable'
|
|
8
8
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
9
9
|
|
|
10
10
|
export type ReservationStatus = Status.OK | Status.PERMISSION_DENIED | Status.RESERVATION_REFUSED
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ReservationVoucher } from '../pb/index.js'
|
|
2
|
-
import type { PeerId } from '@libp2p/interface
|
|
3
|
-
import type { Record } from '@libp2p/interface
|
|
2
|
+
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
3
|
+
import type { Record } from '@libp2p/interface/record'
|
|
4
4
|
|
|
5
5
|
export interface ReservationVoucherOptions {
|
|
6
6
|
relay: PeerId
|
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
import { EventEmitter } from '@libp2p/
|
|
1
|
+
import { EventEmitter } from '@libp2p/interface/events'
|
|
2
2
|
import { logger } from '@libp2p/logger'
|
|
3
|
-
import { createTopology } from '@libp2p/topology'
|
|
4
3
|
import {
|
|
5
4
|
RELAY_RENDEZVOUS_NS,
|
|
6
5
|
RELAY_V2_HOP_CODEC
|
|
7
6
|
} from '../constants.js'
|
|
8
7
|
import { namespaceToCid } from '../utils.js'
|
|
9
|
-
import type {
|
|
10
|
-
import type {
|
|
11
|
-
import type {
|
|
12
|
-
import type {
|
|
13
|
-
import type {
|
|
14
|
-
import type {
|
|
15
|
-
import type {
|
|
8
|
+
import type { ContentRouting } from '@libp2p/interface/content-routing'
|
|
9
|
+
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
10
|
+
import type { PeerStore } from '@libp2p/interface/peer-store'
|
|
11
|
+
import type { Startable } from '@libp2p/interface/startable'
|
|
12
|
+
import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager'
|
|
13
|
+
import type { Registrar } from '@libp2p/interface-internal/registrar'
|
|
14
|
+
import type { TransportManager } from '@libp2p/interface-internal/transport-manager'
|
|
16
15
|
|
|
17
16
|
const log = logger('libp2p:circuit-relay:discover-relays')
|
|
18
17
|
|
|
@@ -57,11 +56,11 @@ export class RelayDiscovery extends EventEmitter<RelayDiscoveryEvents> implement
|
|
|
57
56
|
async start (): Promise<void> {
|
|
58
57
|
// register a topology listener for when new peers are encountered
|
|
59
58
|
// that support the hop protocol
|
|
60
|
-
this.topologyId = await this.registrar.register(RELAY_V2_HOP_CODEC,
|
|
59
|
+
this.topologyId = await this.registrar.register(RELAY_V2_HOP_CODEC, {
|
|
61
60
|
onConnect: (peerId) => {
|
|
62
61
|
this.safeDispatchEvent('relay:discover', { detail: peerId })
|
|
63
62
|
}
|
|
64
|
-
})
|
|
63
|
+
})
|
|
65
64
|
|
|
66
65
|
void this.discover()
|
|
67
66
|
.catch(err => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { CodeError } from '@libp2p/interface/errors'
|
|
2
|
+
import { symbol, type Transport, type CreateListenerOptions, type Listener, type Upgrader } from '@libp2p/interface/transport'
|
|
3
3
|
import { logger } from '@libp2p/logger'
|
|
4
4
|
import { peerIdFromBytes, peerIdFromString } from '@libp2p/peer-id'
|
|
5
5
|
import { streamToMaConnection } from '@libp2p/utils/stream-to-ma-conn'
|
|
@@ -13,17 +13,16 @@ import { StopMessage, HopMessage, Status } from '../pb/index.js'
|
|
|
13
13
|
import { RelayDiscovery, type RelayDiscoveryComponents } from './discovery.js'
|
|
14
14
|
import { createListener } from './listener.js'
|
|
15
15
|
import { type RelayStoreInit, ReservationStore } from './reservation-store.js'
|
|
16
|
-
import type {
|
|
17
|
-
import type { Connection, Stream } from '@libp2p/interface
|
|
18
|
-
import type { ConnectionGater } from '@libp2p/interface
|
|
19
|
-
import type {
|
|
20
|
-
import type {
|
|
21
|
-
import type {
|
|
22
|
-
import type {
|
|
23
|
-
import type {
|
|
24
|
-
import type {
|
|
25
|
-
import type {
|
|
26
|
-
import type { EventEmitter } from '@libp2p/interfaces/events'
|
|
16
|
+
import type { Libp2pEvents, AbortOptions } from '@libp2p/interface'
|
|
17
|
+
import type { Connection, Stream } from '@libp2p/interface/connection'
|
|
18
|
+
import type { ConnectionGater } from '@libp2p/interface/connection-gater'
|
|
19
|
+
import type { ContentRouting } from '@libp2p/interface/content-routing'
|
|
20
|
+
import type { EventEmitter } from '@libp2p/interface/events'
|
|
21
|
+
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
22
|
+
import type { PeerStore } from '@libp2p/interface/peer-store'
|
|
23
|
+
import type { AddressManager } from '@libp2p/interface-internal/address-manager'
|
|
24
|
+
import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager'
|
|
25
|
+
import type { IncomingStreamData, Registrar } from '@libp2p/interface-internal/registrar'
|
|
27
26
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
28
27
|
|
|
29
28
|
const log = logger('libp2p:circuit-relay:transport')
|
|
@@ -82,14 +81,15 @@ export interface CircuitRelayTransportInit extends RelayStoreInit {
|
|
|
82
81
|
|
|
83
82
|
/**
|
|
84
83
|
* The maximum number of simultaneous STOP outbound streams that can be open at
|
|
85
|
-
* once.
|
|
86
|
-
*
|
|
84
|
+
* once. If this transport is used along with the relay server these settings
|
|
85
|
+
* should be set to the same value (default: 300)
|
|
87
86
|
*/
|
|
88
87
|
maxOutboundStopStreams?: number
|
|
89
88
|
}
|
|
90
89
|
|
|
91
90
|
const defaults = {
|
|
92
|
-
maxInboundStopStreams: MAX_CONNECTIONS
|
|
91
|
+
maxInboundStopStreams: MAX_CONNECTIONS,
|
|
92
|
+
maxOutboundStopStreams: MAX_CONNECTIONS
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
class CircuitRelayTransport implements Transport {
|
|
@@ -115,7 +115,7 @@ class CircuitRelayTransport implements Transport {
|
|
|
115
115
|
this.addressManager = components.addressManager
|
|
116
116
|
this.connectionGater = components.connectionGater
|
|
117
117
|
this.maxInboundStopStreams = init.maxInboundStopStreams ?? defaults.maxInboundStopStreams
|
|
118
|
-
this.maxOutboundStopStreams = init.maxOutboundStopStreams
|
|
118
|
+
this.maxOutboundStopStreams = init.maxOutboundStopStreams ?? defaults.maxOutboundStopStreams
|
|
119
119
|
|
|
120
120
|
if (init.discoverRelays != null && init.discoverRelays > 0) {
|
|
121
121
|
this.discovery = new RelayDiscovery(components)
|
|
@@ -266,7 +266,7 @@ class CircuitRelayTransport implements Transport {
|
|
|
266
266
|
localAddr: relayAddr.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`)
|
|
267
267
|
})
|
|
268
268
|
|
|
269
|
-
log('new outbound connection %
|
|
269
|
+
log('new outbound connection %a', maConn.remoteAddr)
|
|
270
270
|
return await this.upgrader.upgradeOutbound(maConn)
|
|
271
271
|
} catch (err) {
|
|
272
272
|
log.error(`Circuit relay dial to destination ${destinationPeer.toString()} via relay ${connection.remotePeer.toString()} failed`, err)
|
|
@@ -312,17 +312,17 @@ class CircuitRelayTransport implements Transport {
|
|
|
312
312
|
}
|
|
313
313
|
|
|
314
314
|
const stopstr = pbstr.pb(StopMessage)
|
|
315
|
-
log('new circuit relay v2 stop stream from %
|
|
315
|
+
log('new circuit relay v2 stop stream from %p', connection.remotePeer)
|
|
316
316
|
|
|
317
317
|
// Validate the STOP request has the required input
|
|
318
318
|
if (request.type !== StopMessage.Type.CONNECT) {
|
|
319
|
-
log.error('invalid stop connect request via peer %
|
|
319
|
+
log.error('invalid stop connect request via peer %p', connection.remotePeer)
|
|
320
320
|
stopstr.write({ type: StopMessage.Type.STATUS, status: Status.UNEXPECTED_MESSAGE })
|
|
321
321
|
return
|
|
322
322
|
}
|
|
323
323
|
|
|
324
324
|
if (!isValidStop(request)) {
|
|
325
|
-
log.error('invalid stop connect request via peer %
|
|
325
|
+
log.error('invalid stop connect request via peer %p', connection.remotePeer)
|
|
326
326
|
stopstr.write({ type: StopMessage.Type.STATUS, status: Status.MALFORMED_MESSAGE })
|
|
327
327
|
return
|
|
328
328
|
}
|
|
@@ -346,7 +346,7 @@ class CircuitRelayTransport implements Transport {
|
|
|
346
346
|
|
|
347
347
|
log('new inbound connection %s', maConn.remoteAddr)
|
|
348
348
|
await this.upgrader.upgradeInbound(maConn)
|
|
349
|
-
log('%s connection %
|
|
349
|
+
log('%s connection %a upgraded', 'inbound', maConn.remoteAddr)
|
|
350
350
|
}
|
|
351
351
|
}
|
|
352
352
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/
|
|
2
|
-
import { EventEmitter } from '@libp2p/
|
|
1
|
+
import { CodeError } from '@libp2p/interface/errors'
|
|
2
|
+
import { EventEmitter } from '@libp2p/interface/events'
|
|
3
3
|
import { logger } from '@libp2p/logger'
|
|
4
4
|
import { PeerMap } from '@libp2p/peer-collections'
|
|
5
5
|
import { peerIdFromString } from '@libp2p/peer-id'
|
|
6
6
|
import { multiaddr } from '@multiformats/multiaddr'
|
|
7
7
|
import type { ReservationStore } from './reservation-store.js'
|
|
8
|
-
import type { Connection } from '@libp2p/interface
|
|
9
|
-
import type {
|
|
10
|
-
import type {
|
|
11
|
-
import type {
|
|
8
|
+
import type { Connection } from '@libp2p/interface/connection'
|
|
9
|
+
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
10
|
+
import type { Listener, ListenerEvents } from '@libp2p/interface/transport'
|
|
11
|
+
import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager'
|
|
12
12
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
13
13
|
|
|
14
14
|
const log = logger('libp2p:circuit-relay:transport:listener')
|
|
@@ -37,7 +37,7 @@ class CircuitRelayTransportListener extends EventEmitter<ListenerEvents> impleme
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
async listen (addr: Multiaddr): Promise<void> {
|
|
40
|
-
log('listen on %
|
|
40
|
+
log('listen on %a', addr)
|
|
41
41
|
|
|
42
42
|
const relayPeerStr = addr.getPeerId()
|
|
43
43
|
let relayConn: Connection | undefined
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EventEmitter } from '@libp2p/
|
|
1
|
+
import { EventEmitter } from '@libp2p/interface/events'
|
|
2
2
|
import { logger } from '@libp2p/logger'
|
|
3
3
|
import { PeerMap } from '@libp2p/peer-collections'
|
|
4
4
|
import { multiaddr } from '@multiformats/multiaddr'
|
|
@@ -8,13 +8,13 @@ import { DEFAULT_RESERVATION_CONCURRENCY, RELAY_TAG, RELAY_V2_HOP_CODEC } from '
|
|
|
8
8
|
import { HopMessage, Status } from '../pb/index.js'
|
|
9
9
|
import { getExpirationMilliseconds } from '../utils.js'
|
|
10
10
|
import type { Reservation } from '../pb/index.js'
|
|
11
|
-
import type {
|
|
12
|
-
import type {
|
|
13
|
-
import type {
|
|
14
|
-
import type {
|
|
15
|
-
import type {
|
|
16
|
-
import type {
|
|
17
|
-
import type {
|
|
11
|
+
import type { Libp2pEvents } from '@libp2p/interface'
|
|
12
|
+
import type { Connection } from '@libp2p/interface/connection'
|
|
13
|
+
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
14
|
+
import type { PeerStore } from '@libp2p/interface/peer-store'
|
|
15
|
+
import type { Startable } from '@libp2p/interface/startable'
|
|
16
|
+
import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager'
|
|
17
|
+
import type { TransportManager } from '@libp2p/interface-internal/transport-manager'
|
|
18
18
|
|
|
19
19
|
const log = logger('libp2p:circuit-relay:transport:reservation-store')
|
|
20
20
|
|
|
@@ -237,7 +237,7 @@ export class ReservationStore extends EventEmitter<ReservationStoreEvents> imple
|
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
async #createReservation (connection: Connection): Promise<Reservation> {
|
|
240
|
-
log('requesting reservation from %
|
|
240
|
+
log('requesting reservation from %p', connection.remotePeer)
|
|
241
241
|
const stream = await connection.newStream(RELAY_V2_HOP_CODEC)
|
|
242
242
|
const pbstr = pbStream(stream)
|
|
243
243
|
const hopstr = pbstr.pb(HopMessage)
|
|
@@ -5,7 +5,7 @@ import { CID } from 'multiformats/cid'
|
|
|
5
5
|
import { sha256 } from 'multiformats/hashes/sha2'
|
|
6
6
|
import { DEFAULT_DATA_LIMIT, DEFAULT_DURATION_LIMIT } from './constants.js'
|
|
7
7
|
import type { Limit } from './pb/index.js'
|
|
8
|
-
import type { Stream } from '@libp2p/interface
|
|
8
|
+
import type { Stream } from '@libp2p/interface/connection'
|
|
9
9
|
import type { Source } from 'it-stream-types'
|
|
10
10
|
import type { Uint8ArrayList } from 'uint8arraylist'
|
|
11
11
|
|
package/src/components.ts
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/
|
|
2
|
-
import { isStartable, type Startable } from '@libp2p/
|
|
3
|
-
import type {
|
|
4
|
-
import type { ConnectionProtector } from '@libp2p/interface
|
|
5
|
-
import type { ConnectionGater } from '@libp2p/interface
|
|
6
|
-
import type {
|
|
7
|
-
import type {
|
|
8
|
-
import type {
|
|
9
|
-
import type {
|
|
10
|
-
import type {
|
|
11
|
-
import type {
|
|
12
|
-
import type {
|
|
13
|
-
import type {
|
|
14
|
-
import type {
|
|
15
|
-
import type {
|
|
1
|
+
import { CodeError } from '@libp2p/interface/errors'
|
|
2
|
+
import { isStartable, type Startable } from '@libp2p/interface/startable'
|
|
3
|
+
import type { Libp2pEvents } from '@libp2p/interface'
|
|
4
|
+
import type { ConnectionProtector } from '@libp2p/interface/connection'
|
|
5
|
+
import type { ConnectionGater } from '@libp2p/interface/connection-gater'
|
|
6
|
+
import type { ContentRouting } from '@libp2p/interface/content-routing'
|
|
7
|
+
import type { EventEmitter } from '@libp2p/interface/events'
|
|
8
|
+
import type { Metrics } from '@libp2p/interface/metrics'
|
|
9
|
+
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
10
|
+
import type { PeerRouting } from '@libp2p/interface/peer-routing'
|
|
11
|
+
import type { PeerStore } from '@libp2p/interface/peer-store'
|
|
12
|
+
import type { Upgrader } from '@libp2p/interface/transport'
|
|
13
|
+
import type { AddressManager } from '@libp2p/interface-internal/address-manager'
|
|
14
|
+
import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager'
|
|
15
|
+
import type { Registrar } from '@libp2p/interface-internal/registrar'
|
|
16
|
+
import type { TransportManager } from '@libp2p/interface-internal/transport-manager'
|
|
16
17
|
import type { Datastore } from 'interface-datastore'
|
|
17
18
|
|
|
18
19
|
export interface Components extends Record<string, any>, Startable {
|
package/src/config.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { CodeError } from '@libp2p/interface/errors'
|
|
2
|
+
import { FaultTolerance } from '@libp2p/interface/transport'
|
|
3
3
|
import { publicAddressesFirst } from '@libp2p/utils/address-sort'
|
|
4
4
|
import { dnsaddrResolver } from '@multiformats/multiaddr/resolvers'
|
|
5
5
|
import mergeOptions from 'merge-options'
|
|
6
6
|
import { codes, messages } from './errors.js'
|
|
7
7
|
import type { Libp2pInit } from './index.js'
|
|
8
|
-
import type { ServiceMap } from '@libp2p/interface
|
|
9
|
-
import type { RecursivePartial } from '@libp2p/interfaces'
|
|
8
|
+
import type { ServiceMap, RecursivePartial } from '@libp2p/interface'
|
|
10
9
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
11
10
|
|
|
12
11
|
const DefaultConfig: Partial<Libp2pInit> = {
|
package/src/connection/index.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { symbol } from '@libp2p/interface
|
|
2
|
-
import { OPEN, CLOSING, CLOSED } from '@libp2p/interface
|
|
3
|
-
import { CodeError } from '@libp2p/
|
|
1
|
+
import { symbol } from '@libp2p/interface/connection'
|
|
2
|
+
import { OPEN, CLOSING, CLOSED } from '@libp2p/interface/connection/status'
|
|
3
|
+
import { CodeError } from '@libp2p/interface/errors'
|
|
4
4
|
import { logger } from '@libp2p/logger'
|
|
5
|
-
import type {
|
|
6
|
-
import type {
|
|
7
|
-
import type {
|
|
5
|
+
import type { AbortOptions } from '@libp2p/interface'
|
|
6
|
+
import type { Connection, ConnectionStat, Stream } from '@libp2p/interface/connection'
|
|
7
|
+
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
8
8
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
9
9
|
|
|
10
10
|
const log = logger('libp2p:connection')
|
|
@@ -2,11 +2,11 @@ import { logger } from '@libp2p/logger'
|
|
|
2
2
|
import { PeerMap, PeerSet } from '@libp2p/peer-collections'
|
|
3
3
|
import { PeerJobQueue } from '../utils/peer-job-queue.js'
|
|
4
4
|
import { AUTO_DIAL_CONCURRENCY, AUTO_DIAL_INTERVAL, AUTO_DIAL_MAX_QUEUE_LENGTH, AUTO_DIAL_PRIORITY, MIN_CONNECTIONS } from './constants.js'
|
|
5
|
-
import type {
|
|
6
|
-
import type {
|
|
7
|
-
import type { PeerStore } from '@libp2p/interface
|
|
8
|
-
import type {
|
|
9
|
-
import type {
|
|
5
|
+
import type { Libp2pEvents } from '@libp2p/interface'
|
|
6
|
+
import type { EventEmitter } from '@libp2p/interface/events'
|
|
7
|
+
import type { PeerStore } from '@libp2p/interface/peer-store'
|
|
8
|
+
import type { Startable } from '@libp2p/interface/startable'
|
|
9
|
+
import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager'
|
|
10
10
|
|
|
11
11
|
const log = logger('libp2p:connection-manager:auto-dial')
|
|
12
12
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { logger } from '@libp2p/logger'
|
|
2
2
|
import { PeerMap } from '@libp2p/peer-collections'
|
|
3
3
|
import { MAX_CONNECTIONS } from './constants.js'
|
|
4
|
-
import type {
|
|
5
|
-
import type {
|
|
6
|
-
import type { PeerStore } from '@libp2p/interface
|
|
7
|
-
import type {
|
|
4
|
+
import type { Libp2pEvents } from '@libp2p/interface'
|
|
5
|
+
import type { EventEmitter } from '@libp2p/interface/events'
|
|
6
|
+
import type { PeerStore } from '@libp2p/interface/peer-store'
|
|
7
|
+
import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager'
|
|
8
8
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
9
9
|
|
|
10
10
|
const log = logger('libp2p:connection-manager:connection-pruner')
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { setMaxListeners } from 'events'
|
|
2
|
-
import { AbortError, CodeError } from '@libp2p/
|
|
2
|
+
import { AbortError, CodeError } from '@libp2p/interface/errors'
|
|
3
3
|
import { logger } from '@libp2p/logger'
|
|
4
4
|
import { publicAddressesFirst } from '@libp2p/utils/address-sort'
|
|
5
5
|
import { type Multiaddr, type Resolver, resolvers } from '@multiformats/multiaddr'
|
|
@@ -16,14 +16,13 @@ import {
|
|
|
16
16
|
MAX_PEER_ADDRS_TO_DIAL
|
|
17
17
|
} from './constants.js'
|
|
18
18
|
import { combineSignals, resolveMultiaddrs } from './utils.js'
|
|
19
|
-
import type {
|
|
20
|
-
import type {
|
|
21
|
-
import type {
|
|
22
|
-
import type { Metric, Metrics } from '@libp2p/interface
|
|
23
|
-
import type { PeerId } from '@libp2p/interface
|
|
24
|
-
import type { Address, PeerStore } from '@libp2p/interface
|
|
25
|
-
import type { TransportManager } from '@libp2p/interface-transport'
|
|
26
|
-
import type { AbortOptions } from '@libp2p/interfaces'
|
|
19
|
+
import type { AddressSorter, AbortOptions } from '@libp2p/interface'
|
|
20
|
+
import type { Connection } from '@libp2p/interface/connection'
|
|
21
|
+
import type { ConnectionGater } from '@libp2p/interface/connection-gater'
|
|
22
|
+
import type { Metric, Metrics } from '@libp2p/interface/metrics'
|
|
23
|
+
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
24
|
+
import type { Address, PeerStore } from '@libp2p/interface/peer-store'
|
|
25
|
+
import type { TransportManager } from '@libp2p/interface-internal/transport-manager'
|
|
27
26
|
|
|
28
27
|
const log = logger('libp2p:connection-manager:dial-queue')
|
|
29
28
|
|
|
@@ -419,13 +418,13 @@ export class DialQueue {
|
|
|
419
418
|
// let any signal abort the dial
|
|
420
419
|
const signal = combineSignals(controller.signal, options.signal)
|
|
421
420
|
signal.addEventListener('abort', () => {
|
|
422
|
-
log('dial to %
|
|
421
|
+
log('dial to %a aborted', addr)
|
|
423
422
|
})
|
|
424
423
|
const deferred = pDefer<Connection>()
|
|
425
424
|
|
|
426
425
|
await peerDialQueue.add(async () => {
|
|
427
426
|
if (signal.aborted) {
|
|
428
|
-
log('dial to %
|
|
427
|
+
log('dial to %a was aborted before reaching the head of the peer dial queue', addr)
|
|
429
428
|
deferred.reject(new AbortError())
|
|
430
429
|
return
|
|
431
430
|
}
|
|
@@ -434,7 +433,7 @@ export class DialQueue {
|
|
|
434
433
|
await this.queue.add(async () => {
|
|
435
434
|
try {
|
|
436
435
|
if (signal.aborted) {
|
|
437
|
-
log('dial to %
|
|
436
|
+
log('dial to %a was aborted before reaching the head of the dial queue', addr)
|
|
438
437
|
deferred.reject(new AbortError())
|
|
439
438
|
return
|
|
440
439
|
}
|
|
@@ -469,13 +468,13 @@ export class DialQueue {
|
|
|
469
468
|
}
|
|
470
469
|
})
|
|
471
470
|
|
|
472
|
-
log('dial to %
|
|
471
|
+
log('dial to %a succeeded', addr)
|
|
473
472
|
|
|
474
473
|
// resolve the connection promise
|
|
475
474
|
deferred.resolve(conn)
|
|
476
475
|
} catch (err: any) {
|
|
477
476
|
// something only went wrong if our signal was not aborted
|
|
478
|
-
log.error('error during dial of %
|
|
477
|
+
log.error('error during dial of %a', addr, err)
|
|
479
478
|
deferred.reject(err)
|
|
480
479
|
}
|
|
481
480
|
}, {
|