@waku/core 0.0.37-987c6cd.0 → 0.0.37-c24842a.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 +168 -66
- package/bundle/lib/message/version_0.js +1 -1
- package/bundle/{version_0-BpF0pNhc.js → version_0-BHaZD8Qu.js} +172 -26
- package/dist/.tsbuildinfo +1 -1
- package/dist/lib/connection_manager/connection_limiter.d.ts +12 -3
- package/dist/lib/connection_manager/connection_limiter.js +98 -45
- package/dist/lib/connection_manager/connection_limiter.js.map +1 -1
- package/dist/lib/connection_manager/connection_manager.d.ts +1 -4
- package/dist/lib/connection_manager/connection_manager.js +15 -7
- package/dist/lib/connection_manager/connection_manager.js.map +1 -1
- package/dist/lib/connection_manager/dialer.d.ts +7 -1
- package/dist/lib/connection_manager/dialer.js +41 -6
- package/dist/lib/connection_manager/dialer.js.map +1 -1
- package/dist/lib/connection_manager/discovery_dialer.d.ts +1 -1
- package/dist/lib/connection_manager/discovery_dialer.js.map +1 -1
- package/dist/lib/metadata/metadata.d.ts +2 -2
- package/dist/lib/metadata/metadata.js +14 -8
- package/dist/lib/metadata/metadata.js.map +1 -1
- package/package.json +1 -1
- package/src/lib/connection_manager/connection_limiter.ts +156 -65
- package/src/lib/connection_manager/connection_manager.ts +16 -12
- package/src/lib/connection_manager/dialer.ts +60 -7
- package/src/lib/connection_manager/discovery_dialer.ts +2 -4
- package/src/lib/metadata/metadata.ts +13 -12
@@ -1,6 +1,7 @@
|
|
1
|
-
import { Tags } from "@waku/interfaces";
|
1
|
+
import { CONNECTION_LOCKED_TAG, Tags } from "@waku/interfaces";
|
2
2
|
import { Logger } from "@waku/utils";
|
3
3
|
const log = new Logger("connection-limiter");
|
4
|
+
const DEFAULT_CONNECTION_MONITOR_INTERVAL = 5 * 1_000;
|
4
5
|
/**
|
5
6
|
* This class is responsible for limiting the number of connections to peers.
|
6
7
|
* It also dials all known peers because libp2p might have emitted `peer:discovery` before initialization
|
@@ -11,6 +12,7 @@ export class ConnectionLimiter {
|
|
11
12
|
events;
|
12
13
|
networkMonitor;
|
13
14
|
dialer;
|
15
|
+
connectionMonitorInterval = null;
|
14
16
|
options;
|
15
17
|
constructor(options) {
|
16
18
|
this.libp2p = options.libp2p;
|
@@ -19,14 +21,16 @@ export class ConnectionLimiter {
|
|
19
21
|
this.dialer = options.dialer;
|
20
22
|
this.options = options.options;
|
21
23
|
this.onWakuConnectionEvent = this.onWakuConnectionEvent.bind(this);
|
22
|
-
this.onConnectedEvent = this.onConnectedEvent.bind(this);
|
23
24
|
this.onDisconnectedEvent = this.onDisconnectedEvent.bind(this);
|
24
25
|
}
|
25
26
|
start() {
|
26
27
|
// dial all known peers because libp2p might have emitted `peer:discovery` before initialization
|
27
28
|
void this.dialPeersFromStore();
|
29
|
+
if (this.options.enableAutoRecovery &&
|
30
|
+
this.connectionMonitorInterval === null) {
|
31
|
+
this.connectionMonitorInterval = setInterval(() => void this.maintainConnections(), DEFAULT_CONNECTION_MONITOR_INTERVAL);
|
32
|
+
}
|
28
33
|
this.events.addEventListener("waku:connection", this.onWakuConnectionEvent);
|
29
|
-
this.libp2p.addEventListener("peer:connect", this.onConnectedEvent);
|
30
34
|
/**
|
31
35
|
* NOTE: Event is not being emitted on closing nor losing a connection.
|
32
36
|
* @see https://github.com/libp2p/js-libp2p/issues/939
|
@@ -42,27 +46,24 @@ export class ConnectionLimiter {
|
|
42
46
|
}
|
43
47
|
stop() {
|
44
48
|
this.events.removeEventListener("waku:connection", this.onWakuConnectionEvent);
|
45
|
-
this.libp2p.removeEventListener("peer:connect", this.onConnectedEvent);
|
46
49
|
this.libp2p.removeEventListener("peer:disconnect", this.onDisconnectedEvent);
|
50
|
+
if (this.connectionMonitorInterval) {
|
51
|
+
clearInterval(this.connectionMonitorInterval);
|
52
|
+
this.connectionMonitorInterval = null;
|
53
|
+
}
|
47
54
|
}
|
48
55
|
onWakuConnectionEvent() {
|
56
|
+
if (!this.options.enableAutoRecovery) {
|
57
|
+
log.info(`Auto recovery is disabled, skipping`);
|
58
|
+
return;
|
59
|
+
}
|
49
60
|
if (this.networkMonitor.isBrowserConnected()) {
|
50
61
|
void this.dialPeersFromStore();
|
51
62
|
}
|
52
63
|
}
|
53
|
-
async
|
54
|
-
|
55
|
-
|
56
|
-
const tags = await this.getTagsForPeer(peerId);
|
57
|
-
const isBootstrap = tags.includes(Tags.BOOTSTRAP);
|
58
|
-
if (!isBootstrap) {
|
59
|
-
log.info(`Connected to peer ${peerId.toString()} is not a bootstrap peer`);
|
60
|
-
return;
|
61
|
-
}
|
62
|
-
if (await this.hasMoreThanMaxBootstrapConnections()) {
|
63
|
-
log.info(`Connected to peer ${peerId.toString()} and node has more than max bootstrap connections ${this.options.maxBootstrapPeers}. Dropping connection.`);
|
64
|
-
await this.libp2p.hangUp(peerId);
|
65
|
-
}
|
64
|
+
async maintainConnections() {
|
65
|
+
await this.maintainConnectionsCount();
|
66
|
+
await this.maintainBootstrapConnections();
|
66
67
|
}
|
67
68
|
async onDisconnectedEvent() {
|
68
69
|
if (this.libp2p.getConnections().length === 0) {
|
@@ -70,54 +71,106 @@ export class ConnectionLimiter {
|
|
70
71
|
await this.dialPeersFromStore();
|
71
72
|
}
|
72
73
|
}
|
73
|
-
async
|
74
|
-
log.info(`
|
75
|
-
const
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
.
|
80
|
-
|
74
|
+
async maintainConnectionsCount() {
|
75
|
+
log.info(`Maintaining connections count`);
|
76
|
+
const connections = this.libp2p.getConnections();
|
77
|
+
if (connections.length <= this.options.maxConnections) {
|
78
|
+
log.info(`Node has less than max connections ${this.options.maxConnections}, trying to dial more peers`);
|
79
|
+
const peers = await this.getPrioritizedPeers();
|
80
|
+
if (peers.length === 0) {
|
81
|
+
log.info(`No peers to dial, node is utilizing all known peers`);
|
82
|
+
return;
|
83
|
+
}
|
84
|
+
const promises = peers
|
85
|
+
.slice(0, this.options.maxConnections - connections.length)
|
86
|
+
.map((p) => this.dialer.dial(p.id));
|
87
|
+
await Promise.all(promises);
|
88
|
+
return;
|
89
|
+
}
|
90
|
+
log.info(`Node has more than max connections ${this.options.maxConnections}, dropping connections`);
|
81
91
|
try {
|
82
|
-
|
92
|
+
const connectionsToDrop = connections
|
93
|
+
.filter((c) => !c.tags.includes(CONNECTION_LOCKED_TAG))
|
94
|
+
.slice(this.options.maxConnections);
|
95
|
+
if (connectionsToDrop.length === 0) {
|
96
|
+
log.info(`No connections to drop, skipping`);
|
97
|
+
return;
|
98
|
+
}
|
99
|
+
const promises = connectionsToDrop.map((c) => this.libp2p.hangUp(c.remotePeer));
|
83
100
|
await Promise.all(promises);
|
84
|
-
log.info(`
|
101
|
+
log.info(`Dropped ${connectionsToDrop.length} connections`);
|
85
102
|
}
|
86
103
|
catch (error) {
|
87
|
-
log.error(`Unexpected error while
|
104
|
+
log.error(`Unexpected error while maintaining connections`, error);
|
88
105
|
}
|
89
106
|
}
|
90
|
-
async
|
107
|
+
async maintainBootstrapConnections() {
|
108
|
+
log.info(`Maintaining bootstrap connections`);
|
109
|
+
const bootstrapPeers = await this.getBootstrapPeers();
|
110
|
+
if (bootstrapPeers.length <= this.options.maxBootstrapPeers) {
|
111
|
+
return;
|
112
|
+
}
|
91
113
|
try {
|
92
|
-
const
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
return bootstrapPeers.length > this.options.maxBootstrapPeers;
|
114
|
+
const peersToDrop = bootstrapPeers.slice(this.options.maxBootstrapPeers);
|
115
|
+
log.info(`Dropping ${peersToDrop.length} bootstrap connections because node has more than max bootstrap connections ${this.options.maxBootstrapPeers}`);
|
116
|
+
const promises = peersToDrop.map((p) => this.libp2p.hangUp(p.id));
|
117
|
+
await Promise.all(promises);
|
118
|
+
log.info(`Dropped ${peersToDrop.length} bootstrap connections`);
|
98
119
|
}
|
99
120
|
catch (error) {
|
100
|
-
log.error(`Unexpected error while
|
101
|
-
return false;
|
121
|
+
log.error(`Unexpected error while maintaining bootstrap connections`, error);
|
102
122
|
}
|
103
123
|
}
|
104
|
-
async
|
124
|
+
async dialPeersFromStore() {
|
125
|
+
log.info(`Dialing peers from store`);
|
105
126
|
try {
|
106
|
-
|
127
|
+
const peers = await this.getPrioritizedPeers();
|
128
|
+
if (peers.length === 0) {
|
129
|
+
log.info(`No peers to dial, skipping`);
|
130
|
+
return;
|
131
|
+
}
|
132
|
+
const promises = peers.map((p) => this.dialer.dial(p.id));
|
133
|
+
log.info(`Dialing ${peers.length} peers from store`);
|
134
|
+
await Promise.all(promises);
|
135
|
+
log.info(`Dialed ${promises.length} peers from store`);
|
107
136
|
}
|
108
137
|
catch (error) {
|
109
|
-
log.error(`
|
110
|
-
return null;
|
138
|
+
log.error(`Unexpected error while dialing peer store peers`, error);
|
111
139
|
}
|
112
140
|
}
|
113
|
-
|
141
|
+
/**
|
142
|
+
* Returns a list of peers ordered by priority:
|
143
|
+
* - bootstrap peers
|
144
|
+
* - peers from peer exchange
|
145
|
+
* - peers from local store (last because we are not sure that locally stored information is up to date)
|
146
|
+
*/
|
147
|
+
async getPrioritizedPeers() {
|
148
|
+
const allPeers = await this.libp2p.peerStore.all();
|
149
|
+
const allConnections = this.libp2p.getConnections();
|
150
|
+
log.info(`Found ${allPeers.length} peers in store, and found ${allConnections.length} connections`);
|
151
|
+
const notConnectedPeers = allPeers.filter((p) => !allConnections.some((c) => c.remotePeer.equals(p.id)) &&
|
152
|
+
p.addresses.some((a) => a.multiaddr.toString().includes("wss") ||
|
153
|
+
a.multiaddr.toString().includes("ws")));
|
154
|
+
const bootstrapPeers = notConnectedPeers.filter((p) => p.tags.has(Tags.BOOTSTRAP));
|
155
|
+
const peerExchangePeers = notConnectedPeers.filter((p) => p.tags.has(Tags.PEER_EXCHANGE));
|
156
|
+
const localStorePeers = notConnectedPeers.filter((p) => p.tags.has(Tags.LOCAL));
|
157
|
+
return [...bootstrapPeers, ...peerExchangePeers, ...localStorePeers];
|
158
|
+
}
|
159
|
+
async getBootstrapPeers() {
|
160
|
+
const peers = await Promise.all(this.libp2p
|
161
|
+
.getConnections()
|
162
|
+
.map((conn) => conn.remotePeer)
|
163
|
+
.map((id) => this.getPeer(id)));
|
164
|
+
const bootstrapPeers = peers.filter((peer) => peer && peer.tags.has(Tags.BOOTSTRAP));
|
165
|
+
return bootstrapPeers;
|
166
|
+
}
|
167
|
+
async getPeer(peerId) {
|
114
168
|
try {
|
115
|
-
|
116
|
-
return Array.from(peer.tags.keys());
|
169
|
+
return await this.libp2p.peerStore.get(peerId);
|
117
170
|
}
|
118
171
|
catch (error) {
|
119
172
|
log.error(`Failed to get peer ${peerId}, error: ${error}`);
|
120
|
-
return
|
173
|
+
return null;
|
121
174
|
}
|
122
175
|
}
|
123
176
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"connection_limiter.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/connection_limiter.ts"],"names":[],"mappings":"AACA,OAAO,
|
1
|
+
{"version":3,"file":"connection_limiter.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/connection_limiter.ts"],"names":[],"mappings":"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"}
|
@@ -1,17 +1,15 @@
|
|
1
1
|
import { type Peer, type PeerId, type Stream } from "@libp2p/interface";
|
2
2
|
import { MultiaddrInput } from "@multiformats/multiaddr";
|
3
|
-
import { ConnectionManagerOptions, IConnectionManager, IRelay, IWakuEventEmitter, NetworkConfig
|
3
|
+
import { ConnectionManagerOptions, IConnectionManager, IRelay, IWakuEventEmitter, NetworkConfig } from "@waku/interfaces";
|
4
4
|
import { Libp2p } from "@waku/interfaces";
|
5
5
|
type ConnectionManagerConstructorOptions = {
|
6
6
|
libp2p: Libp2p;
|
7
7
|
events: IWakuEventEmitter;
|
8
|
-
pubsubTopics: PubsubTopic[];
|
9
8
|
networkConfig: NetworkConfig;
|
10
9
|
relay?: IRelay;
|
11
10
|
config?: Partial<ConnectionManagerOptions>;
|
12
11
|
};
|
13
12
|
export declare class ConnectionManager implements IConnectionManager {
|
14
|
-
private readonly pubsubTopics;
|
15
13
|
private readonly keepAliveManager;
|
16
14
|
private readonly discoveryDialer;
|
17
15
|
private readonly dialer;
|
@@ -27,7 +25,6 @@ export declare class ConnectionManager implements IConnectionManager {
|
|
27
25
|
dial(peer: PeerId | MultiaddrInput, protocolCodecs: string[]): Promise<Stream>;
|
28
26
|
hangUp(peer: PeerId | MultiaddrInput): Promise<boolean>;
|
29
27
|
getConnectedPeers(codec?: string): Promise<Peer[]>;
|
30
|
-
isTopicConfigured(pubsubTopic: PubsubTopic): boolean;
|
31
28
|
hasShardInfo(peerId: PeerId): Promise<boolean>;
|
32
29
|
isPeerOnTopic(peerId: PeerId, pubsubTopic: string): Promise<boolean>;
|
33
30
|
}
|
@@ -7,11 +7,15 @@ import { NetworkMonitor } from "./network_monitor.js";
|
|
7
7
|
import { ShardReader } from "./shard_reader.js";
|
8
8
|
import { getPeerPing, mapToPeerId, mapToPeerIdOrMultiaddr } from "./utils.js";
|
9
9
|
const log = new Logger("connection-manager");
|
10
|
-
const DEFAULT_MAX_BOOTSTRAP_PEERS_ALLOWED =
|
10
|
+
const DEFAULT_MAX_BOOTSTRAP_PEERS_ALLOWED = 3;
|
11
11
|
const DEFAULT_PING_KEEP_ALIVE_SEC = 5 * 60;
|
12
12
|
const DEFAULT_RELAY_KEEP_ALIVE_SEC = 5 * 60;
|
13
|
+
const DEFAULT_ENABLE_AUTO_RECOVERY = true;
|
14
|
+
const DEFAULT_MAX_CONNECTIONS = 10;
|
15
|
+
const DEFAULT_MAX_DIALING_PEERS = 3;
|
16
|
+
const DEFAULT_FAILED_DIAL_COOLDOWN_SEC = 60;
|
17
|
+
const DEFAULT_DIAL_COOLDOWN_SEC = 10;
|
13
18
|
export class ConnectionManager {
|
14
|
-
pubsubTopics;
|
15
19
|
keepAliveManager;
|
16
20
|
discoveryDialer;
|
17
21
|
dialer;
|
@@ -22,11 +26,15 @@ export class ConnectionManager {
|
|
22
26
|
libp2p;
|
23
27
|
constructor(options) {
|
24
28
|
this.libp2p = options.libp2p;
|
25
|
-
this.pubsubTopics = options.pubsubTopics;
|
26
29
|
this.options = {
|
27
30
|
maxBootstrapPeers: DEFAULT_MAX_BOOTSTRAP_PEERS_ALLOWED,
|
31
|
+
maxConnections: DEFAULT_MAX_CONNECTIONS,
|
28
32
|
pingKeepAlive: DEFAULT_PING_KEEP_ALIVE_SEC,
|
29
33
|
relayKeepAlive: DEFAULT_RELAY_KEEP_ALIVE_SEC,
|
34
|
+
enableAutoRecovery: DEFAULT_ENABLE_AUTO_RECOVERY,
|
35
|
+
maxDialingPeers: DEFAULT_MAX_DIALING_PEERS,
|
36
|
+
failedDialCooldown: DEFAULT_FAILED_DIAL_COOLDOWN_SEC,
|
37
|
+
dialCooldown: DEFAULT_DIAL_COOLDOWN_SEC,
|
30
38
|
...options.config
|
31
39
|
};
|
32
40
|
this.keepAliveManager = new KeepAliveManager({
|
@@ -43,7 +51,8 @@ export class ConnectionManager {
|
|
43
51
|
});
|
44
52
|
this.dialer = new Dialer({
|
45
53
|
libp2p: options.libp2p,
|
46
|
-
shardReader: this.shardReader
|
54
|
+
shardReader: this.shardReader,
|
55
|
+
options: this.options
|
47
56
|
});
|
48
57
|
this.discoveryDialer = new DiscoveryDialer({
|
49
58
|
libp2p: options.libp2p,
|
@@ -62,12 +71,14 @@ export class ConnectionManager {
|
|
62
71
|
});
|
63
72
|
}
|
64
73
|
start() {
|
74
|
+
this.dialer.start();
|
65
75
|
this.networkMonitor.start();
|
66
76
|
this.discoveryDialer.start();
|
67
77
|
this.keepAliveManager.start();
|
68
78
|
this.connectionLimiter.start();
|
69
79
|
}
|
70
80
|
stop() {
|
81
|
+
this.dialer.stop();
|
71
82
|
this.networkMonitor.stop();
|
72
83
|
this.discoveryDialer.stop();
|
73
84
|
this.keepAliveManager.stop();
|
@@ -119,9 +130,6 @@ export class ConnectionManager {
|
|
119
130
|
log.info(`Found ${result.length} connected peers for codec ${codec}`);
|
120
131
|
return result;
|
121
132
|
}
|
122
|
-
isTopicConfigured(pubsubTopic) {
|
123
|
-
return this.pubsubTopics.includes(pubsubTopic);
|
124
|
-
}
|
125
133
|
async hasShardInfo(peerId) {
|
126
134
|
return this.shardReader.hasShardInfo(peerId);
|
127
135
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"connection_manager.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/connection_manager.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"connection_manager.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/connection_manager.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE9E,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAE7C,MAAM,mCAAmC,GAAG,CAAC,CAAC;AAC9C,MAAM,2BAA2B,GAAG,CAAC,GAAG,EAAE,CAAC;AAC3C,MAAM,4BAA4B,GAAG,CAAC,GAAG,EAAE,CAAC;AAC5C,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAC1C,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,MAAM,gCAAgC,GAAG,EAAE,CAAC;AAC5C,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAUrC,MAAM,OAAO,iBAAiB;IACX,gBAAgB,CAAmB;IACnC,eAAe,CAAkB;IACjC,MAAM,CAAS;IACf,WAAW,CAAc;IACzB,cAAc,CAAiB;IAC/B,iBAAiB,CAAoB;IAE9C,OAAO,CAA2B;IAClC,MAAM,CAAS;IAEvB,YAAmB,OAA4C;QAC7D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE7B,IAAI,CAAC,OAAO,GAAG;YACb,iBAAiB,EAAE,mCAAmC;YACtD,cAAc,EAAE,uBAAuB;YACvC,aAAa,EAAE,2BAA2B;YAC1C,cAAc,EAAE,4BAA4B;YAC5C,kBAAkB,EAAE,4BAA4B;YAChD,eAAe,EAAE,yBAAyB;YAC1C,kBAAkB,EAAE,gCAAgC;YACpD,YAAY,EAAE,yBAAyB;YACvC,GAAG,OAAO,CAAC,MAAM;SAClB,CAAC;QAEF,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;YAC3C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE;gBACP,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;gBACzC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;aAC5C;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;YACjC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC;YACzC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC;YACvC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC;YAC7C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;IACL,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAEM,IAAI;QACT,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,IAAI,CACf,IAA6B,EAC7B,cAAwB;QAExB,MAAM,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,mBAAmB,cAAc,EAAE,CAAC,CAAC;QAE3E,yFAAyF;QACzF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;QAClE,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,mBAAmB,cAAc,EAAE,CAAC,CAAC;QAE1E,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,IAA6B;QAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,iCAAiC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC/D,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC,gCAAgC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAE9D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CACP,uCAAuC,MAAM,CAAC,QAAQ,EAAE,MAAM,KAAK,EAAE,CACtE,CAAC;YAEF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,KAAc;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAEvC,GAAG,CAAC,IAAI,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;QAEvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC/B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACvB,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,MAAM,MAAM,GAAG,KAAK;aACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACrE,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAW,CAAC;QAE3E,GAAG,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,8BAA8B,KAAK,EAAE,CAAC,CAAC;QAEtE,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,MAAc;QACtC,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,aAAa,CACxB,MAAc,EACd,WAAmB;QAEnB,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC;CACF"}
|
@@ -1,9 +1,10 @@
|
|
1
1
|
import type { PeerId } from "@libp2p/interface";
|
2
|
-
import { Libp2p } from "@waku/interfaces";
|
2
|
+
import { ConnectionManagerOptions, Libp2p } from "@waku/interfaces";
|
3
3
|
import { ShardReader } from "./shard_reader.js";
|
4
4
|
type DialerConstructorOptions = {
|
5
5
|
libp2p: Libp2p;
|
6
6
|
shardReader: ShardReader;
|
7
|
+
options: ConnectionManagerOptions;
|
7
8
|
};
|
8
9
|
interface IDialer {
|
9
10
|
start(): void;
|
@@ -13,10 +14,13 @@ interface IDialer {
|
|
13
14
|
export declare class Dialer implements IDialer {
|
14
15
|
private readonly libp2p;
|
15
16
|
private readonly shardReader;
|
17
|
+
private readonly options;
|
16
18
|
private dialingQueue;
|
17
19
|
private dialHistory;
|
20
|
+
private failedDials;
|
18
21
|
private dialingInterval;
|
19
22
|
private isProcessing;
|
23
|
+
private isImmediateDialing;
|
20
24
|
constructor(options: DialerConstructorOptions);
|
21
25
|
start(): void;
|
22
26
|
stop(): void;
|
@@ -24,5 +28,7 @@ export declare class Dialer implements IDialer {
|
|
24
28
|
private processQueue;
|
25
29
|
private dialPeer;
|
26
30
|
private shouldSkipPeer;
|
31
|
+
private isRecentlyDialed;
|
32
|
+
private isRecentlyFailed;
|
27
33
|
}
|
28
34
|
export {};
|
@@ -3,28 +3,36 @@ const log = new Logger("dialer");
|
|
3
3
|
export class Dialer {
|
4
4
|
libp2p;
|
5
5
|
shardReader;
|
6
|
+
options;
|
6
7
|
dialingQueue = [];
|
7
8
|
dialHistory = new Map();
|
9
|
+
failedDials = new Map();
|
8
10
|
dialingInterval = null;
|
9
11
|
isProcessing = false;
|
12
|
+
isImmediateDialing = false;
|
10
13
|
constructor(options) {
|
11
14
|
this.libp2p = options.libp2p;
|
12
15
|
this.shardReader = options.shardReader;
|
16
|
+
this.options = options.options;
|
13
17
|
}
|
14
18
|
start() {
|
19
|
+
log.info("Starting dialer");
|
15
20
|
if (!this.dialingInterval) {
|
16
21
|
this.dialingInterval = setInterval(() => {
|
17
22
|
void this.processQueue();
|
18
23
|
}, 500);
|
19
24
|
}
|
20
25
|
this.dialHistory.clear();
|
26
|
+
this.failedDials.clear();
|
21
27
|
}
|
22
28
|
stop() {
|
29
|
+
log.info("Stopping dialer");
|
23
30
|
if (this.dialingInterval) {
|
24
31
|
clearInterval(this.dialingInterval);
|
25
32
|
this.dialingInterval = null;
|
26
33
|
}
|
27
34
|
this.dialHistory.clear();
|
35
|
+
this.failedDials.clear();
|
28
36
|
}
|
29
37
|
async dial(peerId) {
|
30
38
|
const shouldSkip = await this.shouldSkipPeer(peerId);
|
@@ -32,22 +40,28 @@ export class Dialer {
|
|
32
40
|
log.info(`Skipping peer: ${peerId}`);
|
33
41
|
return;
|
34
42
|
}
|
43
|
+
const isEmptyQueue = this.dialingQueue.length === 0;
|
44
|
+
const isNotDialing = !this.isProcessing && !this.isImmediateDialing;
|
35
45
|
// If queue is empty and we're not currently processing, dial immediately
|
36
|
-
if (
|
46
|
+
if (isEmptyQueue && isNotDialing) {
|
47
|
+
this.isImmediateDialing = true;
|
48
|
+
log.info("Dialed peer immediately");
|
37
49
|
await this.dialPeer(peerId);
|
50
|
+
this.isImmediateDialing = false;
|
51
|
+
log.info("Released immediate dial lock");
|
38
52
|
}
|
39
53
|
else {
|
40
|
-
// Add to queue
|
41
54
|
this.dialingQueue.push(peerId);
|
42
55
|
log.info(`Added peer to dialing queue, queue size: ${this.dialingQueue.length}`);
|
43
56
|
}
|
44
57
|
}
|
45
58
|
async processQueue() {
|
46
|
-
if (this.dialingQueue.length === 0 || this.isProcessing)
|
59
|
+
if (this.dialingQueue.length === 0 || this.isProcessing) {
|
47
60
|
return;
|
61
|
+
}
|
48
62
|
this.isProcessing = true;
|
49
63
|
try {
|
50
|
-
const peersToDial = this.dialingQueue.slice(0,
|
64
|
+
const peersToDial = this.dialingQueue.slice(0, this.options.maxDialingPeers);
|
51
65
|
this.dialingQueue = this.dialingQueue.slice(peersToDial.length);
|
52
66
|
log.info(`Processing dial queue: dialing ${peersToDial.length} peers, ${this.dialingQueue.length} remaining in queue`);
|
53
67
|
await Promise.all(peersToDial.map((peerId) => this.dialPeer(peerId)));
|
@@ -61,10 +75,12 @@ export class Dialer {
|
|
61
75
|
log.info(`Dialing peer from queue: ${peerId}`);
|
62
76
|
await this.libp2p.dial(peerId);
|
63
77
|
this.dialHistory.set(peerId.toString(), Date.now());
|
78
|
+
this.failedDials.delete(peerId.toString());
|
64
79
|
log.info(`Successfully dialed peer from queue: ${peerId}`);
|
65
80
|
}
|
66
81
|
catch (error) {
|
67
82
|
log.error(`Error dialing peer ${peerId}`, error);
|
83
|
+
this.failedDials.set(peerId.toString(), Date.now());
|
68
84
|
}
|
69
85
|
}
|
70
86
|
async shouldSkipPeer(peerId) {
|
@@ -73,11 +89,14 @@ export class Dialer {
|
|
73
89
|
log.info(`Skipping peer ${peerId} - already connected`);
|
74
90
|
return true;
|
75
91
|
}
|
76
|
-
|
77
|
-
if (lastDialed && Date.now() - lastDialed < 10_000) {
|
92
|
+
if (this.isRecentlyDialed(peerId)) {
|
78
93
|
log.info(`Skipping peer ${peerId} - already dialed in the last 10 seconds`);
|
79
94
|
return true;
|
80
95
|
}
|
96
|
+
if (this.isRecentlyFailed(peerId)) {
|
97
|
+
log.info(`Skipping peer ${peerId} - recently failed to dial`);
|
98
|
+
return true;
|
99
|
+
}
|
81
100
|
try {
|
82
101
|
const hasShardInfo = await this.shardReader.hasShardInfo(peerId);
|
83
102
|
if (!hasShardInfo) {
|
@@ -96,5 +115,21 @@ export class Dialer {
|
|
96
115
|
return true; // Skip peer when there's an error
|
97
116
|
}
|
98
117
|
}
|
118
|
+
isRecentlyDialed(peerId) {
|
119
|
+
const lastDialed = this.dialHistory.get(peerId.toString());
|
120
|
+
if (lastDialed &&
|
121
|
+
Date.now() - lastDialed < this.options.dialCooldown * 1000) {
|
122
|
+
return true;
|
123
|
+
}
|
124
|
+
return false;
|
125
|
+
}
|
126
|
+
isRecentlyFailed(peerId) {
|
127
|
+
const lastFailed = this.failedDials.get(peerId.toString());
|
128
|
+
if (lastFailed &&
|
129
|
+
Date.now() - lastFailed < this.options.failedDialCooldown * 1000) {
|
130
|
+
return true;
|
131
|
+
}
|
132
|
+
return false;
|
133
|
+
}
|
99
134
|
}
|
100
135
|
//# sourceMappingURL=dialer.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"dialer.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/dialer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"dialer.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/dialer.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"discovery_dialer.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/discovery_dialer.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"discovery_dialer.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/discovery_dialer.ts"],"names":[],"mappings":"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"}
|
@@ -1,3 +1,3 @@
|
|
1
|
-
import { type IMetadata, type Libp2pComponents
|
1
|
+
import { type ClusterId, type IMetadata, type Libp2pComponents } from "@waku/interfaces";
|
2
2
|
export declare const MetadataCodec = "/vac/waku/metadata/1.0.0";
|
3
|
-
export declare function wakuMetadata(
|
3
|
+
export declare function wakuMetadata(clusterId: ClusterId): (components: Libp2pComponents) => IMetadata;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { ProtocolError } from "@waku/interfaces";
|
2
2
|
import { proto_metadata } from "@waku/proto";
|
3
|
-
import { encodeRelayShard, Logger
|
3
|
+
import { encodeRelayShard, Logger } from "@waku/utils";
|
4
4
|
import all from "it-all";
|
5
5
|
import * as lp from "it-length-prefixed";
|
6
6
|
import { pipe } from "it-pipe";
|
@@ -9,13 +9,13 @@ import { StreamManager } from "../stream_manager/index.js";
|
|
9
9
|
const log = new Logger("metadata");
|
10
10
|
export const MetadataCodec = "/vac/waku/metadata/1.0.0";
|
11
11
|
class Metadata {
|
12
|
-
|
12
|
+
clusterId;
|
13
13
|
streamManager;
|
14
14
|
libp2pComponents;
|
15
15
|
handshakesConfirmed = new Map();
|
16
16
|
multicodec = MetadataCodec;
|
17
|
-
constructor(
|
18
|
-
this.
|
17
|
+
constructor(clusterId, libp2p) {
|
18
|
+
this.clusterId = clusterId;
|
19
19
|
this.streamManager = new StreamManager(MetadataCodec, libp2p);
|
20
20
|
this.libp2pComponents = libp2p;
|
21
21
|
void libp2p.registrar.handle(MetadataCodec, (streamData) => {
|
@@ -26,7 +26,10 @@ class Metadata {
|
|
26
26
|
* Make a metadata query to a peer
|
27
27
|
*/
|
28
28
|
async query(peerId) {
|
29
|
-
const request = proto_metadata.WakuMetadataRequest.encode(
|
29
|
+
const request = proto_metadata.WakuMetadataRequest.encode({
|
30
|
+
clusterId: this.clusterId,
|
31
|
+
shards: [] // Only services node need to provide shards
|
32
|
+
});
|
30
33
|
const peer = await this.libp2pComponents.peerStore.get(peerId);
|
31
34
|
if (!peer) {
|
32
35
|
return {
|
@@ -75,7 +78,10 @@ class Metadata {
|
|
75
78
|
async onRequest(streamData) {
|
76
79
|
try {
|
77
80
|
const { stream, connection } = streamData;
|
78
|
-
const encodedShardInfo = proto_metadata.WakuMetadataResponse.encode(
|
81
|
+
const encodedShardInfo = proto_metadata.WakuMetadataResponse.encode({
|
82
|
+
clusterId: this.clusterId,
|
83
|
+
shards: [] // Only service nodes need to provide shards
|
84
|
+
});
|
79
85
|
const encodedResponse = await pipe([encodedShardInfo], lp.encode, stream, lp.decode, async (source) => await all(source));
|
80
86
|
const { error, shardInfo } = this.decodeMetadataResponse(encodedResponse);
|
81
87
|
if (error) {
|
@@ -115,7 +121,7 @@ class Metadata {
|
|
115
121
|
this.handshakesConfirmed.set(peerId.toString(), shardInfo);
|
116
122
|
}
|
117
123
|
}
|
118
|
-
export function wakuMetadata(
|
119
|
-
return (components) => new Metadata(
|
124
|
+
export function wakuMetadata(clusterId) {
|
125
|
+
return (components) => new Metadata(clusterId, components);
|
120
126
|
}
|
121
127
|
//# sourceMappingURL=metadata.js.map
|