@waku/core 0.0.37-7a9850d.0 → 0.0.37-c7682ea.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/bundle/index.js +4745 -899
- package/bundle/lib/message/version_0.js +1 -1
- package/bundle/{version_0-9DPFjcJG.js → version_0-Bc0h7ah2.js} +312 -33
- package/dist/.tsbuildinfo +1 -1
- package/dist/lib/connection_manager/connection_limiter.d.ts +37 -0
- package/dist/lib/connection_manager/connection_limiter.js +124 -0
- package/dist/lib/connection_manager/connection_limiter.js.map +1 -0
- package/dist/lib/connection_manager/connection_manager.d.ts +20 -105
- package/dist/lib/connection_manager/connection_manager.js +83 -508
- package/dist/lib/connection_manager/connection_manager.js.map +1 -1
- package/dist/lib/connection_manager/dialer.d.ts +28 -0
- package/dist/lib/connection_manager/dialer.js +100 -0
- package/dist/lib/connection_manager/dialer.js.map +1 -0
- package/dist/lib/connection_manager/discovery_dialer.d.ts +26 -0
- package/dist/lib/connection_manager/discovery_dialer.js +68 -0
- package/dist/lib/connection_manager/discovery_dialer.js.map +1 -0
- package/dist/lib/connection_manager/keep_alive_manager.d.ts +17 -7
- package/dist/lib/connection_manager/keep_alive_manager.js +110 -74
- package/dist/lib/connection_manager/keep_alive_manager.js.map +1 -1
- package/dist/lib/connection_manager/network_monitor.d.ts +36 -0
- package/dist/lib/connection_manager/network_monitor.js +81 -0
- package/dist/lib/connection_manager/network_monitor.js.map +1 -0
- package/dist/lib/connection_manager/shard_reader.d.ts +28 -0
- package/dist/lib/connection_manager/shard_reader.js +70 -0
- package/dist/lib/connection_manager/shard_reader.js.map +1 -0
- package/dist/lib/connection_manager/utils.d.ts +16 -1
- package/dist/lib/connection_manager/utils.js +23 -0
- package/dist/lib/connection_manager/utils.js.map +1 -1
- package/dist/lib/filter/filter.d.ts +2 -3
- package/dist/lib/filter/filter.js +5 -25
- package/dist/lib/filter/filter.js.map +1 -1
- package/dist/lib/light_push/light_push.d.ts +2 -3
- package/dist/lib/light_push/light_push.js +1 -3
- package/dist/lib/light_push/light_push.js.map +1 -1
- package/package.json +1 -1
- package/src/lib/connection_manager/connection_limiter.ts +201 -0
- package/src/lib/connection_manager/connection_manager.ts +104 -669
- package/src/lib/connection_manager/dialer.ts +139 -0
- package/src/lib/connection_manager/discovery_dialer.ts +106 -0
- package/src/lib/connection_manager/keep_alive_manager.ts +154 -87
- package/src/lib/connection_manager/network_monitor.ts +112 -0
- package/src/lib/connection_manager/shard_reader.ts +134 -0
- package/src/lib/connection_manager/utils.ts +27 -1
- package/src/lib/filter/filter.ts +3 -28
- package/src/lib/light_push/light_push.ts +1 -5
@@ -1,108 +1,30 @@
|
|
1
|
-
import { isPeerId, TypedEventEmitter } from "@libp2p/interface";
|
2
|
-
import { multiaddr } from "@multiformats/multiaddr";
|
3
|
-
import { DNS_DISCOVERY_TAG, EConnectionStateEvents, EPeersByDiscoveryEvents } from "@waku/interfaces";
|
4
|
-
import { Tags } from "@waku/interfaces";
|
5
|
-
import { decodeRelayShard, shardInfoToPubsubTopics } from "@waku/utils";
|
6
1
|
import { Logger } from "@waku/utils";
|
2
|
+
import { ConnectionLimiter } from "./connection_limiter.js";
|
3
|
+
import { Dialer } from "./dialer.js";
|
4
|
+
import { DiscoveryDialer } from "./discovery_dialer.js";
|
7
5
|
import { KeepAliveManager } from "./keep_alive_manager.js";
|
8
|
-
import {
|
6
|
+
import { NetworkMonitor } from "./network_monitor.js";
|
7
|
+
import { ShardReader } from "./shard_reader.js";
|
8
|
+
import { getPeerPing, mapToPeerId, mapToPeerIdOrMultiaddr } from "./utils.js";
|
9
9
|
const log = new Logger("connection-manager");
|
10
10
|
const DEFAULT_MAX_BOOTSTRAP_PEERS_ALLOWED = 1;
|
11
|
-
const DEFAULT_MAX_DIAL_ATTEMPTS_FOR_PEER = 3;
|
12
|
-
const DEFAULT_MAX_PARALLEL_DIALS = 3;
|
13
11
|
const DEFAULT_PING_KEEP_ALIVE_SEC = 5 * 60;
|
14
12
|
const DEFAULT_RELAY_KEEP_ALIVE_SEC = 5 * 60;
|
15
|
-
export class ConnectionManager
|
16
|
-
// TODO(weboko): make it private
|
13
|
+
export class ConnectionManager {
|
17
14
|
pubsubTopics;
|
18
15
|
keepAliveManager;
|
16
|
+
discoveryDialer;
|
17
|
+
dialer;
|
18
|
+
shardReader;
|
19
|
+
networkMonitor;
|
20
|
+
connectionLimiter;
|
19
21
|
options;
|
20
22
|
libp2p;
|
21
|
-
dialAttemptsForPeer = new Map();
|
22
|
-
dialErrorsForPeer = new Map();
|
23
|
-
currentActiveParallelDialCount = 0;
|
24
|
-
pendingPeerDialQueue = [];
|
25
|
-
isP2PNetworkConnected = false;
|
26
|
-
isConnected() {
|
27
|
-
if (globalThis?.navigator && !globalThis?.navigator?.onLine) {
|
28
|
-
return false;
|
29
|
-
}
|
30
|
-
return this.isP2PNetworkConnected;
|
31
|
-
}
|
32
|
-
stop() {
|
33
|
-
this.keepAliveManager.stopAll();
|
34
|
-
this.libp2p.removeEventListener("peer:connect", this.onEventHandlers["peer:connect"]);
|
35
|
-
this.libp2p.removeEventListener("peer:disconnect", this.onEventHandlers["peer:disconnect"]);
|
36
|
-
this.libp2p.removeEventListener("peer:discovery", this.onEventHandlers["peer:discovery"]);
|
37
|
-
this.stopNetworkStatusListener();
|
38
|
-
}
|
39
|
-
async dropConnection(peerId) {
|
40
|
-
try {
|
41
|
-
this.keepAliveManager.stop(peerId);
|
42
|
-
await this.libp2p.hangUp(peerId);
|
43
|
-
log.info(`Dropped connection with peer ${peerId.toString()}`);
|
44
|
-
}
|
45
|
-
catch (error) {
|
46
|
-
log.error(`Error dropping connection with peer ${peerId.toString()} - ${error}`);
|
47
|
-
}
|
48
|
-
}
|
49
|
-
async getPeersByDiscovery() {
|
50
|
-
const peersDiscovered = await this.libp2p.peerStore.all();
|
51
|
-
const peersConnected = this.libp2p
|
52
|
-
.getConnections()
|
53
|
-
.map((conn) => conn.remotePeer);
|
54
|
-
const peersDiscoveredByBootstrap = [];
|
55
|
-
const peersDiscoveredByPeerExchange = [];
|
56
|
-
const peersDiscoveredByLocal = [];
|
57
|
-
const peersConnectedByBootstrap = [];
|
58
|
-
const peersConnectedByPeerExchange = [];
|
59
|
-
const peersConnectedByLocal = [];
|
60
|
-
for (const peer of peersDiscovered) {
|
61
|
-
const tags = await this.getTagNamesForPeer(peer.id);
|
62
|
-
if (tags.includes(Tags.BOOTSTRAP)) {
|
63
|
-
peersDiscoveredByBootstrap.push(peer);
|
64
|
-
}
|
65
|
-
else if (tags.includes(Tags.PEER_EXCHANGE)) {
|
66
|
-
peersDiscoveredByPeerExchange.push(peer);
|
67
|
-
}
|
68
|
-
else if (tags.includes(Tags.LOCAL)) {
|
69
|
-
peersDiscoveredByLocal.push(peer);
|
70
|
-
}
|
71
|
-
}
|
72
|
-
for (const peerId of peersConnected) {
|
73
|
-
const peer = await this.libp2p.peerStore.get(peerId);
|
74
|
-
const tags = await this.getTagNamesForPeer(peerId);
|
75
|
-
if (tags.includes(Tags.BOOTSTRAP)) {
|
76
|
-
peersConnectedByBootstrap.push(peer);
|
77
|
-
}
|
78
|
-
else if (tags.includes(Tags.PEER_EXCHANGE)) {
|
79
|
-
peersConnectedByPeerExchange.push(peer);
|
80
|
-
}
|
81
|
-
else if (tags.includes(Tags.LOCAL)) {
|
82
|
-
peersConnectedByLocal.push(peer);
|
83
|
-
}
|
84
|
-
}
|
85
|
-
return {
|
86
|
-
DISCOVERED: {
|
87
|
-
[Tags.BOOTSTRAP]: peersDiscoveredByBootstrap,
|
88
|
-
[Tags.PEER_EXCHANGE]: peersDiscoveredByPeerExchange,
|
89
|
-
[Tags.LOCAL]: peersDiscoveredByLocal
|
90
|
-
},
|
91
|
-
CONNECTED: {
|
92
|
-
[Tags.BOOTSTRAP]: peersConnectedByBootstrap,
|
93
|
-
[Tags.PEER_EXCHANGE]: peersConnectedByPeerExchange,
|
94
|
-
[Tags.LOCAL]: peersConnectedByLocal
|
95
|
-
}
|
96
|
-
};
|
97
|
-
}
|
98
23
|
constructor(options) {
|
99
|
-
super();
|
100
24
|
this.libp2p = options.libp2p;
|
101
25
|
this.pubsubTopics = options.pubsubTopics;
|
102
26
|
this.options = {
|
103
|
-
|
104
|
-
maxBootstrapPeersAllowed: DEFAULT_MAX_BOOTSTRAP_PEERS_ALLOWED,
|
105
|
-
maxParallelDials: DEFAULT_MAX_PARALLEL_DIALS,
|
27
|
+
maxBootstrapPeers: DEFAULT_MAX_BOOTSTRAP_PEERS_ALLOWED,
|
106
28
|
pingKeepAlive: DEFAULT_PING_KEEP_ALIVE_SEC,
|
107
29
|
relayKeepAlive: DEFAULT_RELAY_KEEP_ALIVE_SEC,
|
108
30
|
...options.config
|
@@ -115,17 +37,71 @@ export class ConnectionManager extends TypedEventEmitter {
|
|
115
37
|
relayKeepAlive: this.options.relayKeepAlive
|
116
38
|
}
|
117
39
|
});
|
118
|
-
this.
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
40
|
+
this.shardReader = new ShardReader({
|
41
|
+
libp2p: options.libp2p,
|
42
|
+
networkConfig: options.networkConfig
|
43
|
+
});
|
44
|
+
this.dialer = new Dialer({
|
45
|
+
libp2p: options.libp2p,
|
46
|
+
shardReader: this.shardReader
|
47
|
+
});
|
48
|
+
this.discoveryDialer = new DiscoveryDialer({
|
49
|
+
libp2p: options.libp2p,
|
50
|
+
dialer: this.dialer
|
51
|
+
});
|
52
|
+
this.networkMonitor = new NetworkMonitor({
|
53
|
+
libp2p: options.libp2p,
|
54
|
+
events: options.events
|
55
|
+
});
|
56
|
+
this.connectionLimiter = new ConnectionLimiter({
|
57
|
+
libp2p: options.libp2p,
|
58
|
+
events: options.events,
|
59
|
+
networkMonitor: this.networkMonitor,
|
60
|
+
dialer: this.dialer,
|
61
|
+
options: this.options
|
62
|
+
});
|
63
|
+
}
|
64
|
+
start() {
|
65
|
+
this.networkMonitor.start();
|
66
|
+
this.discoveryDialer.start();
|
67
|
+
this.keepAliveManager.start();
|
68
|
+
this.connectionLimiter.start();
|
69
|
+
}
|
70
|
+
stop() {
|
71
|
+
this.networkMonitor.stop();
|
72
|
+
this.discoveryDialer.stop();
|
73
|
+
this.keepAliveManager.stop();
|
74
|
+
this.connectionLimiter.stop();
|
75
|
+
}
|
76
|
+
isConnected() {
|
77
|
+
return this.networkMonitor.isConnected();
|
78
|
+
}
|
79
|
+
async dial(peer, protocolCodecs) {
|
80
|
+
const ma = mapToPeerIdOrMultiaddr(peer);
|
81
|
+
log.info(`Dialing peer ${ma.toString()} with protocols ${protocolCodecs}`);
|
82
|
+
// must use libp2p directly instead of dialer because we need to dial the peer right away
|
83
|
+
const stream = await this.libp2p.dialProtocol(ma, protocolCodecs);
|
84
|
+
log.info(`Dialed peer ${ma.toString()} with protocols ${protocolCodecs}`);
|
85
|
+
return stream;
|
86
|
+
}
|
87
|
+
async hangUp(peer) {
|
88
|
+
const peerId = mapToPeerId(peer);
|
89
|
+
try {
|
90
|
+
log.info(`Dropping connection with peer ${peerId.toString()}`);
|
91
|
+
await this.libp2p.hangUp(peerId);
|
92
|
+
log.info(`Dropped connection with peer ${peerId.toString()}`);
|
93
|
+
return true;
|
94
|
+
}
|
95
|
+
catch (error) {
|
96
|
+
log.error(`Error dropping connection with peer ${peerId.toString()} - ${error}`);
|
97
|
+
return false;
|
98
|
+
}
|
125
99
|
}
|
126
100
|
async getConnectedPeers(codec) {
|
127
101
|
const peerIDs = this.libp2p.getPeers();
|
102
|
+
log.info(`Getting connected peers for codec ${codec}`);
|
128
103
|
if (peerIDs.length === 0) {
|
104
|
+
log.info(`No connected peers`);
|
129
105
|
return [];
|
130
106
|
}
|
131
107
|
const peers = await Promise.all(peerIDs.map(async (id) => {
|
@@ -136,422 +112,21 @@ export class ConnectionManager extends TypedEventEmitter {
|
|
136
112
|
return null;
|
137
113
|
}
|
138
114
|
}));
|
139
|
-
|
115
|
+
const result = peers
|
140
116
|
.filter((p) => !!p)
|
141
117
|
.filter((p) => (codec ? p.protocols.includes(codec) : true))
|
142
118
|
.sort((left, right) => getPeerPing(left) - getPeerPing(right));
|
119
|
+
log.info(`Found ${result.length} connected peers for codec ${codec}`);
|
120
|
+
return result;
|
143
121
|
}
|
144
|
-
|
145
|
-
|
146
|
-
const dialPromises = [];
|
147
|
-
for (const peerInfo of peerInfos) {
|
148
|
-
if (this.libp2p.getConnections().find((c) => c.remotePeer === peerInfo.id))
|
149
|
-
continue;
|
150
|
-
dialPromises.push(this.attemptDial(peerInfo.id));
|
151
|
-
}
|
152
|
-
try {
|
153
|
-
await Promise.all(dialPromises);
|
154
|
-
}
|
155
|
-
catch (error) {
|
156
|
-
log.error(`Unexpected error while dialing peer store peers`, error);
|
157
|
-
}
|
122
|
+
isTopicConfigured(pubsubTopic) {
|
123
|
+
return this.pubsubTopics.includes(pubsubTopic);
|
158
124
|
}
|
159
|
-
async
|
160
|
-
this.
|
161
|
-
this.startPeerConnectionListener();
|
162
|
-
this.startPeerDisconnectionListener();
|
163
|
-
this.startNetworkStatusListener();
|
125
|
+
async hasShardInfo(peerId) {
|
126
|
+
return this.shardReader.hasShardInfo(peerId);
|
164
127
|
}
|
165
|
-
|
166
|
-
|
167
|
-
* The method handles both PeerId and Multiaddr inputs, manages connection attempts,
|
168
|
-
* and maintains the connection state.
|
169
|
-
*
|
170
|
-
* The dialing process includes:
|
171
|
-
* 1. Converting input to dialable peer info
|
172
|
-
* 2. Managing parallel dial attempts
|
173
|
-
* 3. Attempting to establish protocol-specific connections
|
174
|
-
* 4. Handling connection failures and retries
|
175
|
-
* 5. Updating the peer store and connection state
|
176
|
-
*
|
177
|
-
* @param {PeerId | MultiaddrInput} peer - The peer to connect to, either as a PeerId or multiaddr
|
178
|
-
* @param {string[]} [protocolCodecs] - Optional array of protocol-specific codec strings to establish
|
179
|
-
* (e.g., for LightPush, Filter, Store protocols)
|
180
|
-
*
|
181
|
-
* @throws {Error} If the multiaddr is missing a peer ID
|
182
|
-
* @throws {Error} If the maximum dial attempts are reached and the peer cannot be dialed
|
183
|
-
* @throws {Error} If there's an error deleting an undialable peer from the peer store
|
184
|
-
*
|
185
|
-
* @example
|
186
|
-
* ```typescript
|
187
|
-
* // Dial using PeerId
|
188
|
-
* await connectionManager.dialPeer(peerId);
|
189
|
-
*
|
190
|
-
* // Dial using multiaddr with specific protocols
|
191
|
-
* await connectionManager.dialPeer(multiaddr, [
|
192
|
-
* "/vac/waku/relay/2.0.0",
|
193
|
-
* "/vac/waku/lightpush/2.0.0-beta1"
|
194
|
-
* ]);
|
195
|
-
* ```
|
196
|
-
*
|
197
|
-
* @remarks
|
198
|
-
* - The method implements exponential backoff through multiple dial attempts
|
199
|
-
* - Maintains a queue for parallel dial attempts (limited by maxParallelDials)
|
200
|
-
* - Integrates with the KeepAliveManager for connection maintenance
|
201
|
-
* - Updates the peer store and connection state after successful/failed attempts
|
202
|
-
* - If all dial attempts fail, triggers DNS discovery as a fallback
|
203
|
-
*/
|
204
|
-
async dialPeer(peer) {
|
205
|
-
let connection;
|
206
|
-
let peerId;
|
207
|
-
const peerDialInfo = this.getDialablePeerInfo(peer);
|
208
|
-
const peerIdStr = isPeerId(peerDialInfo)
|
209
|
-
? peerDialInfo.toString()
|
210
|
-
: peerDialInfo.getPeerId();
|
211
|
-
this.currentActiveParallelDialCount += 1;
|
212
|
-
let dialAttempt = 0;
|
213
|
-
while (dialAttempt < this.options.maxDialAttemptsForPeer) {
|
214
|
-
try {
|
215
|
-
log.info(`Dialing peer ${peerDialInfo} on attempt ${dialAttempt + 1}`);
|
216
|
-
connection = await this.libp2p.dial(peerDialInfo);
|
217
|
-
peerId = connection.remotePeer;
|
218
|
-
const tags = await this.getTagNamesForPeer(peerId);
|
219
|
-
// add tag to connection describing discovery mechanism
|
220
|
-
// don't add duplicate tags
|
221
|
-
this.libp2p.getConnections(peerId).forEach((conn) => {
|
222
|
-
conn.tags = Array.from(new Set([...conn.tags, ...tags]));
|
223
|
-
});
|
224
|
-
// instead of deleting the peer from the peer store, we set the dial attempt to -1
|
225
|
-
// this helps us keep track of peers that have been dialed before
|
226
|
-
this.dialAttemptsForPeer.set(peerId.toString(), -1);
|
227
|
-
// Dialing succeeded, break the loop
|
228
|
-
this.keepAliveManager.start(peerId);
|
229
|
-
break;
|
230
|
-
}
|
231
|
-
catch (error) {
|
232
|
-
if (error instanceof AggregateError) {
|
233
|
-
// Handle AggregateError
|
234
|
-
log.error(`Error dialing peer ${peerIdStr} - ${error.errors}`);
|
235
|
-
}
|
236
|
-
else {
|
237
|
-
// Handle generic error
|
238
|
-
log.error(`Error dialing peer ${peerIdStr} - ${error.message}`);
|
239
|
-
}
|
240
|
-
this.dialErrorsForPeer.set(peerIdStr, error);
|
241
|
-
dialAttempt++;
|
242
|
-
this.dialAttemptsForPeer.set(peerIdStr, dialAttempt);
|
243
|
-
}
|
244
|
-
}
|
245
|
-
// Always decrease the active dial count and process the dial queue
|
246
|
-
this.currentActiveParallelDialCount--;
|
247
|
-
this.processDialQueue();
|
248
|
-
// If max dial attempts reached and dialing failed, delete the peer
|
249
|
-
if (dialAttempt === this.options.maxDialAttemptsForPeer) {
|
250
|
-
try {
|
251
|
-
const error = this.dialErrorsForPeer.get(peerIdStr);
|
252
|
-
if (error) {
|
253
|
-
let errorMessage;
|
254
|
-
if (error instanceof AggregateError) {
|
255
|
-
if (!error.errors) {
|
256
|
-
log.warn(`No errors array found for AggregateError`);
|
257
|
-
}
|
258
|
-
else if (error.errors.length === 0) {
|
259
|
-
log.warn(`Errors array is empty for AggregateError`);
|
260
|
-
}
|
261
|
-
else {
|
262
|
-
errorMessage = JSON.stringify(error.errors[0]);
|
263
|
-
}
|
264
|
-
}
|
265
|
-
else {
|
266
|
-
errorMessage = error.message;
|
267
|
-
}
|
268
|
-
log.info(`Deleting undialable peer ${peerIdStr} from peer store. Reason: ${errorMessage}`);
|
269
|
-
}
|
270
|
-
this.dialErrorsForPeer.delete(peerIdStr);
|
271
|
-
if (peerId) {
|
272
|
-
await this.libp2p.peerStore.delete(peerId);
|
273
|
-
}
|
274
|
-
// if it was last available peer - attempt DNS discovery
|
275
|
-
await this.attemptDnsDiscovery();
|
276
|
-
}
|
277
|
-
catch (error) {
|
278
|
-
throw new Error(`Error deleting undialable peer ${peerIdStr} from peer store - ${error}`);
|
279
|
-
}
|
280
|
-
}
|
281
|
-
if (!connection) {
|
282
|
-
throw new Error(`Failed to dial peer ${peerDialInfo}`);
|
283
|
-
}
|
284
|
-
return connection;
|
285
|
-
}
|
286
|
-
/**
|
287
|
-
* Dial a peer with specific protocols.
|
288
|
-
* This method is a raw proxy to the libp2p dialProtocol method.
|
289
|
-
* @param peer - The peer to connect to, either as a PeerId or multiaddr
|
290
|
-
* @param protocolCodecs - Optional array of protocol-specific codec strings to establish
|
291
|
-
* @returns A stream to the peer
|
292
|
-
*/
|
293
|
-
async rawDialPeerWithProtocols(peer, protocolCodecs) {
|
294
|
-
const peerDialInfo = this.getDialablePeerInfo(peer);
|
295
|
-
return await this.libp2p.dialProtocol(peerDialInfo, protocolCodecs);
|
296
|
-
}
|
297
|
-
/**
|
298
|
-
* Internal utility to extract a PeerId or Multiaddr from a peer input.
|
299
|
-
* This is used internally by the connection manager to handle different peer input formats.
|
300
|
-
* @internal
|
301
|
-
*/
|
302
|
-
getDialablePeerInfo(peer) {
|
303
|
-
if (isPeerId(peer)) {
|
304
|
-
return peer;
|
305
|
-
}
|
306
|
-
else {
|
307
|
-
// peer is of MultiaddrInput type
|
308
|
-
const ma = multiaddr(peer);
|
309
|
-
const peerIdStr = ma.getPeerId();
|
310
|
-
if (!peerIdStr) {
|
311
|
-
throw new Error("Failed to dial multiaddr: missing peer ID");
|
312
|
-
}
|
313
|
-
return ma;
|
314
|
-
}
|
315
|
-
}
|
316
|
-
async attemptDnsDiscovery() {
|
317
|
-
if (this.libp2p.getConnections().length > 0)
|
318
|
-
return;
|
319
|
-
if ((await this.libp2p.peerStore.all()).length > 0)
|
320
|
-
return;
|
321
|
-
log.info("Attempting to trigger DNS discovery.");
|
322
|
-
const dnsDiscovery = Object.values(this.libp2p.components.components).find((v) => {
|
323
|
-
if (v && v.toString) {
|
324
|
-
return v.toString().includes(DNS_DISCOVERY_TAG);
|
325
|
-
}
|
326
|
-
return false;
|
327
|
-
});
|
328
|
-
if (!dnsDiscovery)
|
329
|
-
return;
|
330
|
-
await dnsDiscovery.findPeers();
|
331
|
-
}
|
332
|
-
processDialQueue() {
|
333
|
-
if (this.pendingPeerDialQueue.length > 0 &&
|
334
|
-
this.currentActiveParallelDialCount < this.options.maxParallelDials) {
|
335
|
-
const peerId = this.pendingPeerDialQueue.shift();
|
336
|
-
if (!peerId)
|
337
|
-
return;
|
338
|
-
this.attemptDial(peerId).catch((error) => {
|
339
|
-
log.error(error);
|
340
|
-
});
|
341
|
-
}
|
342
|
-
}
|
343
|
-
startPeerDiscoveryListener() {
|
344
|
-
this.libp2p.addEventListener("peer:discovery", this.onEventHandlers["peer:discovery"]);
|
345
|
-
}
|
346
|
-
startPeerConnectionListener() {
|
347
|
-
this.libp2p.addEventListener("peer:connect", this.onEventHandlers["peer:connect"]);
|
348
|
-
}
|
349
|
-
startPeerDisconnectionListener() {
|
350
|
-
// TODO: ensure that these following issues are updated and confirmed
|
351
|
-
/**
|
352
|
-
* NOTE: Event is not being emitted on closing nor losing a connection.
|
353
|
-
* @see https://github.com/libp2p/js-libp2p/issues/939
|
354
|
-
* @see https://github.com/status-im/js-waku/issues/252
|
355
|
-
*
|
356
|
-
* >This event will be triggered anytime we are disconnected from another peer,
|
357
|
-
* >regardless of the circumstances of that disconnection.
|
358
|
-
* >If we happen to have multiple connections to a peer,
|
359
|
-
* >this event will **only** be triggered when the last connection is closed.
|
360
|
-
* @see https://github.com/libp2p/js-libp2p/blob/bad9e8c0ff58d60a78314077720c82ae331cc55b/doc/API.md?plain=1#L2100
|
361
|
-
*/
|
362
|
-
this.libp2p.addEventListener("peer:disconnect", this.onEventHandlers["peer:disconnect"]);
|
363
|
-
}
|
364
|
-
async attemptDial(peerId) {
|
365
|
-
if (!(await this.shouldDialPeer(peerId)))
|
366
|
-
return;
|
367
|
-
if (this.currentActiveParallelDialCount >= this.options.maxParallelDials) {
|
368
|
-
this.pendingPeerDialQueue.push(peerId);
|
369
|
-
return;
|
370
|
-
}
|
371
|
-
await this.dialPeer(peerId);
|
372
|
-
}
|
373
|
-
onEventHandlers = {
|
374
|
-
"peer:discovery": (evt) => {
|
375
|
-
void (async () => {
|
376
|
-
const { id: peerId } = evt.detail;
|
377
|
-
await this.dispatchDiscoveryEvent(peerId);
|
378
|
-
try {
|
379
|
-
await this.attemptDial(peerId);
|
380
|
-
}
|
381
|
-
catch (error) {
|
382
|
-
log.error(`Error dialing peer ${peerId.toString()} : ${error}`);
|
383
|
-
}
|
384
|
-
})();
|
385
|
-
},
|
386
|
-
"peer:connect": (evt) => {
|
387
|
-
void (async () => {
|
388
|
-
log.info(`Connected to peer ${evt.detail.toString()}`);
|
389
|
-
const peerId = evt.detail;
|
390
|
-
this.keepAliveManager.start(peerId);
|
391
|
-
const isBootstrap = (await this.getTagNamesForPeer(peerId)).includes(Tags.BOOTSTRAP);
|
392
|
-
if (isBootstrap) {
|
393
|
-
const bootstrapConnections = this.libp2p
|
394
|
-
.getConnections()
|
395
|
-
.filter((conn) => conn.tags.includes(Tags.BOOTSTRAP));
|
396
|
-
// If we have too many bootstrap connections, drop one
|
397
|
-
if (bootstrapConnections.length > this.options.maxBootstrapPeersAllowed) {
|
398
|
-
await this.dropConnection(peerId);
|
399
|
-
}
|
400
|
-
else {
|
401
|
-
this.dispatchEvent(new CustomEvent(EPeersByDiscoveryEvents.PEER_CONNECT_BOOTSTRAP, {
|
402
|
-
detail: peerId
|
403
|
-
}));
|
404
|
-
}
|
405
|
-
}
|
406
|
-
else {
|
407
|
-
this.dispatchEvent(new CustomEvent(EPeersByDiscoveryEvents.PEER_CONNECT_PEER_EXCHANGE, {
|
408
|
-
detail: peerId
|
409
|
-
}));
|
410
|
-
}
|
411
|
-
this.setP2PNetworkConnected();
|
412
|
-
})();
|
413
|
-
},
|
414
|
-
"peer:disconnect": (evt) => {
|
415
|
-
void (async () => {
|
416
|
-
this.keepAliveManager.stop(evt.detail);
|
417
|
-
this.setP2PNetworkDisconnected();
|
418
|
-
})();
|
419
|
-
},
|
420
|
-
"browser:network": () => {
|
421
|
-
this.dispatchWakuConnectionEvent();
|
422
|
-
}
|
423
|
-
};
|
424
|
-
/**
|
425
|
-
* Checks if the peer should be dialed based on the following conditions:
|
426
|
-
* 1. If the peer is already connected, don't dial
|
427
|
-
* 2. If the peer is not part of any of the configured pubsub topics, don't dial
|
428
|
-
* 3. If the peer is not dialable based on bootstrap status, don't dial
|
429
|
-
* 4. If the peer is already has an active dial attempt, or has been dialed before, don't dial it
|
430
|
-
* @returns true if the peer should be dialed, false otherwise
|
431
|
-
*/
|
432
|
-
async shouldDialPeer(peerId) {
|
433
|
-
const isConnected = this.libp2p.getConnections(peerId).length > 0;
|
434
|
-
if (isConnected) {
|
435
|
-
log.warn(`Already connected to peer ${peerId.toString()}. Not dialing.`);
|
436
|
-
return false;
|
437
|
-
}
|
438
|
-
const isSameShard = await this.isPeerOnSameShard(peerId);
|
439
|
-
if (!isSameShard) {
|
440
|
-
const shardInfo = await this.getPeerShardInfo(peerId);
|
441
|
-
log.warn(`Discovered peer ${peerId.toString()} with ShardInfo ${shardInfo} is not part of any of the configured pubsub topics (${this.pubsubTopics}).
|
442
|
-
Not dialing.`);
|
443
|
-
return false;
|
444
|
-
}
|
445
|
-
const isPreferredBasedOnBootstrap = await this.isPeerDialableBasedOnBootstrapStatus(peerId);
|
446
|
-
if (!isPreferredBasedOnBootstrap) {
|
447
|
-
log.warn(`Peer ${peerId.toString()} is not dialable based on bootstrap status. Not dialing.`);
|
448
|
-
return false;
|
449
|
-
}
|
450
|
-
const hasBeenDialed = this.dialAttemptsForPeer.has(peerId.toString());
|
451
|
-
if (hasBeenDialed) {
|
452
|
-
log.warn(`Peer ${peerId.toString()} has already been attempted dial before, or already has a dial attempt in progress, skipping dial`);
|
453
|
-
return false;
|
454
|
-
}
|
455
|
-
return true;
|
456
|
-
}
|
457
|
-
/**
|
458
|
-
* Checks if the peer is dialable based on the following conditions:
|
459
|
-
* 1. If the peer is a bootstrap peer, it is only dialable if the number of current bootstrap connections is less than the max allowed.
|
460
|
-
* 2. If the peer is not a bootstrap peer
|
461
|
-
*/
|
462
|
-
async isPeerDialableBasedOnBootstrapStatus(peerId) {
|
463
|
-
const tagNames = await this.getTagNamesForPeer(peerId);
|
464
|
-
const isBootstrap = tagNames.some((tagName) => tagName === Tags.BOOTSTRAP);
|
465
|
-
if (!isBootstrap) {
|
466
|
-
return true;
|
467
|
-
}
|
468
|
-
const currentBootstrapConnections = this.libp2p
|
469
|
-
.getConnections()
|
470
|
-
.filter((conn) => {
|
471
|
-
return conn.tags.find((name) => name === Tags.BOOTSTRAP);
|
472
|
-
}).length;
|
473
|
-
return currentBootstrapConnections < this.options.maxBootstrapPeersAllowed;
|
474
|
-
}
|
475
|
-
async dispatchDiscoveryEvent(peerId) {
|
476
|
-
const isBootstrap = (await this.getTagNamesForPeer(peerId)).includes(Tags.BOOTSTRAP);
|
477
|
-
this.dispatchEvent(new CustomEvent(isBootstrap
|
478
|
-
? EPeersByDiscoveryEvents.PEER_DISCOVERY_BOOTSTRAP
|
479
|
-
: EPeersByDiscoveryEvents.PEER_DISCOVERY_PEER_EXCHANGE, {
|
480
|
-
detail: peerId
|
481
|
-
}));
|
482
|
-
}
|
483
|
-
/**
|
484
|
-
* Fetches the tag names for a given peer
|
485
|
-
*/
|
486
|
-
async getTagNamesForPeer(peerId) {
|
487
|
-
try {
|
488
|
-
const peer = await this.libp2p.peerStore.get(peerId);
|
489
|
-
return Array.from(peer.tags.keys());
|
490
|
-
}
|
491
|
-
catch (error) {
|
492
|
-
log.error(`Failed to get peer ${peerId}, error: ${error}`);
|
493
|
-
return [];
|
494
|
-
}
|
495
|
-
}
|
496
|
-
async isPeerOnSameShard(peerId) {
|
497
|
-
const shardInfo = await this.getPeerShardInfo(peerId);
|
498
|
-
if (!shardInfo) {
|
499
|
-
return true;
|
500
|
-
}
|
501
|
-
const pubsubTopics = shardInfoToPubsubTopics(shardInfo);
|
502
|
-
const isTopicConfigured = pubsubTopics.some((topic) => this.pubsubTopics.includes(topic));
|
503
|
-
return isTopicConfigured;
|
504
|
-
}
|
505
|
-
async isPeerOnPubsubTopic(peerId, pubsubTopic) {
|
506
|
-
const shardInfo = await this.getPeerShardInfo(peerId);
|
507
|
-
if (!shardInfo) {
|
508
|
-
return true;
|
509
|
-
}
|
510
|
-
const pubsubTopics = shardInfoToPubsubTopics(shardInfo);
|
511
|
-
return pubsubTopics.some((t) => t === pubsubTopic);
|
512
|
-
}
|
513
|
-
async getPeerShardInfo(peerId) {
|
514
|
-
const peer = await this.libp2p.peerStore.get(peerId);
|
515
|
-
const shardInfoBytes = peer.metadata.get("shardInfo");
|
516
|
-
if (!shardInfoBytes)
|
517
|
-
return undefined;
|
518
|
-
return decodeRelayShard(shardInfoBytes);
|
519
|
-
}
|
520
|
-
startNetworkStatusListener() {
|
521
|
-
try {
|
522
|
-
globalThis.addEventListener("online", this.onEventHandlers["browser:network"]);
|
523
|
-
globalThis.addEventListener("offline", this.onEventHandlers["browser:network"]);
|
524
|
-
}
|
525
|
-
catch (err) {
|
526
|
-
log.error(`Failed to start network listener: ${err}`);
|
527
|
-
}
|
528
|
-
}
|
529
|
-
stopNetworkStatusListener() {
|
530
|
-
try {
|
531
|
-
globalThis.removeEventListener("online", this.onEventHandlers["browser:network"]);
|
532
|
-
globalThis.removeEventListener("offline", this.onEventHandlers["browser:network"]);
|
533
|
-
}
|
534
|
-
catch (err) {
|
535
|
-
log.error(`Failed to stop network listener: ${err}`);
|
536
|
-
}
|
537
|
-
}
|
538
|
-
setP2PNetworkConnected() {
|
539
|
-
if (!this.isP2PNetworkConnected) {
|
540
|
-
this.isP2PNetworkConnected = true;
|
541
|
-
this.dispatchWakuConnectionEvent();
|
542
|
-
}
|
543
|
-
}
|
544
|
-
setP2PNetworkDisconnected() {
|
545
|
-
if (this.isP2PNetworkConnected &&
|
546
|
-
this.libp2p.getConnections().length === 0) {
|
547
|
-
this.isP2PNetworkConnected = false;
|
548
|
-
this.dispatchWakuConnectionEvent();
|
549
|
-
}
|
550
|
-
}
|
551
|
-
dispatchWakuConnectionEvent() {
|
552
|
-
this.dispatchEvent(new CustomEvent(EConnectionStateEvents.CONNECTION_STATUS, {
|
553
|
-
detail: this.isConnected()
|
554
|
-
}));
|
128
|
+
async isPeerOnTopic(peerId, pubsubTopic) {
|
129
|
+
return this.shardReader.isPeerOnTopic(peerId, pubsubTopic);
|
555
130
|
}
|
556
131
|
}
|
557
132
|
//# sourceMappingURL=connection_manager.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"connection_manager.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/connection_manager.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"connection_manager.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/connection_manager.ts"],"names":[],"mappings":"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"}
|