libp2p 0.46.21 → 1.0.0-551622a96
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/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/dist/typedoc-urls.json +0 -71
- package/src/autonat/constants.ts +0 -19
- package/src/autonat/index.ts +0 -597
- package/src/autonat/pb/index.proto +0 -35
- package/src/autonat/pb/index.ts +0 -320
- package/src/circuit-relay/constants.ts +0 -72
- package/src/circuit-relay/index.ts +0 -59
- package/src/circuit-relay/pb/index.proto +0 -67
- package/src/circuit-relay/pb/index.ts +0 -539
- package/src/circuit-relay/server/advert-service.ts +0 -108
- package/src/circuit-relay/server/index.ts +0 -443
- package/src/circuit-relay/server/reservation-store.ts +0 -116
- package/src/circuit-relay/server/reservation-voucher.ts +0 -51
- package/src/circuit-relay/transport/discovery.ts +0 -136
- package/src/circuit-relay/transport/index.ts +0 -396
- package/src/circuit-relay/transport/listener.ts +0 -97
- package/src/circuit-relay/transport/reservation-store.ts +0 -312
- package/src/circuit-relay/utils.ts +0 -136
- package/src/dcutr/dcutr.ts +0 -378
- package/src/dcutr/index.ts +0 -102
- package/src/dcutr/pb/message.proto +0 -12
- package/src/dcutr/pb/message.ts +0 -96
- package/src/dcutr/utils.ts +0 -33
- package/src/fetch/README.md +0 -41
- package/src/fetch/constants.ts +0 -3
- package/src/fetch/index.ts +0 -315
- package/src/fetch/pb/proto.proto +0 -15
- package/src/fetch/pb/proto.ts +0 -153
- package/src/identify/README.md +0 -13
- package/src/identify/consts.ts +0 -12
- package/src/identify/identify.ts +0 -561
- package/src/identify/index.ts +0 -90
- package/src/identify/pb/message.proto +0 -30
- package/src/identify/pb/message.ts +0 -126
- package/src/insecure/index.ts +0 -138
- package/src/insecure/pb/proto.proto +0 -18
- package/src/insecure/pb/proto.ts +0 -161
- package/src/ping/constants.ts +0 -15
- package/src/ping/index.ts +0 -170
- package/src/pnet/README.md +0 -68
- package/src/pnet/crypto.ts +0 -67
- package/src/pnet/errors.ts +0 -5
- package/src/pnet/index.ts +0 -126
- package/src/pnet/key-generator.ts +0 -23
- package/src/upnp-nat/index.ts +0 -212
- package/src/utils/peer-job-queue.ts +0 -119
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
import { TypedEventEmitter } from '@libp2p/interface/events';
|
|
2
|
-
import { logger } from '@libp2p/logger';
|
|
3
|
-
import { PeerMap } from '@libp2p/peer-collections';
|
|
4
|
-
import { multiaddr } from '@multiformats/multiaddr';
|
|
5
|
-
import { pbStream } from 'it-protobuf-stream';
|
|
6
|
-
import { PeerJobQueue } from '../../utils/peer-job-queue.js';
|
|
7
|
-
import { DEFAULT_RESERVATION_CONCURRENCY, RELAY_TAG, RELAY_V2_HOP_CODEC } from '../constants.js';
|
|
8
|
-
import { HopMessage, Status } from '../pb/index.js';
|
|
9
|
-
import { getExpirationMilliseconds } from '../utils.js';
|
|
10
|
-
const log = logger('libp2p:circuit-relay:transport:reservation-store');
|
|
11
|
-
// allow refreshing a relay reservation if it will expire in the next 10 minutes
|
|
12
|
-
const REFRESH_WINDOW = (60 * 1000) * 10;
|
|
13
|
-
// try to refresh relay reservations 5 minutes before expiry
|
|
14
|
-
const REFRESH_TIMEOUT = (60 * 1000) * 5;
|
|
15
|
-
// minimum duration before which a reservation must not be refreshed
|
|
16
|
-
const REFRESH_TIMEOUT_MIN = 30 * 1000;
|
|
17
|
-
export class ReservationStore extends TypedEventEmitter {
|
|
18
|
-
peerId;
|
|
19
|
-
connectionManager;
|
|
20
|
-
transportManager;
|
|
21
|
-
peerStore;
|
|
22
|
-
events;
|
|
23
|
-
reserveQueue;
|
|
24
|
-
reservations;
|
|
25
|
-
maxDiscoveredRelays;
|
|
26
|
-
maxReservationQueueLength;
|
|
27
|
-
reservationCompletionTimeout;
|
|
28
|
-
started;
|
|
29
|
-
constructor(components, init) {
|
|
30
|
-
super();
|
|
31
|
-
this.peerId = components.peerId;
|
|
32
|
-
this.connectionManager = components.connectionManager;
|
|
33
|
-
this.transportManager = components.transportManager;
|
|
34
|
-
this.peerStore = components.peerStore;
|
|
35
|
-
this.events = components.events;
|
|
36
|
-
this.reservations = new PeerMap();
|
|
37
|
-
this.maxDiscoveredRelays = init?.discoverRelays ?? 0;
|
|
38
|
-
this.maxReservationQueueLength = init?.maxReservationQueueLength ?? 100;
|
|
39
|
-
this.reservationCompletionTimeout = init?.reservationCompletionTimeout ?? 10000;
|
|
40
|
-
this.started = false;
|
|
41
|
-
// ensure we don't listen on multiple relays simultaneously
|
|
42
|
-
this.reserveQueue = new PeerJobQueue({
|
|
43
|
-
concurrency: init?.reservationConcurrency ?? DEFAULT_RESERVATION_CONCURRENCY
|
|
44
|
-
});
|
|
45
|
-
// When a peer disconnects, if we had a reservation on that peer
|
|
46
|
-
// remove the reservation and multiaddr and maybe trigger search
|
|
47
|
-
// for new relays
|
|
48
|
-
this.events.addEventListener('peer:disconnect', (evt) => {
|
|
49
|
-
this.#removeRelay(evt.detail);
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
isStarted() {
|
|
53
|
-
return this.started;
|
|
54
|
-
}
|
|
55
|
-
async start() {
|
|
56
|
-
this.started = true;
|
|
57
|
-
}
|
|
58
|
-
async stop() {
|
|
59
|
-
this.reserveQueue.clear();
|
|
60
|
-
this.reservations.forEach(({ timeout }) => {
|
|
61
|
-
clearTimeout(timeout);
|
|
62
|
-
});
|
|
63
|
-
this.reservations.clear();
|
|
64
|
-
this.started = false;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* If the number of current relays is beneath the configured `maxReservations`
|
|
68
|
-
* value, and the passed peer id is not our own, and we have a non-relayed connection
|
|
69
|
-
* to the remote, and the remote peer speaks the hop protocol, try to reserve a slot
|
|
70
|
-
* on the remote peer
|
|
71
|
-
*/
|
|
72
|
-
async addRelay(peerId, type) {
|
|
73
|
-
if (this.peerId.equals(peerId)) {
|
|
74
|
-
log('not trying to use self as relay');
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
if (this.reserveQueue.size > this.maxReservationQueueLength) {
|
|
78
|
-
log('not adding relay as the queue is full');
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
if (this.reserveQueue.hasJob(peerId)) {
|
|
82
|
-
log('relay peer is already in the reservation queue');
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
log('add relay %p', peerId);
|
|
86
|
-
await this.reserveQueue.add(async () => {
|
|
87
|
-
try {
|
|
88
|
-
// allow refresh of an existing reservation if it is about to expire
|
|
89
|
-
const existingReservation = this.reservations.get(peerId);
|
|
90
|
-
if (existingReservation != null) {
|
|
91
|
-
if (getExpirationMilliseconds(existingReservation.reservation.expire) > REFRESH_WINDOW) {
|
|
92
|
-
log('already have reservation on relay peer %p and it expires in more than 10 minutes', peerId);
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
clearTimeout(existingReservation.timeout);
|
|
96
|
-
this.reservations.delete(peerId);
|
|
97
|
-
}
|
|
98
|
-
if (type === 'discovered' && [...this.reservations.values()].reduce((acc, curr) => {
|
|
99
|
-
if (curr.type === 'discovered') {
|
|
100
|
-
acc++;
|
|
101
|
-
}
|
|
102
|
-
return acc;
|
|
103
|
-
}, 0) >= this.maxDiscoveredRelays) {
|
|
104
|
-
log('already have enough discovered relays');
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
const signal = AbortSignal.timeout(this.reservationCompletionTimeout);
|
|
108
|
-
const connection = await this.connectionManager.openConnection(peerId, {
|
|
109
|
-
signal
|
|
110
|
-
});
|
|
111
|
-
if (connection.remoteAddr.protoNames().includes('p2p-circuit')) {
|
|
112
|
-
log('not creating reservation over relayed connection');
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
const reservation = await this.#createReservation(connection, {
|
|
116
|
-
signal
|
|
117
|
-
});
|
|
118
|
-
log('created reservation on relay peer %p', peerId);
|
|
119
|
-
const expiration = getExpirationMilliseconds(reservation.expire);
|
|
120
|
-
// sets a lower bound on the timeout, and also don't let it go over
|
|
121
|
-
// 2^31 - 1 (setTimeout will only accept signed 32 bit integers)
|
|
122
|
-
const timeoutDuration = Math.min(Math.max(expiration - REFRESH_TIMEOUT, REFRESH_TIMEOUT_MIN), Math.pow(2, 31) - 1);
|
|
123
|
-
const timeout = setTimeout(() => {
|
|
124
|
-
this.addRelay(peerId, type).catch(err => {
|
|
125
|
-
log.error('could not refresh reservation to relay %p', peerId, err);
|
|
126
|
-
});
|
|
127
|
-
}, timeoutDuration);
|
|
128
|
-
// we've managed to create a reservation successfully
|
|
129
|
-
this.reservations.set(peerId, {
|
|
130
|
-
timeout,
|
|
131
|
-
reservation,
|
|
132
|
-
type
|
|
133
|
-
});
|
|
134
|
-
// ensure we don't close the connection to the relay
|
|
135
|
-
await this.peerStore.merge(peerId, {
|
|
136
|
-
tags: {
|
|
137
|
-
[RELAY_TAG]: {
|
|
138
|
-
value: 1,
|
|
139
|
-
ttl: expiration
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
// listen on multiaddr that only the circuit transport is listening for
|
|
144
|
-
await this.transportManager.listen([multiaddr(`/p2p/${peerId.toString()}/p2p-circuit`)]);
|
|
145
|
-
}
|
|
146
|
-
catch (err) {
|
|
147
|
-
log.error('could not reserve slot on %p', peerId, err);
|
|
148
|
-
// cancel the renewal timeout if it's been set
|
|
149
|
-
const reservation = this.reservations.get(peerId);
|
|
150
|
-
if (reservation != null) {
|
|
151
|
-
clearTimeout(reservation.timeout);
|
|
152
|
-
}
|
|
153
|
-
// if listening failed, remove the reservation
|
|
154
|
-
this.reservations.delete(peerId);
|
|
155
|
-
}
|
|
156
|
-
}, {
|
|
157
|
-
peerId
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
hasReservation(peerId) {
|
|
161
|
-
return this.reservations.has(peerId);
|
|
162
|
-
}
|
|
163
|
-
getReservation(peerId) {
|
|
164
|
-
return this.reservations.get(peerId)?.reservation;
|
|
165
|
-
}
|
|
166
|
-
async #createReservation(connection, options) {
|
|
167
|
-
options.signal?.throwIfAborted();
|
|
168
|
-
log('requesting reservation from %p', connection.remotePeer);
|
|
169
|
-
const stream = await connection.newStream(RELAY_V2_HOP_CODEC, options);
|
|
170
|
-
const pbstr = pbStream(stream);
|
|
171
|
-
const hopstr = pbstr.pb(HopMessage);
|
|
172
|
-
await hopstr.write({ type: HopMessage.Type.RESERVE }, options);
|
|
173
|
-
let response;
|
|
174
|
-
try {
|
|
175
|
-
response = await hopstr.read(options);
|
|
176
|
-
}
|
|
177
|
-
catch (err) {
|
|
178
|
-
log.error('error parsing reserve message response from %p because', connection.remotePeer, err);
|
|
179
|
-
throw err;
|
|
180
|
-
}
|
|
181
|
-
finally {
|
|
182
|
-
await stream.close();
|
|
183
|
-
}
|
|
184
|
-
if (response.status === Status.OK && (response.reservation != null)) {
|
|
185
|
-
return response.reservation;
|
|
186
|
-
}
|
|
187
|
-
const errMsg = `reservation failed with status ${response.status ?? 'undefined'}`;
|
|
188
|
-
log.error(errMsg);
|
|
189
|
-
throw new Error(errMsg);
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Remove listen relay
|
|
193
|
-
*/
|
|
194
|
-
#removeRelay(peerId) {
|
|
195
|
-
const existingReservation = this.reservations.get(peerId);
|
|
196
|
-
if (existingReservation == null) {
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
log('connection to relay %p closed, removing reservation from local store', peerId);
|
|
200
|
-
clearTimeout(existingReservation.timeout);
|
|
201
|
-
this.reservations.delete(peerId);
|
|
202
|
-
this.safeDispatchEvent('relay:removed', { detail: peerId });
|
|
203
|
-
if (this.reservations.size < this.maxDiscoveredRelays) {
|
|
204
|
-
log('not enough relays %d/%d', this.reservations.size, this.maxDiscoveredRelays);
|
|
205
|
-
this.safeDispatchEvent('relay:not-enough-relays', {});
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
//# sourceMappingURL=reservation-store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reservation-store.js","sourceRoot":"","sources":["../../../../src/circuit-relay/transport/reservation-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAyB,MAAM,0BAA0B,CAAA;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,+BAA+B,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAChG,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAUvD,MAAM,GAAG,GAAG,MAAM,CAAC,kDAAkD,CAAC,CAAA;AAEtE,gFAAgF;AAChF,MAAM,cAAc,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;AAEvC,4DAA4D;AAC5D,MAAM,eAAe,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;AAEvC,oEAAoE;AACpE,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAA;AAmDrC,MAAM,OAAO,gBAAiB,SAAQ,iBAAyC;IAC5D,MAAM,CAAQ;IACd,iBAAiB,CAAmB;IACpC,gBAAgB,CAAkB;IAClC,SAAS,CAAW;IACpB,MAAM,CAAgC;IACtC,YAAY,CAAc;IAC1B,YAAY,CAAqB;IACjC,mBAAmB,CAAQ;IAC3B,yBAAyB,CAAQ;IACjC,4BAA4B,CAAQ;IAC7C,OAAO,CAAS;IAExB,YAAa,UAAgC,EAAE,IAAqB;QAClE,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAC/B,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,CAAA;QACrD,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAA;QACnD,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAA;QACrC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,EAAE,CAAA;QACjC,IAAI,CAAC,mBAAmB,GAAG,IAAI,EAAE,cAAc,IAAI,CAAC,CAAA;QACpD,IAAI,CAAC,yBAAyB,GAAG,IAAI,EAAE,yBAAyB,IAAI,GAAG,CAAA;QACvE,IAAI,CAAC,4BAA4B,GAAG,IAAI,EAAE,4BAA4B,IAAI,KAAK,CAAA;QAC/E,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QAEpB,2DAA2D;QAC3D,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC;YACnC,WAAW,EAAE,IAAI,EAAE,sBAAsB,IAAI,+BAA+B;SAC7E,CAAC,CAAA;QAEF,gEAAgE;QAChE,gEAAgE;QAChE,iBAAiB;QACjB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE;YACtD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC/B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;QACzB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACxC,YAAY,CAAC,OAAO,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;QACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACtB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAE,MAAc,EAAE,IAAe;QAC7C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YAC9B,GAAG,CAAC,iCAAiC,CAAC,CAAA;YACtC,OAAM;SACP;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,yBAAyB,EAAE;YAC3D,GAAG,CAAC,uCAAuC,CAAC,CAAA;YAC5C,OAAM;SACP;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACpC,GAAG,CAAC,gDAAgD,CAAC,CAAA;YACrD,OAAM;SACP;QAED,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;QAE3B,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YACrC,IAAI;gBACF,oEAAoE;gBACpE,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBAEzD,IAAI,mBAAmB,IAAI,IAAI,EAAE;oBAC/B,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,cAAc,EAAE;wBACtF,GAAG,CAAC,kFAAkF,EAAE,MAAM,CAAC,CAAA;wBAC/F,OAAM;qBACP;oBAED,YAAY,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;oBACzC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;iBACjC;gBAED,IAAI,IAAI,KAAK,YAAY,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;oBAChF,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;wBAC9B,GAAG,EAAE,CAAA;qBACN;oBAED,OAAO,GAAG,CAAA;gBACZ,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE;oBACjC,GAAG,CAAC,uCAAuC,CAAC,CAAA;oBAC5C,OAAM;iBACP;gBAED,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;gBAErE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,EAAE;oBACrE,MAAM;iBACP,CAAC,CAAA;gBAEF,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;oBAC9D,GAAG,CAAC,kDAAkD,CAAC,CAAA;oBACvD,OAAM;iBACP;gBAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE;oBAC5D,MAAM;iBACP,CAAC,CAAA;gBAEF,GAAG,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAA;gBAEnD,MAAM,UAAU,GAAG,yBAAyB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;gBAEhE,mEAAmE;gBACnE,gEAAgE;gBAChE,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,eAAe,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;gBAElH,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC9B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;wBACtC,GAAG,CAAC,KAAK,CAAC,2CAA2C,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;oBACrE,CAAC,CAAC,CAAA;gBACJ,CAAC,EAAE,eAAe,CAAC,CAAA;gBAEnB,qDAAqD;gBACrD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE;oBAC5B,OAAO;oBACP,WAAW;oBACX,IAAI;iBACL,CAAC,CAAA;gBAEF,oDAAoD;gBACpD,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE;oBACjC,IAAI,EAAE;wBACJ,CAAC,SAAS,CAAC,EAAE;4BACX,KAAK,EAAE,CAAC;4BACR,GAAG,EAAE,UAAU;yBAChB;qBACF;iBACF,CAAC,CAAA;gBAEF,uEAAuE;gBACvE,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;aACzF;YAAC,OAAO,GAAG,EAAE;gBACZ,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;gBAEtD,8CAA8C;gBAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBAEjD,IAAI,WAAW,IAAI,IAAI,EAAE;oBACvB,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;iBAClC;gBAED,8CAA8C;gBAC9C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;aACjC;QACH,CAAC,EAAE;YACD,MAAM;SACP,CAAC,CAAA;IACJ,CAAC;IAED,cAAc,CAAE,MAAc;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;IAED,cAAc,CAAE,MAAc;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IACnD,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAE,UAAsB,EAAE,OAAqB;QACrE,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAA;QAEhC,GAAG,CAAC,gCAAgC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAA;QACtE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;QACnC,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAA;QAE9D,IAAI,QAAoB,CAAA;QAExB,IAAI;YACF,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SACtC;QAAC,OAAO,GAAQ,EAAE;YACjB,GAAG,CAAC,KAAK,CAAC,wDAAwD,EAAE,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;YAC/F,MAAM,GAAG,CAAA;SACV;gBAAS;YACR,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;SACrB;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE;YACnE,OAAO,QAAQ,CAAC,WAAW,CAAA;SAC5B;QAED,MAAM,MAAM,GAAG,kCAAkC,QAAQ,CAAC,MAAM,IAAI,WAAW,EAAE,CAAA;QACjF,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAEjB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAA;IACzB,CAAC;IAED;;OAEG;IACH,YAAY,CAAE,MAAc;QAC1B,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEzD,IAAI,mBAAmB,IAAI,IAAI,EAAE;YAC/B,OAAM;SACP;QAED,GAAG,CAAC,sEAAsE,EAAE,MAAM,CAAC,CAAA;QAEnF,YAAY,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACzC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEhC,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;QAE3D,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE;YACrD,GAAG,CAAC,yBAAyB,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAA;YAChF,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAA;SACtD;IACH,CAAC;CACF"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { CID } from 'multiformats/cid';
|
|
2
|
-
import type { Limit } from './pb/index.js';
|
|
3
|
-
import type { Stream } from '@libp2p/interface/connection';
|
|
4
|
-
export declare function createLimitedRelay(src: Stream, dst: Stream, abortSignal: AbortSignal, limit?: Limit): void;
|
|
5
|
-
/**
|
|
6
|
-
* Convert a namespace string into a cid
|
|
7
|
-
*/
|
|
8
|
-
export declare function namespaceToCid(namespace: string): Promise<CID>;
|
|
9
|
-
/**
|
|
10
|
-
* returns number of ms between now and expiration time
|
|
11
|
-
*/
|
|
12
|
-
export declare function getExpirationMilliseconds(expireTimeSeconds: bigint): number;
|
|
13
|
-
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/circuit-relay/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAiC1D,wBAAgB,kBAAkB,CAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CA0E3G;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAKrE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAM5E"}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/interface/errors';
|
|
2
|
-
import { logger } from '@libp2p/logger';
|
|
3
|
-
import { anySignal } from 'any-signal';
|
|
4
|
-
import { CID } from 'multiformats/cid';
|
|
5
|
-
import { sha256 } from 'multiformats/hashes/sha2';
|
|
6
|
-
import { codes } from '../errors.js';
|
|
7
|
-
const log = logger('libp2p:circuit-relay:utils');
|
|
8
|
-
async function* countStreamBytes(source, limit) {
|
|
9
|
-
const limitBytes = limit.remaining;
|
|
10
|
-
for await (const buf of source) {
|
|
11
|
-
const len = BigInt(buf.byteLength);
|
|
12
|
-
if ((limit.remaining - len) < 0) {
|
|
13
|
-
// this is a safe downcast since len is guarantee to be in the range for a number
|
|
14
|
-
const remaining = Number(limit.remaining);
|
|
15
|
-
limit.remaining = 0n;
|
|
16
|
-
try {
|
|
17
|
-
if (remaining !== 0) {
|
|
18
|
-
yield buf.subarray(0, remaining);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
catch (err) {
|
|
22
|
-
log.error(err);
|
|
23
|
-
}
|
|
24
|
-
throw new CodeError(`data limit of ${limitBytes} bytes exceeded`, codes.ERR_TRANSFER_LIMIT_EXCEEDED);
|
|
25
|
-
}
|
|
26
|
-
limit.remaining -= len;
|
|
27
|
-
yield buf;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
export function createLimitedRelay(src, dst, abortSignal, limit) {
|
|
31
|
-
function abortStreams(err) {
|
|
32
|
-
src.abort(err);
|
|
33
|
-
dst.abort(err);
|
|
34
|
-
clearTimeout(timeout);
|
|
35
|
-
}
|
|
36
|
-
const abortController = new AbortController();
|
|
37
|
-
const signal = anySignal([abortSignal, abortController.signal]);
|
|
38
|
-
let timeout;
|
|
39
|
-
if (limit?.duration != null) {
|
|
40
|
-
timeout = setTimeout(() => {
|
|
41
|
-
abortController.abort();
|
|
42
|
-
}, limit.duration);
|
|
43
|
-
}
|
|
44
|
-
let srcDstFinished = false;
|
|
45
|
-
let dstSrcFinished = false;
|
|
46
|
-
let dataLimit;
|
|
47
|
-
if (limit?.data != null) {
|
|
48
|
-
dataLimit = {
|
|
49
|
-
remaining: limit.data
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
queueMicrotask(() => {
|
|
53
|
-
const onAbort = () => {
|
|
54
|
-
dst.abort(new CodeError(`duration limit of ${limit?.duration} ms exceeded`, codes.ERR_TRANSFER_LIMIT_EXCEEDED));
|
|
55
|
-
};
|
|
56
|
-
signal.addEventListener('abort', onAbort, { once: true });
|
|
57
|
-
void dst.sink(dataLimit == null ? src.source : countStreamBytes(src.source, dataLimit))
|
|
58
|
-
.catch(err => {
|
|
59
|
-
log.error('error while relaying streams src -> dst', err);
|
|
60
|
-
abortStreams(err);
|
|
61
|
-
})
|
|
62
|
-
.finally(() => {
|
|
63
|
-
srcDstFinished = true;
|
|
64
|
-
if (dstSrcFinished) {
|
|
65
|
-
signal.removeEventListener('abort', onAbort);
|
|
66
|
-
signal.clear();
|
|
67
|
-
clearTimeout(timeout);
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
queueMicrotask(() => {
|
|
72
|
-
const onAbort = () => {
|
|
73
|
-
src.abort(new CodeError(`duration limit of ${limit?.duration} ms exceeded`, codes.ERR_TRANSFER_LIMIT_EXCEEDED));
|
|
74
|
-
};
|
|
75
|
-
signal.addEventListener('abort', onAbort, { once: true });
|
|
76
|
-
void src.sink(dataLimit == null ? dst.source : countStreamBytes(dst.source, dataLimit))
|
|
77
|
-
.catch(err => {
|
|
78
|
-
log.error('error while relaying streams dst -> src', err);
|
|
79
|
-
abortStreams(err);
|
|
80
|
-
})
|
|
81
|
-
.finally(() => {
|
|
82
|
-
dstSrcFinished = true;
|
|
83
|
-
if (srcDstFinished) {
|
|
84
|
-
signal.removeEventListener('abort', onAbort);
|
|
85
|
-
signal.clear();
|
|
86
|
-
clearTimeout(timeout);
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Convert a namespace string into a cid
|
|
93
|
-
*/
|
|
94
|
-
export async function namespaceToCid(namespace) {
|
|
95
|
-
const bytes = new TextEncoder().encode(namespace);
|
|
96
|
-
const hash = await sha256.digest(bytes);
|
|
97
|
-
return CID.createV0(hash);
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* returns number of ms between now and expiration time
|
|
101
|
-
*/
|
|
102
|
-
export function getExpirationMilliseconds(expireTimeSeconds) {
|
|
103
|
-
const expireTimeMillis = expireTimeSeconds * BigInt(1000);
|
|
104
|
-
const currentTime = new Date().getTime();
|
|
105
|
-
// downcast to number to use with setTimeout
|
|
106
|
-
return Number(expireTimeMillis - BigInt(currentTime));
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/circuit-relay/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { type Multiaddr } from '@multiformats/multiaddr';
|
|
2
|
-
import type { DCUtRServiceComponents, DCUtRServiceInit } from './index.js';
|
|
3
|
-
import type { Connection, Stream } from '@libp2p/interface/connection';
|
|
4
|
-
import type { Startable } from '@libp2p/interface/startable';
|
|
5
|
-
export declare class DefaultDCUtRService implements Startable {
|
|
6
|
-
private started;
|
|
7
|
-
private readonly timeout;
|
|
8
|
-
private readonly retries;
|
|
9
|
-
private readonly maxInboundStreams;
|
|
10
|
-
private readonly maxOutboundStreams;
|
|
11
|
-
private readonly peerStore;
|
|
12
|
-
private readonly registrar;
|
|
13
|
-
private readonly connectionManager;
|
|
14
|
-
private readonly addressManager;
|
|
15
|
-
private readonly transportManager;
|
|
16
|
-
private topologyId?;
|
|
17
|
-
constructor(components: DCUtRServiceComponents, init: DCUtRServiceInit);
|
|
18
|
-
isStarted(): boolean;
|
|
19
|
-
start(): Promise<void>;
|
|
20
|
-
stop(): Promise<void>;
|
|
21
|
-
/**
|
|
22
|
-
* Perform the inbound connection upgrade as B
|
|
23
|
-
*
|
|
24
|
-
* @see https://github.com/libp2p/specs/blob/master/relay/DCUtR.md#the-protocol
|
|
25
|
-
*/
|
|
26
|
-
upgradeInbound(relayedConnection: Connection): Promise<void>;
|
|
27
|
-
/**
|
|
28
|
-
* This is performed when A has dialed B via a relay but A also has a public
|
|
29
|
-
* address that B can dial directly
|
|
30
|
-
*/
|
|
31
|
-
attemptUnilateralConnectionUpgrade(relayedConnection: Connection): Promise<boolean>;
|
|
32
|
-
/**
|
|
33
|
-
* Perform the connection upgrade as A
|
|
34
|
-
*
|
|
35
|
-
* @see https://github.com/libp2p/specs/blob/master/relay/DCUtR.md#the-protocol
|
|
36
|
-
*/
|
|
37
|
-
handleIncomingUpgrade(stream: Stream, relayedConnection: Connection): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Takes the `addr` and converts it to a Multiaddr if possible
|
|
40
|
-
*/
|
|
41
|
-
getDialableMultiaddrs(addrs: Array<Uint8Array | string | null | undefined>): Multiaddr[];
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=dcutr.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dcutr.d.ts","sourceRoot":"","sources":["../../../src/dcutr/dcutr.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,yBAAyB,CAAA;AAOnE,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAEtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAsB5D,qBAAa,mBAAoB,YAAW,SAAS;IACnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,UAAU,CAAC,CAAQ;gBAEd,UAAU,EAAE,sBAAsB,EAAE,IAAI,EAAE,gBAAgB;IAcvE,SAAS,IAAK,OAAO;IAIf,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAyCvB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAU5B;;;;OAIG;IACG,cAAc,CAAE,iBAAiB,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAkGnE;;;OAGG;IACG,kCAAkC,CAAE,iBAAiB,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IA0D1F;;;;OAIG;IACG,qBAAqB,CAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAmE1F;;OAEG;IACH,qBAAqB,CAAE,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,SAAS,EAAE;CAqB1F"}
|