libp2p 0.43.3 → 0.43.4-20c8ed4b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +30 -30
- package/dist/src/autonat/index.d.ts +1 -2
- package/dist/src/autonat/index.d.ts.map +1 -1
- package/dist/src/autonat/index.js +1 -3
- package/dist/src/autonat/index.js.map +1 -1
- package/dist/src/circuit-relay/constants.d.ts.map +1 -0
- package/dist/src/circuit-relay/constants.js.map +1 -0
- package/dist/src/circuit-relay/index.d.ts.map +1 -0
- package/dist/src/circuit-relay/index.js.map +1 -0
- package/dist/src/circuit-relay/pb/index.d.ts.map +1 -0
- package/dist/src/circuit-relay/pb/index.js.map +1 -0
- package/dist/src/circuit-relay/server/advert-service.d.ts.map +1 -0
- package/dist/src/circuit-relay/server/advert-service.js.map +1 -0
- package/dist/src/circuit-relay/server/index.d.ts.map +1 -0
- package/dist/src/circuit-relay/server/index.js.map +1 -0
- package/dist/src/circuit-relay/server/reservation-store.d.ts.map +1 -0
- package/dist/src/circuit-relay/server/reservation-store.js.map +1 -0
- package/dist/src/circuit-relay/server/reservation-voucher.d.ts.map +1 -0
- package/dist/src/circuit-relay/server/reservation-voucher.js.map +1 -0
- package/dist/src/circuit-relay/transport/discovery.d.ts.map +1 -0
- package/dist/src/circuit-relay/transport/discovery.js.map +1 -0
- package/dist/src/circuit-relay/transport/index.d.ts.map +1 -0
- package/dist/src/circuit-relay/transport/index.js.map +1 -0
- package/dist/src/circuit-relay/transport/listener.d.ts.map +1 -0
- package/dist/src/circuit-relay/transport/listener.js.map +1 -0
- package/dist/src/{circuit → circuit-relay}/transport/reservation-store.d.ts +1 -1
- package/dist/src/circuit-relay/transport/reservation-store.d.ts.map +1 -0
- package/dist/src/circuit-relay/transport/reservation-store.js.map +1 -0
- package/dist/src/circuit-relay/utils.d.ts.map +1 -0
- package/dist/src/{circuit → circuit-relay}/utils.js +3 -1
- package/dist/src/circuit-relay/utils.js.map +1 -0
- package/dist/src/components.d.ts +1 -6
- package/dist/src/components.d.ts.map +1 -1
- package/dist/src/components.js +0 -10
- package/dist/src/components.js.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +0 -9
- package/dist/src/config.js.map +1 -1
- package/dist/src/connection-manager/auto-dial.d.ts +36 -0
- package/dist/src/connection-manager/auto-dial.d.ts.map +1 -0
- package/dist/src/connection-manager/auto-dial.js +122 -0
- package/dist/src/connection-manager/auto-dial.js.map +1 -0
- package/dist/src/connection-manager/connection-pruner.d.ts +28 -0
- package/dist/src/connection-manager/connection-pruner.d.ts.map +1 -0
- package/dist/src/connection-manager/connection-pruner.js +96 -0
- package/dist/src/connection-manager/connection-pruner.js.map +1 -0
- package/dist/src/connection-manager/constants.d.ts +49 -0
- package/dist/src/connection-manager/constants.d.ts.map +1 -0
- package/dist/src/connection-manager/constants.js +49 -0
- package/dist/src/connection-manager/constants.js.map +1 -0
- package/dist/src/connection-manager/dial-queue.d.ts +77 -0
- package/dist/src/connection-manager/dial-queue.d.ts.map +1 -0
- package/dist/src/connection-manager/dial-queue.js +366 -0
- package/dist/src/connection-manager/dial-queue.js.map +1 -0
- package/dist/src/connection-manager/index.d.ts +65 -69
- package/dist/src/connection-manager/index.d.ts.map +1 -1
- package/dist/src/connection-manager/index.js +116 -229
- package/dist/src/connection-manager/index.js.map +1 -1
- package/dist/src/connection-manager/utils.d.ts +9 -0
- package/dist/src/connection-manager/utils.d.ts.map +1 -0
- package/dist/src/connection-manager/utils.js +66 -0
- package/dist/src/connection-manager/utils.js.map +1 -0
- package/dist/src/content-routing/utils.js +1 -1
- package/dist/src/content-routing/utils.js.map +1 -1
- package/dist/src/get-peer.d.ts +6 -5
- package/dist/src/get-peer.d.ts.map +1 -1
- package/dist/src/get-peer.js +34 -12
- package/dist/src/get-peer.js.map +1 -1
- package/dist/src/identify/index.js +1 -1
- package/dist/src/identify/index.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/libp2p.d.ts +13 -5
- package/dist/src/libp2p.d.ts.map +1 -1
- package/dist/src/libp2p.js +8 -12
- package/dist/src/libp2p.js.map +1 -1
- package/dist/src/upgrader.d.ts +1 -1
- package/dist/src/upgrader.d.ts.map +1 -1
- package/dist/src/upgrader.js +2 -1
- package/dist/src/upgrader.js.map +1 -1
- package/package.json +14 -14
- package/src/autonat/index.ts +2 -5
- package/src/{circuit → circuit-relay}/transport/reservation-store.ts +1 -1
- package/src/{circuit → circuit-relay}/utils.ts +3 -1
- package/src/components.ts +1 -17
- package/src/config.ts +0 -9
- package/src/connection-manager/auto-dial.ts +171 -0
- package/src/connection-manager/connection-pruner.ts +137 -0
- package/src/connection-manager/constants.ts +60 -0
- package/src/connection-manager/dial-queue.ts +504 -0
- package/src/connection-manager/index.ts +190 -319
- package/src/connection-manager/utils.ts +76 -0
- package/src/content-routing/utils.ts +1 -1
- package/src/get-peer.ts +45 -15
- package/src/identify/index.ts +1 -1
- package/src/index.ts +1 -1
- package/src/libp2p.ts +21 -17
- package/src/upgrader.ts +3 -2
- package/src/version.ts +1 -1
- package/dist/src/circuit/constants.d.ts.map +0 -1
- package/dist/src/circuit/constants.js.map +0 -1
- package/dist/src/circuit/index.d.ts.map +0 -1
- package/dist/src/circuit/index.js.map +0 -1
- package/dist/src/circuit/pb/index.d.ts.map +0 -1
- package/dist/src/circuit/pb/index.js.map +0 -1
- package/dist/src/circuit/server/advert-service.d.ts.map +0 -1
- package/dist/src/circuit/server/advert-service.js.map +0 -1
- package/dist/src/circuit/server/index.d.ts.map +0 -1
- package/dist/src/circuit/server/index.js.map +0 -1
- package/dist/src/circuit/server/reservation-store.d.ts.map +0 -1
- package/dist/src/circuit/server/reservation-store.js.map +0 -1
- package/dist/src/circuit/server/reservation-voucher.d.ts.map +0 -1
- package/dist/src/circuit/server/reservation-voucher.js.map +0 -1
- package/dist/src/circuit/transport/discovery.d.ts.map +0 -1
- package/dist/src/circuit/transport/discovery.js.map +0 -1
- package/dist/src/circuit/transport/index.d.ts.map +0 -1
- package/dist/src/circuit/transport/index.js.map +0 -1
- package/dist/src/circuit/transport/listener.d.ts.map +0 -1
- package/dist/src/circuit/transport/listener.js.map +0 -1
- package/dist/src/circuit/transport/reservation-store.d.ts.map +0 -1
- package/dist/src/circuit/transport/reservation-store.js.map +0 -1
- package/dist/src/circuit/utils.d.ts.map +0 -1
- package/dist/src/circuit/utils.js.map +0 -1
- package/dist/src/connection-manager/auto-dialler.d.ts +0 -42
- package/dist/src/connection-manager/auto-dialler.d.ts.map +0 -1
- package/dist/src/connection-manager/auto-dialler.js +0 -105
- package/dist/src/connection-manager/auto-dialler.js.map +0 -1
- package/dist/src/connection-manager/dialer/dial-request.d.ts +0 -27
- package/dist/src/connection-manager/dialer/dial-request.d.ts.map +0 -1
- package/dist/src/connection-manager/dialer/dial-request.js +0 -114
- package/dist/src/connection-manager/dialer/dial-request.js.map +0 -1
- package/dist/src/connection-manager/dialer/index.d.ts +0 -122
- package/dist/src/connection-manager/dialer/index.d.ts.map +0 -1
- package/dist/src/connection-manager/dialer/index.js +0 -321
- package/dist/src/connection-manager/dialer/index.js.map +0 -1
- package/dist/src/connection-manager/latency-monitor.d.ts +0 -120
- package/dist/src/connection-manager/latency-monitor.d.ts.map +0 -1
- package/dist/src/connection-manager/latency-monitor.js +0 -220
- package/dist/src/connection-manager/latency-monitor.js.map +0 -1
- package/dist/src/connection-manager/visibility-change-emitter.d.ts +0 -66
- package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +0 -1
- package/dist/src/connection-manager/visibility-change-emitter.js +0 -118
- package/dist/src/connection-manager/visibility-change-emitter.js.map +0 -1
- package/dist/src/constants.d.ts +0 -27
- package/dist/src/constants.d.ts.map +0 -1
- package/dist/src/constants.js +0 -31
- package/dist/src/constants.js.map +0 -1
- package/dist/typedoc-urls.json +0 -41
- package/src/connection-manager/auto-dialler.ts +0 -158
- package/src/connection-manager/dialer/dial-request.ts +0 -144
- package/src/connection-manager/dialer/index.ts +0 -457
- package/src/connection-manager/latency-monitor.ts +0 -319
- package/src/connection-manager/visibility-change-emitter.ts +0 -135
- package/src/constants.ts +0 -36
- /package/dist/src/{circuit → circuit-relay}/constants.d.ts +0 -0
- /package/dist/src/{circuit → circuit-relay}/constants.js +0 -0
- /package/dist/src/{circuit → circuit-relay}/index.d.ts +0 -0
- /package/dist/src/{circuit → circuit-relay}/index.js +0 -0
- /package/dist/src/{circuit → circuit-relay}/pb/index.d.ts +0 -0
- /package/dist/src/{circuit → circuit-relay}/pb/index.js +0 -0
- /package/dist/src/{circuit → circuit-relay}/server/advert-service.d.ts +0 -0
- /package/dist/src/{circuit → circuit-relay}/server/advert-service.js +0 -0
- /package/dist/src/{circuit → circuit-relay}/server/index.d.ts +0 -0
- /package/dist/src/{circuit → circuit-relay}/server/index.js +0 -0
- /package/dist/src/{circuit → circuit-relay}/server/reservation-store.d.ts +0 -0
- /package/dist/src/{circuit → circuit-relay}/server/reservation-store.js +0 -0
- /package/dist/src/{circuit → circuit-relay}/server/reservation-voucher.d.ts +0 -0
- /package/dist/src/{circuit → circuit-relay}/server/reservation-voucher.js +0 -0
- /package/dist/src/{circuit → circuit-relay}/transport/discovery.d.ts +0 -0
- /package/dist/src/{circuit → circuit-relay}/transport/discovery.js +0 -0
- /package/dist/src/{circuit → circuit-relay}/transport/index.d.ts +0 -0
- /package/dist/src/{circuit → circuit-relay}/transport/index.js +0 -0
- /package/dist/src/{circuit → circuit-relay}/transport/listener.d.ts +0 -0
- /package/dist/src/{circuit → circuit-relay}/transport/listener.js +0 -0
- /package/dist/src/{circuit → circuit-relay}/transport/reservation-store.js +0 -0
- /package/dist/src/{circuit → circuit-relay}/utils.d.ts +0 -0
- /package/src/{circuit → circuit-relay}/constants.ts +0 -0
- /package/src/{circuit → circuit-relay}/index.ts +0 -0
- /package/src/{circuit → circuit-relay}/pb/index.proto +0 -0
- /package/src/{circuit → circuit-relay}/pb/index.ts +0 -0
- /package/src/{circuit → circuit-relay}/server/advert-service.ts +0 -0
- /package/src/{circuit → circuit-relay}/server/index.ts +0 -0
- /package/src/{circuit → circuit-relay}/server/reservation-store.ts +0 -0
- /package/src/{circuit → circuit-relay}/server/reservation-voucher.ts +0 -0
- /package/src/{circuit → circuit-relay}/transport/discovery.ts +0 -0
- /package/src/{circuit → circuit-relay}/transport/index.ts +0 -0
- /package/src/{circuit → circuit-relay}/transport/listener.ts +0 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { logger } from '@libp2p/logger';
|
|
2
|
+
import { AbortError, CodeError } from '@libp2p/interfaces/errors';
|
|
3
|
+
import { resolvers } from '@multiformats/multiaddr';
|
|
4
|
+
import { TimeoutController } from 'timeout-abort-controller';
|
|
5
|
+
import { publicAddressesFirst } from '@libp2p/utils/address-sort';
|
|
6
|
+
import { codes } from '../errors.js';
|
|
7
|
+
import { DIAL_TIMEOUT, MAX_PARALLEL_DIALS_PER_PEER, MAX_PARALLEL_DIALS, MAX_PEER_ADDRS_TO_DIAL } from './constants.js';
|
|
8
|
+
import { getPeerAddress } from '../get-peer.js';
|
|
9
|
+
import PQueue from 'p-queue';
|
|
10
|
+
import { dnsaddrResolver } from '@multiformats/multiaddr/resolvers';
|
|
11
|
+
import { combineSignals, resolveMultiaddrs } from './utils.js';
|
|
12
|
+
import pDefer from 'p-defer';
|
|
13
|
+
const log = logger('libp2p:connection-manager:dial-queue');
|
|
14
|
+
const defaultOptions = {
|
|
15
|
+
addressSorter: publicAddressesFirst,
|
|
16
|
+
maxParallelDials: MAX_PARALLEL_DIALS,
|
|
17
|
+
maxPeerAddrsToDial: MAX_PEER_ADDRS_TO_DIAL,
|
|
18
|
+
maxParallelDialsPerPeer: MAX_PARALLEL_DIALS_PER_PEER,
|
|
19
|
+
dialTimeout: DIAL_TIMEOUT,
|
|
20
|
+
resolvers: {
|
|
21
|
+
dnsaddr: dnsaddrResolver
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
export class DialQueue {
|
|
25
|
+
constructor(components, init = {}) {
|
|
26
|
+
this.addressSorter = init.addressSorter ?? defaultOptions.addressSorter;
|
|
27
|
+
this.maxPeerAddrsToDial = init.maxPeerAddrsToDial ?? defaultOptions.maxPeerAddrsToDial;
|
|
28
|
+
this.maxParallelDialsPerPeer = init.maxParallelDialsPerPeer ?? defaultOptions.maxParallelDialsPerPeer;
|
|
29
|
+
this.dialTimeout = init.dialTimeout ?? defaultOptions.dialTimeout;
|
|
30
|
+
this.peerId = components.peerId;
|
|
31
|
+
this.peerStore = components.peerStore;
|
|
32
|
+
this.connectionGater = components.connectionGater;
|
|
33
|
+
this.transportManager = components.transportManager;
|
|
34
|
+
this.shutDownController = new AbortController();
|
|
35
|
+
this.pendingDialCount = components.metrics?.registerMetric('libp2p_dialler_pending_dials');
|
|
36
|
+
this.inProgressDialCount = components.metrics?.registerMetric('libp2p_dialler_in_progress_dials');
|
|
37
|
+
this.pendingDials = [];
|
|
38
|
+
for (const [key, value] of Object.entries(init.resolvers ?? {})) {
|
|
39
|
+
resolvers.set(key, value);
|
|
40
|
+
}
|
|
41
|
+
// controls dial concurrency
|
|
42
|
+
this.queue = new PQueue({
|
|
43
|
+
concurrency: init.maxParallelDials ?? defaultOptions.maxParallelDials
|
|
44
|
+
});
|
|
45
|
+
// a job was added to the queue
|
|
46
|
+
this.queue.on('add', () => {
|
|
47
|
+
this.pendingDialCount?.update(this.queue.size);
|
|
48
|
+
this.inProgressDialCount?.update(this.queue.pending);
|
|
49
|
+
});
|
|
50
|
+
// a queued job started
|
|
51
|
+
this.queue.on('active', () => {
|
|
52
|
+
this.pendingDialCount?.update(this.queue.size);
|
|
53
|
+
this.inProgressDialCount?.update(this.queue.pending);
|
|
54
|
+
});
|
|
55
|
+
// a started job completed without error
|
|
56
|
+
this.queue.on('completed', () => {
|
|
57
|
+
this.pendingDialCount?.update(this.queue.size);
|
|
58
|
+
this.inProgressDialCount?.update(this.queue.pending);
|
|
59
|
+
});
|
|
60
|
+
// a started job errored
|
|
61
|
+
this.queue.on('error', (err) => {
|
|
62
|
+
log.error('error in dial queue', err);
|
|
63
|
+
this.pendingDialCount?.update(this.queue.size);
|
|
64
|
+
this.inProgressDialCount?.update(this.queue.pending);
|
|
65
|
+
});
|
|
66
|
+
// all queued jobs have been started
|
|
67
|
+
this.queue.on('empty', () => {
|
|
68
|
+
this.pendingDialCount?.update(this.queue.size);
|
|
69
|
+
this.inProgressDialCount?.update(this.queue.pending);
|
|
70
|
+
});
|
|
71
|
+
// add started jobs have run and the queue is empty
|
|
72
|
+
this.queue.on('idle', () => {
|
|
73
|
+
this.pendingDialCount?.update(this.queue.size);
|
|
74
|
+
this.inProgressDialCount?.update(this.queue.pending);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Clears any pending dials
|
|
79
|
+
*/
|
|
80
|
+
stop() {
|
|
81
|
+
this.shutDownController.abort();
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Connects to a given peer, multiaddr or list of multiaddrs.
|
|
85
|
+
*
|
|
86
|
+
* If a peer is passed, all known multiaddrs will be tried. If a multiaddr or
|
|
87
|
+
* multiaddrs are passed only those will be dialled.
|
|
88
|
+
*
|
|
89
|
+
* Where a list of multiaddrs is passed, if any contain a peer id then all
|
|
90
|
+
* multiaddrs in the list must contain the same peer id.
|
|
91
|
+
*
|
|
92
|
+
* The dial to the first address that is successfully able to upgrade a connection
|
|
93
|
+
* will be used, all other dials will be aborted when that happens.
|
|
94
|
+
*/
|
|
95
|
+
async dial(peerIdOrMultiaddr, options = {}) {
|
|
96
|
+
const { peerId, multiaddrs } = getPeerAddress(peerIdOrMultiaddr);
|
|
97
|
+
const addrs = multiaddrs.map(multiaddr => ({
|
|
98
|
+
multiaddr,
|
|
99
|
+
isCertified: false
|
|
100
|
+
}));
|
|
101
|
+
// create abort conditions - need to do this before `calculateMultiaddrs` as we may be about to
|
|
102
|
+
// resolve a dns addr which can time out
|
|
103
|
+
const { timeoutController, signal } = this.createDialAbortControllers(options.signal);
|
|
104
|
+
let addrsToDial;
|
|
105
|
+
try {
|
|
106
|
+
// load addresses from address book, resolve and dnsaddrs, filter undiallables, add peer IDs, etc
|
|
107
|
+
addrsToDial = await this.calculateMultiaddrs(peerId, addrs, {
|
|
108
|
+
...options,
|
|
109
|
+
signal
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
signal.clear();
|
|
114
|
+
timeoutController.clear();
|
|
115
|
+
throw err;
|
|
116
|
+
}
|
|
117
|
+
// ready to dial, all async work finished - make sure we don't have any
|
|
118
|
+
// pending dials in progress for this peer or set of multiaddrs
|
|
119
|
+
const existingDial = this.pendingDials.find(dial => {
|
|
120
|
+
// is the dial for the same peer id?
|
|
121
|
+
if (dial.peerId != null && peerId != null && dial.peerId.equals(peerId)) {
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
// is the dial for the same set of multiaddrs?
|
|
125
|
+
if (addrsToDial.map(({ multiaddr }) => multiaddr.toString()).join() === dial.multiaddrs.map(multiaddr => multiaddr.toString()).join()) {
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
return false;
|
|
129
|
+
});
|
|
130
|
+
if (existingDial != null) {
|
|
131
|
+
log('joining existing dial target for %p', peerId);
|
|
132
|
+
signal.clear();
|
|
133
|
+
timeoutController.clear();
|
|
134
|
+
return await existingDial.promise;
|
|
135
|
+
}
|
|
136
|
+
log('creating dial target for', addrsToDial.map(({ multiaddr }) => multiaddr.toString()));
|
|
137
|
+
// @ts-expect-error .promise property is set below
|
|
138
|
+
const pendingDial = {
|
|
139
|
+
id: randomId(),
|
|
140
|
+
status: 'queued',
|
|
141
|
+
peerId,
|
|
142
|
+
multiaddrs: addrsToDial.map(({ multiaddr }) => multiaddr)
|
|
143
|
+
};
|
|
144
|
+
pendingDial.promise = this.performDial(pendingDial, {
|
|
145
|
+
...options,
|
|
146
|
+
signal
|
|
147
|
+
})
|
|
148
|
+
.finally(() => {
|
|
149
|
+
// remove our pending dial entry
|
|
150
|
+
this.pendingDials = this.pendingDials.filter(p => p.id !== pendingDial.id);
|
|
151
|
+
// clean up abort signals/controllers
|
|
152
|
+
signal.clear();
|
|
153
|
+
timeoutController.clear();
|
|
154
|
+
})
|
|
155
|
+
.catch(err => {
|
|
156
|
+
log.error('dial failed to %s', addrsToDial.map(({ multiaddr }) => multiaddr.toString()).join(', '), err);
|
|
157
|
+
// Error is a timeout
|
|
158
|
+
if (timeoutController.signal.aborted) {
|
|
159
|
+
const error = new CodeError(err.message, codes.ERR_TIMEOUT);
|
|
160
|
+
throw error;
|
|
161
|
+
}
|
|
162
|
+
throw err;
|
|
163
|
+
});
|
|
164
|
+
// let other dials join this one
|
|
165
|
+
this.pendingDials.push(pendingDial);
|
|
166
|
+
return await pendingDial.promise;
|
|
167
|
+
}
|
|
168
|
+
createDialAbortControllers(userSignal) {
|
|
169
|
+
// ensure we throw if the dial takes longer than the dial timeout
|
|
170
|
+
const timeoutController = new TimeoutController(this.dialTimeout);
|
|
171
|
+
// let any signal abort the dial
|
|
172
|
+
const signal = combineSignals(timeoutController.signal, this.shutDownController.signal, userSignal);
|
|
173
|
+
return { timeoutController, signal };
|
|
174
|
+
}
|
|
175
|
+
async calculateMultiaddrs(peerId, addrs = [], options = {}) {
|
|
176
|
+
// if a peer id or multiaddr(s) with a peer id, make sure it isn't our peer id and that we are allowed to dial it
|
|
177
|
+
if (peerId != null) {
|
|
178
|
+
if (this.peerId.equals(peerId)) {
|
|
179
|
+
throw new CodeError('Tried to dial self', codes.ERR_DIALED_SELF);
|
|
180
|
+
}
|
|
181
|
+
if ((await this.connectionGater.denyDialPeer?.(peerId)) === true) {
|
|
182
|
+
throw new CodeError('The dial request is blocked by gater.allowDialPeer', codes.ERR_PEER_DIAL_INTERCEPTED);
|
|
183
|
+
}
|
|
184
|
+
// if just a peer id was passed, load available multiaddrs for this peer from the address book
|
|
185
|
+
if (addrs.length === 0) {
|
|
186
|
+
log('loading multiaddrs for %p', peerId);
|
|
187
|
+
addrs.push(...(await this.peerStore.addressBook.get(peerId)));
|
|
188
|
+
log('loaded multiaddrs for %p', peerId, addrs.map(({ multiaddr }) => multiaddr.toString()));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// resolve addresses - this can result in a one-to-many translation when dnsaddrs are resolved
|
|
192
|
+
const resolvedAddresses = (await Promise.all(addrs.map(async (addr) => {
|
|
193
|
+
const result = await resolveMultiaddrs(addr.multiaddr, options);
|
|
194
|
+
if (result.length === 1 && result[0].equals(addr.multiaddr)) {
|
|
195
|
+
return addr;
|
|
196
|
+
}
|
|
197
|
+
return result.map(multiaddr => ({
|
|
198
|
+
multiaddr,
|
|
199
|
+
isCertified: false
|
|
200
|
+
}));
|
|
201
|
+
})))
|
|
202
|
+
.flat();
|
|
203
|
+
// filter out any multiaddrs that we do not have transports for
|
|
204
|
+
const filteredAddrs = resolvedAddresses.filter(addr => Boolean(this.transportManager.transportForMultiaddr(addr.multiaddr)));
|
|
205
|
+
// deduplicate addresses
|
|
206
|
+
const dedupedAddrs = new Map();
|
|
207
|
+
for (const addr of filteredAddrs) {
|
|
208
|
+
const maStr = addr.multiaddr.toString();
|
|
209
|
+
const existing = dedupedAddrs.get(maStr);
|
|
210
|
+
if (existing != null) {
|
|
211
|
+
existing.isCertified = existing.isCertified || addr.isCertified || false;
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
dedupedAddrs.set(maStr, addr);
|
|
215
|
+
}
|
|
216
|
+
let dedupedMultiaddrs = [...dedupedAddrs.values()];
|
|
217
|
+
if (dedupedMultiaddrs.length === 0 || dedupedMultiaddrs.length > this.maxPeerAddrsToDial) {
|
|
218
|
+
log('addresses for %p before filtering', peerId ?? 'unknown peer', resolvedAddresses.map(({ multiaddr }) => multiaddr.toString()));
|
|
219
|
+
log('addresses for %p after filtering', peerId ?? 'unknown peer', dedupedMultiaddrs.map(({ multiaddr }) => multiaddr.toString()));
|
|
220
|
+
}
|
|
221
|
+
// make sure we actually have some addresses to dial
|
|
222
|
+
if (dedupedMultiaddrs.length === 0) {
|
|
223
|
+
throw new CodeError('The dial request has no valid addresses', codes.ERR_NO_VALID_ADDRESSES);
|
|
224
|
+
}
|
|
225
|
+
// make sure we don't have too many addresses to dial
|
|
226
|
+
if (dedupedMultiaddrs.length > this.maxPeerAddrsToDial) {
|
|
227
|
+
throw new CodeError('dial with more addresses than allowed', codes.ERR_TOO_MANY_ADDRESSES);
|
|
228
|
+
}
|
|
229
|
+
// append peer id to multiaddrs if it is not already present
|
|
230
|
+
if (peerId != null) {
|
|
231
|
+
const peerIdMultiaddr = `/p2p/${peerId.toString()}`;
|
|
232
|
+
dedupedMultiaddrs = dedupedMultiaddrs.map(addr => {
|
|
233
|
+
const addressPeerId = addr.multiaddr.getPeerId();
|
|
234
|
+
const lastProto = addr.multiaddr.protos().pop();
|
|
235
|
+
// do not append peer id to path multiaddrs
|
|
236
|
+
if (lastProto?.path === true) {
|
|
237
|
+
return addr;
|
|
238
|
+
}
|
|
239
|
+
if (addressPeerId == null) {
|
|
240
|
+
return {
|
|
241
|
+
multiaddr: addr.multiaddr.encapsulate(peerIdMultiaddr),
|
|
242
|
+
isCertified: addr.isCertified
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
return addr;
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
const gatedAdrs = [];
|
|
249
|
+
for (const addr of dedupedMultiaddrs) {
|
|
250
|
+
// @ts-expect-error needs updating in the interface
|
|
251
|
+
if (this.connectionGater.denyDialMultiaddr != null && await this.connectionGater.denyDialMultiaddr(addr.multiaddr)) {
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
gatedAdrs.push(addr);
|
|
255
|
+
}
|
|
256
|
+
return gatedAdrs.sort(this.addressSorter);
|
|
257
|
+
}
|
|
258
|
+
async performDial(pendingDial, options = {}) {
|
|
259
|
+
const dialAbortControllers = pendingDial.multiaddrs.map(() => new AbortController());
|
|
260
|
+
try {
|
|
261
|
+
// internal peer dial queue to ensure we only dial the configured number of addresses
|
|
262
|
+
// per peer at the same time to prevent one peer with a lot of addresses swamping
|
|
263
|
+
// the dial queue
|
|
264
|
+
const peerDialQueue = new PQueue({
|
|
265
|
+
concurrency: this.maxParallelDialsPerPeer
|
|
266
|
+
});
|
|
267
|
+
peerDialQueue.on('error', (err) => {
|
|
268
|
+
log.error('error dialling', err);
|
|
269
|
+
});
|
|
270
|
+
const conn = await Promise.any(pendingDial.multiaddrs.map(async (addr, i) => {
|
|
271
|
+
const controller = dialAbortControllers[i];
|
|
272
|
+
if (controller == null) {
|
|
273
|
+
throw new CodeError('dialAction did not come with an AbortController', codes.ERR_INVALID_PARAMETERS);
|
|
274
|
+
}
|
|
275
|
+
// let any signal abort the dial
|
|
276
|
+
const signal = combineSignals(controller.signal, options.signal);
|
|
277
|
+
signal.addEventListener('abort', () => {
|
|
278
|
+
log('dial to %s aborted', addr);
|
|
279
|
+
});
|
|
280
|
+
const deferred = pDefer();
|
|
281
|
+
await peerDialQueue.add(async () => {
|
|
282
|
+
if (signal.aborted) {
|
|
283
|
+
log('dial to %s was aborted before reaching the head of the peer dial queue', addr);
|
|
284
|
+
deferred.reject(new AbortError());
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
// add the individual dial to the dial queue so we don't breach maxConcurrentDials
|
|
288
|
+
await this.queue.add(async () => {
|
|
289
|
+
try {
|
|
290
|
+
if (signal.aborted) {
|
|
291
|
+
log('dial to %s was aborted before reaching the head of the dial queue', addr);
|
|
292
|
+
deferred.reject(new AbortError());
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
// update dial status
|
|
296
|
+
pendingDial.status = 'active';
|
|
297
|
+
const conn = await this.transportManager.dial(addr, {
|
|
298
|
+
...options,
|
|
299
|
+
signal
|
|
300
|
+
});
|
|
301
|
+
if (controller.signal.aborted) {
|
|
302
|
+
// another dial succeeded faster than this one
|
|
303
|
+
log('multiple dials succeeded, closing superfluous connection');
|
|
304
|
+
conn.close().catch(err => {
|
|
305
|
+
log.error('error closing superfluous connection', err);
|
|
306
|
+
});
|
|
307
|
+
deferred.reject(new AbortError());
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
// remove the successful AbortController so it is not aborted
|
|
311
|
+
dialAbortControllers[i] = undefined;
|
|
312
|
+
// immediately abort any other dials
|
|
313
|
+
dialAbortControllers.forEach(c => {
|
|
314
|
+
if (c !== undefined) {
|
|
315
|
+
c.abort();
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
log('dial to %s succeeded', addr);
|
|
319
|
+
// resolve the connection promise
|
|
320
|
+
deferred.resolve(conn);
|
|
321
|
+
}
|
|
322
|
+
catch (err) {
|
|
323
|
+
// something only went wrong if our signal was not aborted
|
|
324
|
+
log.error('error during dial of %s', addr, err);
|
|
325
|
+
deferred.reject(err);
|
|
326
|
+
}
|
|
327
|
+
}, {
|
|
328
|
+
...options,
|
|
329
|
+
signal
|
|
330
|
+
}).catch(err => {
|
|
331
|
+
deferred.reject(err);
|
|
332
|
+
});
|
|
333
|
+
}, {
|
|
334
|
+
signal
|
|
335
|
+
}).catch(err => {
|
|
336
|
+
deferred.reject(err);
|
|
337
|
+
}).finally(() => {
|
|
338
|
+
signal.clear();
|
|
339
|
+
});
|
|
340
|
+
return await deferred.promise;
|
|
341
|
+
}));
|
|
342
|
+
// dial succeeded or failed
|
|
343
|
+
if (conn == null) {
|
|
344
|
+
throw new CodeError('successful dial led to empty object returned from peer dial queue', codes.ERR_TRANSPORT_DIAL_FAILED);
|
|
345
|
+
}
|
|
346
|
+
pendingDial.status = 'success';
|
|
347
|
+
return conn;
|
|
348
|
+
}
|
|
349
|
+
catch (err) {
|
|
350
|
+
pendingDial.status = 'error';
|
|
351
|
+
// if we only dialled one address, unwrap the AggregateError to provide more
|
|
352
|
+
// useful feedback to the user
|
|
353
|
+
if (pendingDial.multiaddrs.length === 1 && err.name === 'AggregateError') {
|
|
354
|
+
throw err.errors[0];
|
|
355
|
+
}
|
|
356
|
+
throw err;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Returns a random string
|
|
362
|
+
*/
|
|
363
|
+
function randomId() {
|
|
364
|
+
return `${(parseInt(String(Math.random() * 1e9), 10)).toString()}${Date.now()}`;
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=dial-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dial-queue.js","sourceRoot":"","sources":["../../../src/connection-manager/dial-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +1,69 @@
|
|
|
1
|
-
import { SummaryObject } from './latency-monitor.js';
|
|
2
1
|
import type { AbortOptions } from '@libp2p/interfaces';
|
|
3
2
|
import { EventEmitter } from '@libp2p/interfaces/events';
|
|
4
3
|
import type { Startable } from '@libp2p/interfaces/startable';
|
|
5
|
-
import { PeerId } from '@libp2p/interface-peer-id';
|
|
4
|
+
import type { PeerId } from '@libp2p/interface-peer-id';
|
|
6
5
|
import type { Connection, MultiaddrConnection } from '@libp2p/interface-connection';
|
|
7
|
-
import type { ConnectionManager, ConnectionManagerEvents
|
|
6
|
+
import type { ConnectionManager, ConnectionManagerEvents } from '@libp2p/interface-connection-manager';
|
|
8
7
|
import type { AddressSorter, PeerStore } from '@libp2p/interface-peer-store';
|
|
9
8
|
import { Multiaddr, Resolver } from '@multiformats/multiaddr';
|
|
10
9
|
import type { Metrics } from '@libp2p/interface-metrics';
|
|
11
|
-
import type { Upgrader } from '@libp2p/interface-transport';
|
|
12
|
-
|
|
10
|
+
import type { TransportManager, Upgrader } from '@libp2p/interface-transport';
|
|
11
|
+
import { AutoDial } from './auto-dial.js';
|
|
12
|
+
import { DialQueue } from './dial-queue.js';
|
|
13
|
+
import { ConnectionPruner } from './connection-pruner.js';
|
|
14
|
+
import type { ConnectionGater } from '@libp2p/interface-connection-gater';
|
|
15
|
+
import { PeerMap } from '@libp2p/peer-collections';
|
|
16
|
+
import type { PendingDial } from '../libp2p.js';
|
|
17
|
+
export interface ConnectionManagerInit {
|
|
13
18
|
/**
|
|
14
|
-
* The maximum number of connections libp2p is willing to have before it starts
|
|
19
|
+
* The maximum number of connections libp2p is willing to have before it starts
|
|
20
|
+
* pruning connections to reduce resource usage. (default: 300)
|
|
15
21
|
*/
|
|
16
|
-
maxConnections
|
|
22
|
+
maxConnections?: number;
|
|
17
23
|
/**
|
|
18
|
-
* The minimum number of connections below which libp2p
|
|
24
|
+
* The minimum number of connections below which libp2p will start to dial peers
|
|
25
|
+
* from the peer book. Setting this to 0 effectively disables this behaviour.
|
|
26
|
+
* (default: 50)
|
|
19
27
|
*/
|
|
20
|
-
minConnections
|
|
28
|
+
minConnections?: number;
|
|
21
29
|
/**
|
|
22
|
-
*
|
|
30
|
+
* How long to wait between attempting to keep our number of concurrent connections
|
|
31
|
+
* above minConnections (default: 5000)
|
|
23
32
|
*/
|
|
24
|
-
|
|
33
|
+
autoDialInterval?: number;
|
|
25
34
|
/**
|
|
26
|
-
*
|
|
35
|
+
* When dialling peers from the peer book to keep the number of open connections
|
|
36
|
+
* above `minConnections`, add dials for this many peers to the dial queue
|
|
37
|
+
* at once. (default: 25)
|
|
27
38
|
*/
|
|
28
|
-
|
|
39
|
+
autoDialConcurrency?: number;
|
|
29
40
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
41
|
+
* To allow user dials to take priority over auto dials, use this value as the
|
|
42
|
+
* dial priority. (default: 0)
|
|
32
43
|
*/
|
|
33
|
-
|
|
44
|
+
autoDialPriority?: number;
|
|
34
45
|
/**
|
|
35
|
-
* Sort the known addresses of a peer before trying to dial
|
|
46
|
+
* Sort the known addresses of a peer before trying to dial, By default public
|
|
47
|
+
* addresses will be dialled before private (e.g. loopback or LAN) addresses.
|
|
36
48
|
*/
|
|
37
49
|
addressSorter?: AddressSorter;
|
|
38
50
|
/**
|
|
39
|
-
*
|
|
51
|
+
* The maximum number of dials across all peers to execute in parallel.
|
|
52
|
+
* (default: 100)
|
|
40
53
|
*/
|
|
41
54
|
maxParallelDials?: number;
|
|
42
55
|
/**
|
|
43
|
-
*
|
|
56
|
+
* To prevent individual peers with large amounts of multiaddrs swamping the
|
|
57
|
+
* dial queue, this value controls how many addresses to dial in parallel per
|
|
58
|
+
* peer. So for example if two peers have 10 addresses and this value is set
|
|
59
|
+
* at 5, we will dial 5 addresses from each at a time. (default: 10)
|
|
60
|
+
*/
|
|
61
|
+
maxParallelDialsPerPeer?: number;
|
|
62
|
+
/**
|
|
63
|
+
* Maximum number of addresses allowed for a given peer - if a peer has more
|
|
64
|
+
* addresses than this then the dial will fail. (default: 25)
|
|
44
65
|
*/
|
|
45
|
-
|
|
66
|
+
maxPeerAddrsToDial?: number;
|
|
46
67
|
/**
|
|
47
68
|
* How long a dial attempt is allowed to take, including DNS resolution
|
|
48
69
|
* of the multiaddr, opening a socket and upgrading it to a Connection.
|
|
@@ -50,22 +71,13 @@ export interface ConnectionManagerConfig {
|
|
|
50
71
|
dialTimeout?: number;
|
|
51
72
|
/**
|
|
52
73
|
* When a new inbound connection is opened, the upgrade process (e.g. protect,
|
|
53
|
-
* encrypt, multiplex etc) must complete within this number of ms.
|
|
54
|
-
*/
|
|
55
|
-
inboundUpgradeTimeout: number;
|
|
56
|
-
/**
|
|
57
|
-
* Number of max concurrent dials per peer
|
|
74
|
+
* encrypt, multiplex etc) must complete within this number of ms. (default: 30s)
|
|
58
75
|
*/
|
|
59
|
-
|
|
76
|
+
inboundUpgradeTimeout?: number;
|
|
60
77
|
/**
|
|
61
|
-
* Multiaddr resolvers to use when
|
|
78
|
+
* Multiaddr resolvers to use when dialling
|
|
62
79
|
*/
|
|
63
80
|
resolvers?: Record<string, Resolver>;
|
|
64
|
-
/**
|
|
65
|
-
* On startup we try to dial any peer that has previously been
|
|
66
|
-
* tagged with KEEP_ALIVE up to this timeout in ms. (default: 60000)
|
|
67
|
-
*/
|
|
68
|
-
startupReconnectTimeout?: number;
|
|
69
81
|
/**
|
|
70
82
|
* A list of multiaddrs that will always be allowed (except if they are in the
|
|
71
83
|
* deny list) to open connections to this node even if we've reached maxConnections
|
|
@@ -78,12 +90,13 @@ export interface ConnectionManagerConfig {
|
|
|
78
90
|
deny?: string[];
|
|
79
91
|
/**
|
|
80
92
|
* If more than this many connections are opened per second by a single
|
|
81
|
-
* host, reject subsequent connections
|
|
93
|
+
* host, reject subsequent connections. (default: 5)
|
|
82
94
|
*/
|
|
83
95
|
inboundConnectionThreshold?: number;
|
|
84
96
|
/**
|
|
85
97
|
* The maximum number of parallel incoming connections allowed that have yet to
|
|
86
|
-
* complete the connection upgrade - e.g. choosing connection encryption, muxer, etc
|
|
98
|
+
* complete the connection upgrade - e.g. choosing connection encryption, muxer, etc.
|
|
99
|
+
* (default: 10)
|
|
87
100
|
*/
|
|
88
101
|
maxIncomingPendingConnections?: number;
|
|
89
102
|
}
|
|
@@ -92,26 +105,30 @@ export interface DefaultConnectionManagerComponents {
|
|
|
92
105
|
metrics?: Metrics;
|
|
93
106
|
upgrader: Upgrader;
|
|
94
107
|
peerStore: PeerStore;
|
|
95
|
-
|
|
108
|
+
transportManager: TransportManager;
|
|
109
|
+
connectionGater: ConnectionGater;
|
|
110
|
+
}
|
|
111
|
+
export interface OpenConnectionOptions extends AbortOptions {
|
|
112
|
+
priority?: number;
|
|
96
113
|
}
|
|
97
|
-
export type ConnectionManagerInit = ConnectionManagerConfig;
|
|
98
114
|
/**
|
|
99
115
|
* Responsible for managing known connections.
|
|
100
116
|
*/
|
|
101
117
|
export declare class DefaultConnectionManager extends EventEmitter<ConnectionManagerEvents> implements ConnectionManager, Startable {
|
|
102
|
-
private readonly components;
|
|
103
|
-
private readonly opts;
|
|
104
|
-
private readonly connections;
|
|
105
118
|
private started;
|
|
106
|
-
private readonly
|
|
107
|
-
private readonly startupReconnectTimeout;
|
|
108
|
-
private connectOnStartupController?;
|
|
109
|
-
private readonly dialTimeout;
|
|
119
|
+
private readonly connections;
|
|
110
120
|
private readonly allow;
|
|
111
121
|
private readonly deny;
|
|
112
|
-
private readonly
|
|
122
|
+
private readonly maxIncomingPendingConnections;
|
|
113
123
|
private incomingPendingConnections;
|
|
114
|
-
|
|
124
|
+
private readonly maxConnections;
|
|
125
|
+
readonly dialQueue: DialQueue;
|
|
126
|
+
readonly autoDial: AutoDial;
|
|
127
|
+
readonly connectionPruner: ConnectionPruner;
|
|
128
|
+
private readonly inboundConnectionRateLimiter;
|
|
129
|
+
private readonly peerStore;
|
|
130
|
+
private readonly metrics?;
|
|
131
|
+
constructor(components: DefaultConnectionManagerComponents, init?: ConnectionManagerInit);
|
|
115
132
|
isStarted(): boolean;
|
|
116
133
|
/**
|
|
117
134
|
* Starts the Connection Manager. If Metrics are not enabled on libp2p
|
|
@@ -119,15 +136,10 @@ export declare class DefaultConnectionManager extends EventEmitter<ConnectionMan
|
|
|
119
136
|
*/
|
|
120
137
|
start(): Promise<void>;
|
|
121
138
|
afterStart(): Promise<void>;
|
|
122
|
-
beforeStop(): Promise<void>;
|
|
123
139
|
/**
|
|
124
140
|
* Stops the Connection Manager
|
|
125
141
|
*/
|
|
126
142
|
stop(): Promise<void>;
|
|
127
|
-
/**
|
|
128
|
-
* Cleans up the connections
|
|
129
|
-
*/
|
|
130
|
-
_close(): Promise<void>;
|
|
131
143
|
onConnect(evt: CustomEvent<Connection>): void;
|
|
132
144
|
/**
|
|
133
145
|
* Tracks the incoming connection and check the connection limit
|
|
@@ -138,27 +150,11 @@ export declare class DefaultConnectionManager extends EventEmitter<ConnectionMan
|
|
|
138
150
|
*/
|
|
139
151
|
onDisconnect(evt: CustomEvent<Connection>): void;
|
|
140
152
|
getConnections(peerId?: PeerId): Connection[];
|
|
141
|
-
getConnectionsMap():
|
|
142
|
-
openConnection(peerIdOrMultiaddr: PeerId | Multiaddr, options?:
|
|
153
|
+
getConnectionsMap(): PeerMap<Connection[]>;
|
|
154
|
+
openConnection(peerIdOrMultiaddr: PeerId | Multiaddr | Multiaddr[], options?: OpenConnectionOptions): Promise<Connection>;
|
|
143
155
|
closeConnections(peerId: PeerId): Promise<void>;
|
|
144
|
-
/**
|
|
145
|
-
* Get all open connections with a peer
|
|
146
|
-
*/
|
|
147
|
-
getAll(peerId: PeerId): Connection[];
|
|
148
|
-
/**
|
|
149
|
-
* If the event loop is slow, maybe close a connection
|
|
150
|
-
*/
|
|
151
|
-
_onLatencyMeasure(evt: CustomEvent<SummaryObject>): void;
|
|
152
|
-
/**
|
|
153
|
-
* If the `value` of `name` has exceeded its limit, maybe close a connection
|
|
154
|
-
*/
|
|
155
|
-
_checkMaxLimit(name: keyof ConnectionManagerInit, value: number, toPrune?: number): Promise<void>;
|
|
156
|
-
/**
|
|
157
|
-
* If we have more connections than our maximum, select some excess connections
|
|
158
|
-
* to prune based on peer value
|
|
159
|
-
*/
|
|
160
|
-
_pruneConnections(toPrune: number): Promise<void>;
|
|
161
156
|
acceptIncomingConnection(maConn: MultiaddrConnection): Promise<boolean>;
|
|
162
157
|
afterUpgradeInbound(): void;
|
|
158
|
+
getDialQueue(): PendingDial[];
|
|
163
159
|
}
|
|
164
160
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/index.ts"],"names":[],"mappings":"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"}
|