libp2p 0.46.21 → 1.0.0
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 +51 -47
- package/dist/index.min.js +40 -28
- package/dist/src/address-manager/index.d.ts +4 -5
- package/dist/src/address-manager/index.d.ts.map +1 -1
- package/dist/src/address-manager/index.js +3 -3
- package/dist/src/address-manager/index.js.map +1 -1
- package/dist/src/components.d.ts +4 -15
- 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.browser.d.ts.map +1 -1
- package/dist/src/config/connection-gater.browser.js.map +1 -1
- package/dist/src/config/connection-gater.d.ts +1 -1
- package/dist/src/config/connection-gater.d.ts.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +1 -2
- package/dist/src/config.js.map +1 -1
- package/dist/src/connection/index.d.ts +4 -6
- package/dist/src/connection/index.d.ts.map +1 -1
- package/dist/src/connection/index.js +11 -13
- package/dist/src/connection/index.js.map +1 -1
- package/dist/src/connection-manager/auto-dial.d.ts +3 -6
- package/dist/src/connection-manager/auto-dial.d.ts.map +1 -1
- package/dist/src/connection-manager/auto-dial.js +21 -21
- package/dist/src/connection-manager/auto-dial.js.map +1 -1
- package/dist/src/connection-manager/connection-pruner.d.ts +3 -5
- package/dist/src/connection-manager/connection-pruner.d.ts.map +1 -1
- package/dist/src/connection-manager/connection-pruner.js +8 -8
- package/dist/src/connection-manager/connection-pruner.js.map +1 -1
- package/dist/src/connection-manager/constants.defaults.d.ts +0 -4
- package/dist/src/connection-manager/constants.defaults.d.ts.map +1 -1
- package/dist/src/connection-manager/constants.defaults.js +0 -4
- package/dist/src/connection-manager/constants.defaults.js.map +1 -1
- package/dist/src/connection-manager/dial-queue.d.ts +3 -10
- package/dist/src/connection-manager/dial-queue.d.ts.map +1 -1
- package/dist/src/connection-manager/dial-queue.js +30 -38
- package/dist/src/connection-manager/dial-queue.js.map +1 -1
- package/dist/src/connection-manager/index.d.ts +3 -18
- package/dist/src/connection-manager/index.d.ts.map +1 -1
- package/dist/src/connection-manager/index.js +17 -18
- package/dist/src/connection-manager/index.js.map +1 -1
- package/dist/src/connection-manager/utils.js +1 -1
- package/dist/src/connection-manager/utils.js.map +1 -1
- package/dist/src/content-routing/index.d.ts +1 -5
- package/dist/src/content-routing/index.d.ts.map +1 -1
- package/dist/src/content-routing/index.js +2 -2
- package/dist/src/content-routing/index.js.map +1 -1
- package/dist/src/content-routing/utils.d.ts +1 -2
- package/dist/src/content-routing/utils.d.ts.map +1 -1
- package/dist/src/content-routing/utils.js +1 -1
- package/dist/src/content-routing/utils.js.map +1 -1
- package/dist/src/errors.d.ts +0 -2
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +0 -2
- package/dist/src/errors.js.map +1 -1
- package/dist/src/get-peer.d.ts +1 -1
- package/dist/src/get-peer.d.ts.map +1 -1
- package/dist/src/get-peer.js +1 -5
- package/dist/src/get-peer.js.map +1 -1
- package/dist/src/index.d.ts +5 -16
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/libp2p.d.ts +4 -12
- package/dist/src/libp2p.d.ts.map +1 -1
- package/dist/src/libp2p.js +31 -65
- package/dist/src/libp2p.js.map +1 -1
- package/dist/src/peer-routing.d.ts +6 -6
- package/dist/src/peer-routing.d.ts.map +1 -1
- package/dist/src/peer-routing.js +12 -9
- package/dist/src/peer-routing.js.map +1 -1
- package/dist/src/registrar.d.ts +5 -7
- package/dist/src/registrar.d.ts.map +1 -1
- package/dist/src/registrar.js +4 -4
- package/dist/src/registrar.js.map +1 -1
- package/dist/src/transport-manager.d.ts +5 -9
- package/dist/src/transport-manager.d.ts.map +1 -1
- package/dist/src/transport-manager.js +12 -13
- package/dist/src/transport-manager.js.map +1 -1
- package/dist/src/upgrader.d.ts +8 -19
- package/dist/src/upgrader.d.ts.map +1 -1
- package/dist/src/upgrader.js +75 -38
- package/dist/src/upgrader.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.d.ts.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/typedoc-urls.json +8 -69
- package/package.json +37 -106
- package/src/address-manager/index.ts +6 -9
- package/src/components.ts +5 -16
- package/src/config/connection-gater.browser.ts +1 -1
- package/src/config/connection-gater.ts +1 -1
- package/src/config.ts +1 -2
- package/src/connection/index.ts +12 -17
- package/src/connection-manager/auto-dial.ts +23 -26
- package/src/connection-manager/connection-pruner.ts +10 -12
- package/src/connection-manager/constants.defaults.ts +0 -5
- package/src/connection-manager/dial-queue.ts +31 -46
- package/src/connection-manager/index.ts +19 -36
- package/src/connection-manager/utils.ts +1 -1
- package/src/content-routing/index.ts +3 -7
- package/src/content-routing/utils.ts +2 -3
- package/src/errors.ts +0 -2
- package/src/get-peer.ts +2 -7
- package/src/index.ts +6 -17
- package/src/libp2p.ts +32 -80
- package/src/peer-routing.ts +16 -15
- package/src/registrar.ts +8 -12
- package/src/transport-manager.ts +15 -22
- package/src/upgrader.ts +110 -64
- package/src/version.ts +1 -1
- package/dist/src/autonat/constants.d.ts +0 -18
- package/dist/src/autonat/constants.d.ts.map +0 -1
- package/dist/src/autonat/constants.js +0 -18
- package/dist/src/autonat/constants.js.map +0 -1
- package/dist/src/autonat/index.d.ts +0 -62
- package/dist/src/autonat/index.d.ts.map +0 -1
- package/dist/src/autonat/index.js +0 -447
- package/dist/src/autonat/index.js.map +0 -1
- package/dist/src/autonat/pb/index.d.ts +0 -57
- package/dist/src/autonat/pb/index.d.ts.map +0 -1
- package/dist/src/autonat/pb/index.js +0 -250
- package/dist/src/autonat/pb/index.js.map +0 -1
- package/dist/src/circuit-relay/constants.d.ts +0 -50
- package/dist/src/circuit-relay/constants.d.ts.map +0 -1
- package/dist/src/circuit-relay/constants.js +0 -56
- package/dist/src/circuit-relay/constants.js.map +0 -1
- package/dist/src/circuit-relay/index.d.ts +0 -55
- package/dist/src/circuit-relay/index.d.ts.map +0 -1
- package/dist/src/circuit-relay/index.js +0 -38
- package/dist/src/circuit-relay/index.js.map +0 -1
- package/dist/src/circuit-relay/pb/index.d.ts +0 -93
- package/dist/src/circuit-relay/pb/index.d.ts.map +0 -1
- package/dist/src/circuit-relay/pb/index.js +0 -425
- package/dist/src/circuit-relay/pb/index.js.map +0 -1
- package/dist/src/circuit-relay/server/advert-service.d.ts +0 -43
- package/dist/src/circuit-relay/server/advert-service.d.ts.map +0 -1
- package/dist/src/circuit-relay/server/advert-service.js +0 -73
- package/dist/src/circuit-relay/server/advert-service.js.map +0 -1
- package/dist/src/circuit-relay/server/index.d.ts +0 -65
- package/dist/src/circuit-relay/server/index.d.ts.map +0 -1
- package/dist/src/circuit-relay/server/index.js +0 -312
- package/dist/src/circuit-relay/server/index.js.map +0 -1
- package/dist/src/circuit-relay/server/reservation-store.d.ts +0 -49
- package/dist/src/circuit-relay/server/reservation-store.d.ts.map +0 -1
- package/dist/src/circuit-relay/server/reservation-store.js +0 -65
- package/dist/src/circuit-relay/server/reservation-store.js.map +0 -1
- package/dist/src/circuit-relay/server/reservation-voucher.d.ts +0 -18
- package/dist/src/circuit-relay/server/reservation-voucher.d.ts.map +0 -1
- package/dist/src/circuit-relay/server/reservation-voucher.js +0 -36
- package/dist/src/circuit-relay/server/reservation-voucher.js.map +0 -1
- package/dist/src/circuit-relay/transport/discovery.d.ts +0 -45
- package/dist/src/circuit-relay/transport/discovery.d.ts.map +0 -1
- package/dist/src/circuit-relay/transport/discovery.js +0 -97
- package/dist/src/circuit-relay/transport/discovery.js.map +0 -1
- package/dist/src/circuit-relay/transport/index.d.ts +0 -57
- package/dist/src/circuit-relay/transport/index.d.ts.map +0 -1
- package/dist/src/circuit-relay/transport/index.js +0 -276
- package/dist/src/circuit-relay/transport/index.js.map +0 -1
- package/dist/src/circuit-relay/transport/listener.d.ts +0 -9
- package/dist/src/circuit-relay/transport/listener.d.ts.map +0 -1
- package/dist/src/circuit-relay/transport/listener.js +0 -66
- package/dist/src/circuit-relay/transport/listener.js.map +0 -1
- package/dist/src/circuit-relay/transport/reservation-store.d.ts +0 -72
- package/dist/src/circuit-relay/transport/reservation-store.d.ts.map +0 -1
- package/dist/src/circuit-relay/transport/reservation-store.js +0 -209
- package/dist/src/circuit-relay/transport/reservation-store.js.map +0 -1
- package/dist/src/circuit-relay/utils.d.ts +0 -13
- package/dist/src/circuit-relay/utils.d.ts.map +0 -1
- package/dist/src/circuit-relay/utils.js +0 -108
- package/dist/src/circuit-relay/utils.js.map +0 -1
- package/dist/src/dcutr/dcutr.d.ts +0 -43
- package/dist/src/dcutr/dcutr.d.ts.map +0 -1
- package/dist/src/dcutr/dcutr.js +0 -313
- package/dist/src/dcutr/dcutr.js.map +0 -1
- package/dist/src/dcutr/index.d.ts +0 -92
- package/dist/src/dcutr/index.d.ts.map +0 -1
- package/dist/src/dcutr/index.js +0 -63
- package/dist/src/dcutr/index.js.map +0 -1
- package/dist/src/dcutr/pb/message.d.ts +0 -20
- package/dist/src/dcutr/pb/message.d.ts.map +0 -1
- package/dist/src/dcutr/pb/message.js +0 -77
- package/dist/src/dcutr/pb/message.js.map +0 -1
- package/dist/src/dcutr/utils.d.ts +0 -8
- package/dist/src/dcutr/utils.d.ts.map +0 -1
- package/dist/src/dcutr/utils.js +0 -27
- package/dist/src/dcutr/utils.js.map +0 -1
- package/dist/src/fetch/constants.d.ts +0 -3
- package/dist/src/fetch/constants.d.ts.map +0 -1
- package/dist/src/fetch/constants.js +0 -4
- package/dist/src/fetch/constants.js.map +0 -1
- package/dist/src/fetch/index.d.ts +0 -61
- package/dist/src/fetch/index.d.ts.map +0 -1
- package/dist/src/fetch/index.js +0 -205
- package/dist/src/fetch/index.js.map +0 -1
- package/dist/src/fetch/pb/proto.d.ts +0 -28
- package/dist/src/fetch/pb/proto.d.ts.map +0 -1
- package/dist/src/fetch/pb/proto.js +0 -120
- package/dist/src/fetch/pb/proto.js.map +0 -1
- package/dist/src/identify/consts.d.ts +0 -10
- package/dist/src/identify/consts.d.ts.map +0 -1
- package/dist/src/identify/consts.js +0 -11
- package/dist/src/identify/consts.js.map +0 -1
- package/dist/src/identify/identify.d.ts +0 -54
- package/dist/src/identify/identify.d.ts.map +0 -1
- package/dist/src/identify/identify.js +0 -447
- package/dist/src/identify/identify.js.map +0 -1
- package/dist/src/identify/index.d.ts +0 -72
- package/dist/src/identify/index.d.ts.map +0 -1
- package/dist/src/identify/index.js +0 -15
- package/dist/src/identify/index.js.map +0 -1
- package/dist/src/identify/pb/message.d.ts +0 -17
- package/dist/src/identify/pb/message.d.ts.map +0 -1
- package/dist/src/identify/pb/message.js +0 -98
- package/dist/src/identify/pb/message.js.map +0 -1
- package/dist/src/insecure/index.d.ts +0 -26
- package/dist/src/insecure/index.d.ts.map +0 -1
- package/dist/src/insecure/index.js +0 -110
- package/dist/src/insecure/index.js.map +0 -1
- package/dist/src/insecure/pb/proto.d.ts +0 -30
- package/dist/src/insecure/pb/proto.d.ts.map +0 -1
- package/dist/src/insecure/pb/proto.js +0 -127
- package/dist/src/insecure/pb/proto.js.map +0 -1
- package/dist/src/ping/constants.d.ts +0 -9
- package/dist/src/ping/constants.d.ts.map +0 -1
- package/dist/src/ping/constants.js +0 -15
- package/dist/src/ping/constants.js.map +0 -1
- package/dist/src/ping/index.d.ts +0 -24
- package/dist/src/ping/index.d.ts.map +0 -1
- package/dist/src/ping/index.js +0 -115
- package/dist/src/ping/index.js.map +0 -1
- package/dist/src/pnet/crypto.d.ts +0 -18
- package/dist/src/pnet/crypto.d.ts.map +0 -1
- package/dist/src/pnet/crypto.js +0 -60
- package/dist/src/pnet/crypto.js.map +0 -1
- package/dist/src/pnet/errors.d.ts +0 -6
- package/dist/src/pnet/errors.d.ts.map +0 -1
- package/dist/src/pnet/errors.js +0 -6
- package/dist/src/pnet/errors.js.map +0 -1
- package/dist/src/pnet/index.d.ts +0 -31
- package/dist/src/pnet/index.d.ts.map +0 -1
- package/dist/src/pnet/index.js +0 -97
- package/dist/src/pnet/index.js.map +0 -1
- package/dist/src/pnet/key-generator.d.ts +0 -11
- package/dist/src/pnet/key-generator.d.ts.map +0 -1
- package/dist/src/pnet/key-generator.js +0 -22
- package/dist/src/pnet/key-generator.js.map +0 -1
- package/dist/src/upnp-nat/index.d.ts +0 -71
- package/dist/src/upnp-nat/index.d.ts.map +0 -1
- package/dist/src/upnp-nat/index.js +0 -136
- package/dist/src/upnp-nat/index.js.map +0 -1
- package/dist/src/utils/peer-job-queue.d.ts +0 -33
- package/dist/src/utils/peer-job-queue.d.ts.map +0 -1
- package/dist/src/utils/peer-job-queue.js +0 -82
- package/dist/src/utils/peer-job-queue.js.map +0 -1
- package/src/autonat/constants.ts +0 -19
- package/src/autonat/index.ts +0 -597
- package/src/autonat/pb/index.proto +0 -35
- package/src/autonat/pb/index.ts +0 -320
- package/src/circuit-relay/constants.ts +0 -72
- package/src/circuit-relay/index.ts +0 -59
- package/src/circuit-relay/pb/index.proto +0 -67
- package/src/circuit-relay/pb/index.ts +0 -539
- package/src/circuit-relay/server/advert-service.ts +0 -108
- package/src/circuit-relay/server/index.ts +0 -443
- package/src/circuit-relay/server/reservation-store.ts +0 -116
- package/src/circuit-relay/server/reservation-voucher.ts +0 -51
- package/src/circuit-relay/transport/discovery.ts +0 -136
- package/src/circuit-relay/transport/index.ts +0 -396
- package/src/circuit-relay/transport/listener.ts +0 -97
- package/src/circuit-relay/transport/reservation-store.ts +0 -312
- package/src/circuit-relay/utils.ts +0 -136
- package/src/dcutr/dcutr.ts +0 -378
- package/src/dcutr/index.ts +0 -102
- package/src/dcutr/pb/message.proto +0 -12
- package/src/dcutr/pb/message.ts +0 -96
- package/src/dcutr/utils.ts +0 -33
- package/src/fetch/README.md +0 -41
- package/src/fetch/constants.ts +0 -3
- package/src/fetch/index.ts +0 -315
- package/src/fetch/pb/proto.proto +0 -15
- package/src/fetch/pb/proto.ts +0 -153
- package/src/identify/README.md +0 -13
- package/src/identify/consts.ts +0 -12
- package/src/identify/identify.ts +0 -561
- package/src/identify/index.ts +0 -90
- package/src/identify/pb/message.proto +0 -30
- package/src/identify/pb/message.ts +0 -126
- package/src/insecure/index.ts +0 -138
- package/src/insecure/pb/proto.proto +0 -18
- package/src/insecure/pb/proto.ts +0 -161
- package/src/ping/constants.ts +0 -15
- package/src/ping/index.ts +0 -170
- package/src/pnet/README.md +0 -68
- package/src/pnet/crypto.ts +0 -67
- package/src/pnet/errors.ts +0 -5
- package/src/pnet/index.ts +0 -126
- package/src/pnet/key-generator.ts +0 -23
- package/src/upnp-nat/index.ts +0 -212
- package/src/utils/peer-job-queue.ts +0 -119
|
@@ -1,312 +0,0 @@
|
|
|
1
|
-
import { TypedEventEmitter, setMaxListeners } from '@libp2p/interface/events';
|
|
2
|
-
import { logger } from '@libp2p/logger';
|
|
3
|
-
import { peerIdFromBytes } from '@libp2p/peer-id';
|
|
4
|
-
import { RecordEnvelope } from '@libp2p/peer-record';
|
|
5
|
-
import { multiaddr } from '@multiformats/multiaddr';
|
|
6
|
-
import { pbStream } from 'it-protobuf-stream';
|
|
7
|
-
import pDefer from 'p-defer';
|
|
8
|
-
import { MAX_CONNECTIONS } from '../../connection-manager/constants.js';
|
|
9
|
-
import { CIRCUIT_PROTO_CODE, DEFAULT_HOP_TIMEOUT, RELAY_SOURCE_TAG, RELAY_V2_HOP_CODEC, RELAY_V2_STOP_CODEC } from '../constants.js';
|
|
10
|
-
import { HopMessage, Status, StopMessage } from '../pb/index.js';
|
|
11
|
-
import { createLimitedRelay } from '../utils.js';
|
|
12
|
-
import { AdvertService } from './advert-service.js';
|
|
13
|
-
import { ReservationStore } from './reservation-store.js';
|
|
14
|
-
import { ReservationVoucherRecord } from './reservation-voucher.js';
|
|
15
|
-
const log = logger('libp2p:circuit-relay:server');
|
|
16
|
-
const isRelayAddr = (ma) => ma.protoCodes().includes(CIRCUIT_PROTO_CODE);
|
|
17
|
-
const defaults = {
|
|
18
|
-
maxOutboundStopStreams: MAX_CONNECTIONS
|
|
19
|
-
};
|
|
20
|
-
class CircuitRelayServer extends TypedEventEmitter {
|
|
21
|
-
registrar;
|
|
22
|
-
peerStore;
|
|
23
|
-
addressManager;
|
|
24
|
-
peerId;
|
|
25
|
-
connectionManager;
|
|
26
|
-
connectionGater;
|
|
27
|
-
reservationStore;
|
|
28
|
-
advertService;
|
|
29
|
-
started;
|
|
30
|
-
hopTimeout;
|
|
31
|
-
shutdownController;
|
|
32
|
-
maxInboundHopStreams;
|
|
33
|
-
maxOutboundHopStreams;
|
|
34
|
-
maxOutboundStopStreams;
|
|
35
|
-
/**
|
|
36
|
-
* Creates an instance of Relay
|
|
37
|
-
*/
|
|
38
|
-
constructor(components, init = {}) {
|
|
39
|
-
super();
|
|
40
|
-
this.registrar = components.registrar;
|
|
41
|
-
this.peerStore = components.peerStore;
|
|
42
|
-
this.addressManager = components.addressManager;
|
|
43
|
-
this.peerId = components.peerId;
|
|
44
|
-
this.connectionManager = components.connectionManager;
|
|
45
|
-
this.connectionGater = components.connectionGater;
|
|
46
|
-
this.started = false;
|
|
47
|
-
this.hopTimeout = init?.hopTimeout ?? DEFAULT_HOP_TIMEOUT;
|
|
48
|
-
this.shutdownController = new AbortController();
|
|
49
|
-
this.maxInboundHopStreams = init.maxInboundHopStreams;
|
|
50
|
-
this.maxOutboundHopStreams = init.maxOutboundHopStreams;
|
|
51
|
-
this.maxOutboundStopStreams = init.maxOutboundStopStreams ?? defaults.maxOutboundStopStreams;
|
|
52
|
-
setMaxListeners(Infinity, this.shutdownController.signal);
|
|
53
|
-
if (init.advertise != null && init.advertise !== false) {
|
|
54
|
-
this.advertService = new AdvertService(components, init.advertise === true ? undefined : init.advertise);
|
|
55
|
-
this.advertService.addEventListener('advert:success', () => {
|
|
56
|
-
this.safeDispatchEvent('relay:advert:success', {});
|
|
57
|
-
});
|
|
58
|
-
this.advertService.addEventListener('advert:error', (evt) => {
|
|
59
|
-
this.safeDispatchEvent('relay:advert:error', { detail: evt.detail });
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
this.reservationStore = new ReservationStore(init.reservations);
|
|
63
|
-
}
|
|
64
|
-
isStarted() {
|
|
65
|
-
return this.started;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Start Relay service
|
|
69
|
-
*/
|
|
70
|
-
async start() {
|
|
71
|
-
if (this.started) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
// Advertise service if HOP enabled and advertising enabled
|
|
75
|
-
this.advertService?.start();
|
|
76
|
-
await this.registrar.handle(RELAY_V2_HOP_CODEC, (data) => {
|
|
77
|
-
void this.onHop(data).catch(err => {
|
|
78
|
-
log.error(err);
|
|
79
|
-
});
|
|
80
|
-
}, {
|
|
81
|
-
maxInboundStreams: this.maxInboundHopStreams,
|
|
82
|
-
maxOutboundStreams: this.maxOutboundHopStreams,
|
|
83
|
-
runOnTransientConnection: true
|
|
84
|
-
});
|
|
85
|
-
this.reservationStore.start();
|
|
86
|
-
this.started = true;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Stop Relay service
|
|
90
|
-
*/
|
|
91
|
-
async stop() {
|
|
92
|
-
this.advertService?.stop();
|
|
93
|
-
this.reservationStore.stop();
|
|
94
|
-
this.shutdownController.abort();
|
|
95
|
-
await this.registrar.unhandle(RELAY_V2_HOP_CODEC);
|
|
96
|
-
this.started = false;
|
|
97
|
-
}
|
|
98
|
-
async onHop({ connection, stream }) {
|
|
99
|
-
log('received circuit v2 hop protocol stream from %p', connection.remotePeer);
|
|
100
|
-
const hopTimeoutPromise = pDefer();
|
|
101
|
-
const timeout = setTimeout(() => {
|
|
102
|
-
hopTimeoutPromise.reject('timed out');
|
|
103
|
-
}, this.hopTimeout);
|
|
104
|
-
const pbstr = pbStream(stream);
|
|
105
|
-
try {
|
|
106
|
-
const request = await Promise.race([
|
|
107
|
-
pbstr.pb(HopMessage).read(),
|
|
108
|
-
hopTimeoutPromise.promise
|
|
109
|
-
]);
|
|
110
|
-
if (request?.type == null) {
|
|
111
|
-
throw new Error('request was invalid, could not read from stream');
|
|
112
|
-
}
|
|
113
|
-
log('received', request.type);
|
|
114
|
-
await Promise.race([
|
|
115
|
-
this.handleHopProtocol({
|
|
116
|
-
connection,
|
|
117
|
-
stream: pbstr,
|
|
118
|
-
request
|
|
119
|
-
}),
|
|
120
|
-
hopTimeoutPromise.promise
|
|
121
|
-
]);
|
|
122
|
-
}
|
|
123
|
-
catch (err) {
|
|
124
|
-
log.error('error while handling hop', err);
|
|
125
|
-
await pbstr.pb(HopMessage).write({
|
|
126
|
-
type: HopMessage.Type.STATUS,
|
|
127
|
-
status: Status.MALFORMED_MESSAGE
|
|
128
|
-
});
|
|
129
|
-
stream.abort(err);
|
|
130
|
-
}
|
|
131
|
-
finally {
|
|
132
|
-
clearTimeout(timeout);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
async handleHopProtocol({ stream, request, connection }) {
|
|
136
|
-
log('received hop message');
|
|
137
|
-
switch (request.type) {
|
|
138
|
-
case HopMessage.Type.RESERVE:
|
|
139
|
-
await this.handleReserve({ stream, request, connection });
|
|
140
|
-
break;
|
|
141
|
-
case HopMessage.Type.CONNECT:
|
|
142
|
-
await this.handleConnect({ stream, request, connection });
|
|
143
|
-
break;
|
|
144
|
-
default: {
|
|
145
|
-
log.error('invalid hop request type %s via peer %p', request.type, connection.remotePeer);
|
|
146
|
-
await stream.pb(HopMessage).write({ type: HopMessage.Type.STATUS, status: Status.UNEXPECTED_MESSAGE });
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
async handleReserve({ stream, request, connection }) {
|
|
151
|
-
const hopstr = stream.pb(HopMessage);
|
|
152
|
-
log('hop reserve request from %p', connection.remotePeer);
|
|
153
|
-
if (isRelayAddr(connection.remoteAddr)) {
|
|
154
|
-
log.error('relay reservation over circuit connection denied for peer: %p', connection.remotePeer);
|
|
155
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED });
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
if ((await this.connectionGater.denyInboundRelayReservation?.(connection.remotePeer)) === true) {
|
|
159
|
-
log.error('reservation for %p denied by connection gater', connection.remotePeer);
|
|
160
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED });
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
const result = this.reservationStore.reserve(connection.remotePeer, connection.remoteAddr);
|
|
164
|
-
if (result.status !== Status.OK) {
|
|
165
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: result.status });
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
try {
|
|
169
|
-
// tag relay target peer
|
|
170
|
-
// result.expire is non-null if `ReservationStore.reserve` returns with status == OK
|
|
171
|
-
if (result.expire != null) {
|
|
172
|
-
const ttl = (result.expire * 1000) - Date.now();
|
|
173
|
-
await this.peerStore.merge(connection.remotePeer, {
|
|
174
|
-
tags: {
|
|
175
|
-
[RELAY_SOURCE_TAG]: { value: 1, ttl }
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
await hopstr.write({
|
|
180
|
-
type: HopMessage.Type.STATUS,
|
|
181
|
-
status: Status.OK,
|
|
182
|
-
reservation: await this.makeReservation(connection.remotePeer, BigInt(result.expire ?? 0)),
|
|
183
|
-
limit: this.reservationStore.get(connection.remotePeer)?.limit
|
|
184
|
-
});
|
|
185
|
-
log('sent confirmation response to %s', connection.remotePeer);
|
|
186
|
-
}
|
|
187
|
-
catch (err) {
|
|
188
|
-
log.error('failed to send confirmation response to %p', connection.remotePeer, err);
|
|
189
|
-
this.reservationStore.removeReservation(connection.remotePeer);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
async makeReservation(remotePeer, expire) {
|
|
193
|
-
const addrs = [];
|
|
194
|
-
for (const relayAddr of this.addressManager.getAddresses()) {
|
|
195
|
-
if (relayAddr.toString().includes('/p2p-circuit')) {
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
198
|
-
addrs.push(relayAddr.bytes);
|
|
199
|
-
}
|
|
200
|
-
const voucher = await RecordEnvelope.seal(new ReservationVoucherRecord({
|
|
201
|
-
peer: remotePeer,
|
|
202
|
-
relay: this.peerId,
|
|
203
|
-
expiration: Number(expire)
|
|
204
|
-
}), this.peerId);
|
|
205
|
-
return {
|
|
206
|
-
addrs,
|
|
207
|
-
expire,
|
|
208
|
-
voucher: voucher.marshal()
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
async handleConnect({ stream, request, connection }) {
|
|
212
|
-
const hopstr = stream.pb(HopMessage);
|
|
213
|
-
if (isRelayAddr(connection.remoteAddr)) {
|
|
214
|
-
log.error('relay reservation over circuit connection denied for peer: %p', connection.remotePeer);
|
|
215
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED });
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
log('hop connect request from %p', connection.remotePeer);
|
|
219
|
-
let dstPeer;
|
|
220
|
-
try {
|
|
221
|
-
if (request.peer == null) {
|
|
222
|
-
log.error('no peer info in hop connect request');
|
|
223
|
-
throw new Error('no peer info in request');
|
|
224
|
-
}
|
|
225
|
-
request.peer.addrs.forEach(multiaddr);
|
|
226
|
-
dstPeer = peerIdFromBytes(request.peer.id);
|
|
227
|
-
}
|
|
228
|
-
catch (err) {
|
|
229
|
-
log.error('invalid hop connect request via peer %p %s', connection.remotePeer, err);
|
|
230
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.MALFORMED_MESSAGE });
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
if (!this.reservationStore.hasReservation(dstPeer)) {
|
|
234
|
-
log.error('hop connect denied for destination peer %p not having a reservation for %p with status %s', dstPeer, connection.remotePeer, Status.NO_RESERVATION);
|
|
235
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.NO_RESERVATION });
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
if ((await this.connectionGater.denyOutboundRelayedConnection?.(connection.remotePeer, dstPeer)) === true) {
|
|
239
|
-
log.error('hop connect for %p to %p denied by connection gater', connection.remotePeer, dstPeer);
|
|
240
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED });
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
const connections = this.connectionManager.getConnections(dstPeer);
|
|
244
|
-
if (connections.length === 0) {
|
|
245
|
-
log('hop connect denied for destination peer %p not having a connection for %p as there is no destination connection', dstPeer, connection.remotePeer);
|
|
246
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.NO_RESERVATION });
|
|
247
|
-
return;
|
|
248
|
-
}
|
|
249
|
-
const destinationConnection = connections[0];
|
|
250
|
-
const destinationStream = await this.stopHop({
|
|
251
|
-
connection: destinationConnection,
|
|
252
|
-
request: {
|
|
253
|
-
type: StopMessage.Type.CONNECT,
|
|
254
|
-
peer: {
|
|
255
|
-
id: connection.remotePeer.toBytes(),
|
|
256
|
-
addrs: []
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
});
|
|
260
|
-
if (destinationStream == null) {
|
|
261
|
-
log.error('failed to open stream to destination peer %p', destinationConnection?.remotePeer);
|
|
262
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.CONNECTION_FAILED });
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.OK });
|
|
266
|
-
const sourceStream = stream.unwrap();
|
|
267
|
-
log('connection from %p to %p established - merging streams', connection.remotePeer, dstPeer);
|
|
268
|
-
const limit = this.reservationStore.get(dstPeer)?.limit;
|
|
269
|
-
// Short circuit the two streams to create the relayed connection
|
|
270
|
-
createLimitedRelay(sourceStream, destinationStream, this.shutdownController.signal, limit);
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Send a STOP request to the target peer that the dialing peer wants to contact
|
|
274
|
-
*/
|
|
275
|
-
async stopHop({ connection, request }) {
|
|
276
|
-
log('starting circuit relay v2 stop request to %s', connection.remotePeer);
|
|
277
|
-
const stream = await connection.newStream([RELAY_V2_STOP_CODEC], {
|
|
278
|
-
maxOutboundStreams: this.maxOutboundStopStreams,
|
|
279
|
-
runOnTransientConnection: true
|
|
280
|
-
});
|
|
281
|
-
const pbstr = pbStream(stream);
|
|
282
|
-
const stopstr = pbstr.pb(StopMessage);
|
|
283
|
-
await stopstr.write(request);
|
|
284
|
-
let response;
|
|
285
|
-
try {
|
|
286
|
-
response = await stopstr.read();
|
|
287
|
-
}
|
|
288
|
-
catch (err) {
|
|
289
|
-
log.error('error parsing stop message response from %p', connection.remotePeer);
|
|
290
|
-
}
|
|
291
|
-
if (response == null) {
|
|
292
|
-
log.error('could not read response from %p', connection.remotePeer);
|
|
293
|
-
await stream.close();
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
296
|
-
if (response.status === Status.OK) {
|
|
297
|
-
log('stop request to %p was successful', connection.remotePeer);
|
|
298
|
-
return pbstr.unwrap();
|
|
299
|
-
}
|
|
300
|
-
log('stop request failed with code %d', response.status);
|
|
301
|
-
await stream.close();
|
|
302
|
-
}
|
|
303
|
-
get reservations() {
|
|
304
|
-
return this.reservationStore.reservations;
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
export function circuitRelayServer(init = {}) {
|
|
308
|
-
return (components) => {
|
|
309
|
-
return new CircuitRelayServer(components, init);
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/circuit-relay/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { PeerMap } from '@libp2p/peer-collections';
|
|
2
|
-
import { type Limit, Status } from '../pb/index.js';
|
|
3
|
-
import type { RelayReservation } from '../index.js';
|
|
4
|
-
import type { RecursivePartial } from '@libp2p/interface';
|
|
5
|
-
import type { PeerId } from '@libp2p/interface/peer-id';
|
|
6
|
-
import type { Startable } from '@libp2p/interface/startable';
|
|
7
|
-
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
8
|
-
export type ReservationStatus = Status.OK | Status.PERMISSION_DENIED | Status.RESERVATION_REFUSED;
|
|
9
|
-
export interface ReservationStoreInit {
|
|
10
|
-
maxReservations?: number;
|
|
11
|
-
reservationClearInterval?: number;
|
|
12
|
-
applyDefaultLimit?: boolean;
|
|
13
|
-
/**
|
|
14
|
-
* reservation ttl, default: 2 hours
|
|
15
|
-
*/
|
|
16
|
-
reservationTtl?: number;
|
|
17
|
-
/**
|
|
18
|
-
* The maximum time a relayed connection can be open for
|
|
19
|
-
*/
|
|
20
|
-
defaultDurationLimit?: number;
|
|
21
|
-
/**
|
|
22
|
-
* The maximum amount of data allowed to be transferred over a relayed connection
|
|
23
|
-
*/
|
|
24
|
-
defaultDataLimit?: bigint;
|
|
25
|
-
}
|
|
26
|
-
export type ReservationStoreOptions = RecursivePartial<ReservationStoreInit>;
|
|
27
|
-
export declare class ReservationStore implements Startable {
|
|
28
|
-
readonly reservations: PeerMap<RelayReservation>;
|
|
29
|
-
private _started;
|
|
30
|
-
private interval;
|
|
31
|
-
private readonly maxReservations;
|
|
32
|
-
private readonly reservationClearInterval;
|
|
33
|
-
private readonly applyDefaultLimit;
|
|
34
|
-
private readonly reservationTtl;
|
|
35
|
-
private readonly defaultDurationLimit;
|
|
36
|
-
private readonly defaultDataLimit;
|
|
37
|
-
constructor(options?: ReservationStoreOptions);
|
|
38
|
-
isStarted(): boolean;
|
|
39
|
-
start(): void;
|
|
40
|
-
stop(): void;
|
|
41
|
-
reserve(peer: PeerId, addr: Multiaddr, limit?: Limit): {
|
|
42
|
-
status: ReservationStatus;
|
|
43
|
-
expire?: number;
|
|
44
|
-
};
|
|
45
|
-
removeReservation(peer: PeerId): void;
|
|
46
|
-
hasReservation(dst: PeerId): boolean;
|
|
47
|
-
get(peer: PeerId): RelayReservation | undefined;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=reservation-store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reservation-store.d.ts","sourceRoot":"","sources":["../../../../src/circuit-relay/server/reservation-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAElD,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAA;AAEjG,MAAM,WAAW,oBAAoB;IAInC,eAAe,CAAC,EAAE,MAAM,CAAA;IAIxB,wBAAwB,CAAC,EAAE,MAAM,CAAA;IAIjC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAA;AAE5E,qBAAa,gBAAiB,YAAW,SAAS;IAChD,SAAgB,YAAY,4BAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAQ;IACjD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;gBAE5B,OAAO,GAAE,uBAA4B;IASlD,SAAS,IAAK,OAAO;IAIrB,KAAK,IAAK,IAAI;IAkBd,IAAI,IAAK,IAAI;IAIb,OAAO,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG;QAAE,MAAM,EAAE,iBAAiB,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAkBtG,iBAAiB,CAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAItC,cAAc,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAIrC,GAAG,CAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;CAGjD"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { PeerMap } from '@libp2p/peer-collections';
|
|
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
|
-
import { Status } from '../pb/index.js';
|
|
4
|
-
export class ReservationStore {
|
|
5
|
-
reservations = new PeerMap();
|
|
6
|
-
_started = false;
|
|
7
|
-
interval;
|
|
8
|
-
maxReservations;
|
|
9
|
-
reservationClearInterval;
|
|
10
|
-
applyDefaultLimit;
|
|
11
|
-
reservationTtl;
|
|
12
|
-
defaultDurationLimit;
|
|
13
|
-
defaultDataLimit;
|
|
14
|
-
constructor(options = {}) {
|
|
15
|
-
this.maxReservations = options.maxReservations ?? DEFAULT_MAX_RESERVATION_STORE_SIZE;
|
|
16
|
-
this.reservationClearInterval = options.reservationClearInterval ?? DEFAULT_MAX_RESERVATION_CLEAR_INTERVAL;
|
|
17
|
-
this.applyDefaultLimit = options.applyDefaultLimit !== false;
|
|
18
|
-
this.reservationTtl = options.reservationTtl ?? DEFAULT_MAX_RESERVATION_TTL;
|
|
19
|
-
this.defaultDurationLimit = options.defaultDurationLimit ?? DEFAULT_DURATION_LIMIT;
|
|
20
|
-
this.defaultDataLimit = options.defaultDataLimit ?? DEFAULT_DATA_LIMIT;
|
|
21
|
-
}
|
|
22
|
-
isStarted() {
|
|
23
|
-
return this._started;
|
|
24
|
-
}
|
|
25
|
-
start() {
|
|
26
|
-
if (this._started) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
this._started = true;
|
|
30
|
-
this.interval = setInterval(() => {
|
|
31
|
-
const now = (new Date()).getTime();
|
|
32
|
-
this.reservations.forEach((r, k) => {
|
|
33
|
-
if (r.expire.getTime() < now) {
|
|
34
|
-
this.reservations.delete(k);
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
}, this.reservationClearInterval);
|
|
38
|
-
}
|
|
39
|
-
stop() {
|
|
40
|
-
clearInterval(this.interval);
|
|
41
|
-
}
|
|
42
|
-
reserve(peer, addr, limit) {
|
|
43
|
-
if (this.reservations.size >= this.maxReservations && !this.reservations.has(peer)) {
|
|
44
|
-
return { status: Status.RESERVATION_REFUSED };
|
|
45
|
-
}
|
|
46
|
-
const expire = new Date(Date.now() + this.reservationTtl);
|
|
47
|
-
let checkedLimit;
|
|
48
|
-
if (this.applyDefaultLimit) {
|
|
49
|
-
checkedLimit = limit ?? { data: this.defaultDataLimit, duration: this.defaultDurationLimit };
|
|
50
|
-
}
|
|
51
|
-
this.reservations.set(peer, { addr, expire, limit: checkedLimit });
|
|
52
|
-
// return expiry time in seconds
|
|
53
|
-
return { status: Status.OK, expire: Math.round(expire.getTime() / 1000) };
|
|
54
|
-
}
|
|
55
|
-
removeReservation(peer) {
|
|
56
|
-
this.reservations.delete(peer);
|
|
57
|
-
}
|
|
58
|
-
hasReservation(dst) {
|
|
59
|
-
return this.reservations.has(dst);
|
|
60
|
-
}
|
|
61
|
-
get(peer) {
|
|
62
|
-
return this.reservations.get(peer);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=reservation-store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reservation-store.js","sourceRoot":"","sources":["../../../../src/circuit-relay/server/reservation-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { PeerId } from '@libp2p/interface/peer-id';
|
|
2
|
-
import type { Record } from '@libp2p/interface/record';
|
|
3
|
-
export interface ReservationVoucherOptions {
|
|
4
|
-
relay: PeerId;
|
|
5
|
-
peer: PeerId;
|
|
6
|
-
expiration: number;
|
|
7
|
-
}
|
|
8
|
-
export declare class ReservationVoucherRecord implements Record {
|
|
9
|
-
readonly domain = "libp2p-relay-rsvp";
|
|
10
|
-
readonly codec: Uint8Array;
|
|
11
|
-
private readonly relay;
|
|
12
|
-
private readonly peer;
|
|
13
|
-
private readonly expiration;
|
|
14
|
-
constructor({ relay, peer, expiration }: ReservationVoucherOptions);
|
|
15
|
-
marshal(): Uint8Array;
|
|
16
|
-
equals(other: Record): boolean;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=reservation-voucher.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reservation-voucher.d.ts","sourceRoot":"","sources":["../../../../src/circuit-relay/server/reservation-voucher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAEtD,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,wBAAyB,YAAW,MAAM;IACrD,SAAgB,MAAM,uBAAsB;IAC5C,SAAgB,KAAK,aAA+B;IAEpD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;gBAEtB,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,yBAAyB;IAMnE,OAAO,IAAK,UAAU;IAQtB,MAAM,CAAE,KAAK,EAAE,MAAM,GAAG,OAAO;CAkBhC"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { ReservationVoucher } from '../pb/index.js';
|
|
2
|
-
export class ReservationVoucherRecord {
|
|
3
|
-
domain = 'libp2p-relay-rsvp';
|
|
4
|
-
codec = new Uint8Array([0x03, 0x02]);
|
|
5
|
-
relay;
|
|
6
|
-
peer;
|
|
7
|
-
expiration;
|
|
8
|
-
constructor({ relay, peer, expiration }) {
|
|
9
|
-
this.relay = relay;
|
|
10
|
-
this.peer = peer;
|
|
11
|
-
this.expiration = expiration;
|
|
12
|
-
}
|
|
13
|
-
marshal() {
|
|
14
|
-
return ReservationVoucher.encode({
|
|
15
|
-
relay: this.relay.toBytes(),
|
|
16
|
-
peer: this.peer.toBytes(),
|
|
17
|
-
expiration: BigInt(this.expiration)
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
equals(other) {
|
|
21
|
-
if (!(other instanceof ReservationVoucherRecord)) {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
if (!this.peer.equals(other.peer)) {
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
if (!this.relay.equals(other.relay)) {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
if (this.expiration !== other.expiration) {
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
return true;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=reservation-voucher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reservation-voucher.js","sourceRoot":"","sources":["../../../../src/circuit-relay/server/reservation-voucher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAUnD,MAAM,OAAO,wBAAwB;IACnB,MAAM,GAAG,mBAAmB,CAAA;IAC5B,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAEnC,KAAK,CAAQ;IACb,IAAI,CAAQ;IACZ,UAAU,CAAQ;IAEnC,YAAa,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAA6B;QACjE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,OAAO;QACL,OAAO,kBAAkB,CAAC,MAAM,CAAC;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACzB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;SACpC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAE,KAAa;QACnB,IAAI,CAAC,CAAC,KAAK,YAAY,wBAAwB,CAAC,EAAE;YAChD,OAAO,KAAK,CAAA;SACb;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACjC,OAAO,KAAK,CAAA;SACb;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACnC,OAAO,KAAK,CAAA;SACb;QAED,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,EAAE;YACxC,OAAO,KAAK,CAAA;SACb;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { TypedEventEmitter } from '@libp2p/interface/events';
|
|
2
|
-
import type { ContentRouting } from '@libp2p/interface/content-routing';
|
|
3
|
-
import type { PeerId } from '@libp2p/interface/peer-id';
|
|
4
|
-
import type { PeerStore } from '@libp2p/interface/peer-store';
|
|
5
|
-
import type { Startable } from '@libp2p/interface/startable';
|
|
6
|
-
import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager';
|
|
7
|
-
import type { Registrar } from '@libp2p/interface-internal/registrar';
|
|
8
|
-
import type { TransportManager } from '@libp2p/interface-internal/transport-manager';
|
|
9
|
-
export interface RelayDiscoveryEvents {
|
|
10
|
-
'relay:discover': CustomEvent<PeerId>;
|
|
11
|
-
}
|
|
12
|
-
export interface RelayDiscoveryComponents {
|
|
13
|
-
peerId: PeerId;
|
|
14
|
-
peerStore: PeerStore;
|
|
15
|
-
connectionManager: ConnectionManager;
|
|
16
|
-
transportManager: TransportManager;
|
|
17
|
-
contentRouting: ContentRouting;
|
|
18
|
-
registrar: Registrar;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* ReservationManager automatically makes a circuit v2 reservation on any connected
|
|
22
|
-
* peers that support the circuit v2 HOP protocol.
|
|
23
|
-
*/
|
|
24
|
-
export declare class RelayDiscovery extends TypedEventEmitter<RelayDiscoveryEvents> implements Startable {
|
|
25
|
-
private readonly peerId;
|
|
26
|
-
private readonly peerStore;
|
|
27
|
-
private readonly contentRouting;
|
|
28
|
-
private readonly registrar;
|
|
29
|
-
private started;
|
|
30
|
-
private topologyId?;
|
|
31
|
-
constructor(components: RelayDiscoveryComponents);
|
|
32
|
-
isStarted(): boolean;
|
|
33
|
-
start(): Promise<void>;
|
|
34
|
-
stop(): void;
|
|
35
|
-
/**
|
|
36
|
-
* Try to listen on available hop relay connections.
|
|
37
|
-
* The following order will happen while we do not have enough relays:
|
|
38
|
-
*
|
|
39
|
-
* 1. Check the metadata store for known relays, try to listen on the ones we are already connected
|
|
40
|
-
* 2. Dial and try to listen on the peers we know that support hop but are not connected
|
|
41
|
-
* 3. Search the network
|
|
42
|
-
*/
|
|
43
|
-
discover(): Promise<void>;
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../../src/circuit-relay/transport/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAO5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAA;AACtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAA;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAA;AAIpF,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,SAAS,CAAA;IACpB,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,cAAc,EAAE,cAAc,CAAA;IAC9B,SAAS,EAAE,SAAS,CAAA;CACrB;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,iBAAiB,CAAC,oBAAoB,CAAE,YAAW,SAAS;IAC9F,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAC,CAAQ;gBAEd,UAAU,EAAE,wBAAwB;IASjD,SAAS,IAAK,OAAO;IAIf,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAkB7B,IAAI,IAAK,IAAI;IAQb;;;;;;;OAOG;IACG,QAAQ,IAAK,OAAO,CAAC,IAAI,CAAC;CA8CjC"}
|