@waku/core 0.0.37-2ed5ddc.0 → 0.0.37-987c6cd.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.
@@ -1,5 +1,6 @@
1
1
  import { Logger } from "@waku/utils";
2
2
  import { ConnectionLimiter } from "./connection_limiter.js";
3
+ import { Dialer } from "./dialer.js";
3
4
  import { DiscoveryDialer } from "./discovery_dialer.js";
4
5
  import { KeepAliveManager } from "./keep_alive_manager.js";
5
6
  import { NetworkMonitor } from "./network_monitor.js";
@@ -13,6 +14,7 @@ export class ConnectionManager {
13
14
  pubsubTopics;
14
15
  keepAliveManager;
15
16
  discoveryDialer;
17
+ dialer;
16
18
  shardReader;
17
19
  networkMonitor;
18
20
  connectionLimiter;
@@ -39,16 +41,23 @@ export class ConnectionManager {
39
41
  libp2p: options.libp2p,
40
42
  networkConfig: options.networkConfig
41
43
  });
42
- this.discoveryDialer = new DiscoveryDialer({
44
+ this.dialer = new Dialer({
43
45
  libp2p: options.libp2p,
44
46
  shardReader: this.shardReader
45
47
  });
48
+ this.discoveryDialer = new DiscoveryDialer({
49
+ libp2p: options.libp2p,
50
+ dialer: this.dialer
51
+ });
46
52
  this.networkMonitor = new NetworkMonitor({
47
53
  libp2p: options.libp2p,
48
54
  events: options.events
49
55
  });
50
56
  this.connectionLimiter = new ConnectionLimiter({
51
57
  libp2p: options.libp2p,
58
+ events: options.events,
59
+ networkMonitor: this.networkMonitor,
60
+ dialer: this.dialer,
52
61
  options: this.options
53
62
  });
54
63
  }
@@ -69,11 +78,16 @@ export class ConnectionManager {
69
78
  }
70
79
  async dial(peer, protocolCodecs) {
71
80
  const ma = mapToPeerIdOrMultiaddr(peer);
72
- return this.libp2p.dialProtocol(ma, protocolCodecs);
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;
73
86
  }
74
87
  async hangUp(peer) {
75
88
  const peerId = mapToPeerId(peer);
76
89
  try {
90
+ log.info(`Dropping connection with peer ${peerId.toString()}`);
77
91
  await this.libp2p.hangUp(peerId);
78
92
  log.info(`Dropped connection with peer ${peerId.toString()}`);
79
93
  return true;
@@ -85,7 +99,9 @@ export class ConnectionManager {
85
99
  }
86
100
  async getConnectedPeers(codec) {
87
101
  const peerIDs = this.libp2p.getPeers();
102
+ log.info(`Getting connected peers for codec ${codec}`);
88
103
  if (peerIDs.length === 0) {
104
+ log.info(`No connected peers`);
89
105
  return [];
90
106
  }
91
107
  const peers = await Promise.all(peerIDs.map(async (id) => {
@@ -96,10 +112,12 @@ export class ConnectionManager {
96
112
  return null;
97
113
  }
98
114
  }));
99
- return peers
115
+ const result = peers
100
116
  .filter((p) => !!p)
101
117
  .filter((p) => (codec ? p.protocols.includes(codec) : true))
102
118
  .sort((left, right) => getPeerPing(left) - getPeerPing(right));
119
+ log.info(`Found ${result.length} connected peers for codec ${codec}`);
120
+ return result;
103
121
  }
104
122
  isTopicConfigured(pubsubTopic) {
105
123
  return this.pubsubTopics.includes(pubsubTopic);
@@ -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":"AAWA,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;AAW5C,MAAM,OAAO,iBAAiB;IACX,YAAY,CAAgB;IAE5B,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;QAC7B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAEzC,IAAI,CAAC,OAAO,GAAG;YACb,iBAAiB,EAAE,mCAAmC;YACtD,aAAa,EAAE,2BAA2B;YAC1C,cAAc,EAAE,4BAA4B;YAC5C,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;SAC9B,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,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,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,iBAAiB,CAAC,WAAwB;QAC/C,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,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"}
@@ -0,0 +1,28 @@
1
+ import type { PeerId } from "@libp2p/interface";
2
+ import { Libp2p } from "@waku/interfaces";
3
+ import { ShardReader } from "./shard_reader.js";
4
+ type DialerConstructorOptions = {
5
+ libp2p: Libp2p;
6
+ shardReader: ShardReader;
7
+ };
8
+ interface IDialer {
9
+ start(): void;
10
+ stop(): void;
11
+ dial(peerId: PeerId): Promise<void>;
12
+ }
13
+ export declare class Dialer implements IDialer {
14
+ private readonly libp2p;
15
+ private readonly shardReader;
16
+ private dialingQueue;
17
+ private dialHistory;
18
+ private dialingInterval;
19
+ private isProcessing;
20
+ constructor(options: DialerConstructorOptions);
21
+ start(): void;
22
+ stop(): void;
23
+ dial(peerId: PeerId): Promise<void>;
24
+ private processQueue;
25
+ private dialPeer;
26
+ private shouldSkipPeer;
27
+ }
28
+ export {};
@@ -0,0 +1,100 @@
1
+ import { Logger } from "@waku/utils";
2
+ const log = new Logger("dialer");
3
+ export class Dialer {
4
+ libp2p;
5
+ shardReader;
6
+ dialingQueue = [];
7
+ dialHistory = new Map();
8
+ dialingInterval = null;
9
+ isProcessing = false;
10
+ constructor(options) {
11
+ this.libp2p = options.libp2p;
12
+ this.shardReader = options.shardReader;
13
+ }
14
+ start() {
15
+ if (!this.dialingInterval) {
16
+ this.dialingInterval = setInterval(() => {
17
+ void this.processQueue();
18
+ }, 500);
19
+ }
20
+ this.dialHistory.clear();
21
+ }
22
+ stop() {
23
+ if (this.dialingInterval) {
24
+ clearInterval(this.dialingInterval);
25
+ this.dialingInterval = null;
26
+ }
27
+ this.dialHistory.clear();
28
+ }
29
+ async dial(peerId) {
30
+ const shouldSkip = await this.shouldSkipPeer(peerId);
31
+ if (shouldSkip) {
32
+ log.info(`Skipping peer: ${peerId}`);
33
+ return;
34
+ }
35
+ // If queue is empty and we're not currently processing, dial immediately
36
+ if (this.dialingQueue.length === 0 && !this.isProcessing) {
37
+ await this.dialPeer(peerId);
38
+ }
39
+ else {
40
+ // Add to queue
41
+ this.dialingQueue.push(peerId);
42
+ log.info(`Added peer to dialing queue, queue size: ${this.dialingQueue.length}`);
43
+ }
44
+ }
45
+ async processQueue() {
46
+ if (this.dialingQueue.length === 0 || this.isProcessing)
47
+ return;
48
+ this.isProcessing = true;
49
+ try {
50
+ const peersToDial = this.dialingQueue.slice(0, 3);
51
+ this.dialingQueue = this.dialingQueue.slice(peersToDial.length);
52
+ log.info(`Processing dial queue: dialing ${peersToDial.length} peers, ${this.dialingQueue.length} remaining in queue`);
53
+ await Promise.all(peersToDial.map((peerId) => this.dialPeer(peerId)));
54
+ }
55
+ finally {
56
+ this.isProcessing = false;
57
+ }
58
+ }
59
+ async dialPeer(peerId) {
60
+ try {
61
+ log.info(`Dialing peer from queue: ${peerId}`);
62
+ await this.libp2p.dial(peerId);
63
+ this.dialHistory.set(peerId.toString(), Date.now());
64
+ log.info(`Successfully dialed peer from queue: ${peerId}`);
65
+ }
66
+ catch (error) {
67
+ log.error(`Error dialing peer ${peerId}`, error);
68
+ }
69
+ }
70
+ async shouldSkipPeer(peerId) {
71
+ const hasConnection = this.libp2p.getPeers().some((p) => p.equals(peerId));
72
+ if (hasConnection) {
73
+ log.info(`Skipping peer ${peerId} - already connected`);
74
+ return true;
75
+ }
76
+ const lastDialed = this.dialHistory.get(peerId.toString());
77
+ if (lastDialed && Date.now() - lastDialed < 10_000) {
78
+ log.info(`Skipping peer ${peerId} - already dialed in the last 10 seconds`);
79
+ return true;
80
+ }
81
+ try {
82
+ const hasShardInfo = await this.shardReader.hasShardInfo(peerId);
83
+ if (!hasShardInfo) {
84
+ log.info(`Skipping peer ${peerId} - no shard info`);
85
+ return false;
86
+ }
87
+ const isOnSameShard = await this.shardReader.isPeerOnNetwork(peerId);
88
+ if (!isOnSameShard) {
89
+ log.info(`Skipping peer ${peerId} - not on same shard`);
90
+ return true;
91
+ }
92
+ return false;
93
+ }
94
+ catch (error) {
95
+ log.error(`Error checking shard info for peer ${peerId}`, error);
96
+ return true; // Skip peer when there's an error
97
+ }
98
+ }
99
+ }
100
+ //# sourceMappingURL=dialer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialer.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/dialer.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { Libp2p } from "libp2p";
2
- import type { ShardReader } from "./shard_reader.js";
2
+ import { Dialer } from "./dialer.js";
3
3
  type DiscoveryDialerConstructorOptions = {
4
4
  libp2p: Libp2p;
5
- shardReader: ShardReader;
5
+ dialer: Dialer;
6
6
  };
7
7
  interface IDiscoveryDialer {
8
8
  start(): void;
@@ -15,18 +15,12 @@ interface IDiscoveryDialer {
15
15
  */
16
16
  export declare class DiscoveryDialer implements IDiscoveryDialer {
17
17
  private readonly libp2p;
18
- private readonly shardReader;
19
- private dialingInterval;
20
- private dialingQueue;
21
- private dialHistory;
18
+ private readonly dialer;
22
19
  constructor(options: DiscoveryDialerConstructorOptions);
23
20
  start(): void;
24
21
  stop(): void;
25
22
  private onPeerDiscovery;
26
- private processQueue;
27
- private shouldSkipPeer;
28
23
  private updatePeerStore;
29
- private dialPeer;
30
24
  private getPeer;
31
25
  }
32
26
  export {};
@@ -7,89 +7,35 @@ const log = new Logger("discovery-dialer");
7
7
  */
8
8
  export class DiscoveryDialer {
9
9
  libp2p;
10
- shardReader;
11
- dialingInterval = null;
12
- dialingQueue = [];
13
- dialHistory = new Set();
10
+ dialer;
14
11
  constructor(options) {
15
12
  this.libp2p = options.libp2p;
16
- this.shardReader = options.shardReader;
13
+ this.dialer = options.dialer;
17
14
  this.onPeerDiscovery = this.onPeerDiscovery.bind(this);
18
15
  }
19
16
  start() {
20
- log.info("Starting discovery dialer");
21
17
  this.libp2p.addEventListener("peer:discovery", this.onPeerDiscovery);
22
- if (!this.dialingInterval) {
23
- this.dialingInterval = setInterval(() => {
24
- void this.processQueue();
25
- }, 500);
26
- log.info("Started dialing interval processor");
27
- }
28
- this.dialHistory.clear();
29
18
  }
30
19
  stop() {
31
- log.info("Stopping discovery dialer");
32
20
  this.libp2p.removeEventListener("peer:discovery", this.onPeerDiscovery);
33
- if (this.dialingInterval) {
34
- clearInterval(this.dialingInterval);
35
- this.dialingInterval = null;
36
- log.info("Stopped dialing interval processor");
37
- }
38
- this.dialHistory.clear();
39
21
  }
40
22
  async onPeerDiscovery(event) {
41
23
  const peerId = event.detail.id;
42
24
  log.info(`Discovered new peer: ${peerId}`);
43
25
  try {
44
- const shouldSkip = await this.shouldSkipPeer(peerId);
45
- if (shouldSkip) {
46
- log.info(`Skipping peer: ${peerId}`);
47
- return;
48
- }
49
26
  await this.updatePeerStore(peerId, event.detail.multiaddrs);
50
- if (this.dialingQueue.length === 0) {
51
- await this.dialPeer(peerId);
52
- }
53
- else {
54
- this.dialingQueue.push(peerId);
55
- log.info(`Added peer to dialing queue, queue size: ${this.dialingQueue.length}`);
56
- }
27
+ await this.dialer.dial(peerId);
57
28
  }
58
29
  catch (error) {
59
30
  log.error(`Error dialing peer ${peerId}`, error);
60
31
  }
61
32
  }
62
- async processQueue() {
63
- if (this.dialingQueue.length === 0)
64
- return;
65
- const peersToDial = this.dialingQueue.slice(0, 3);
66
- this.dialingQueue = this.dialingQueue.slice(peersToDial.length);
67
- log.info(`Processing dial queue: dialing ${peersToDial.length} peers, ${this.dialingQueue.length} remaining in queue`);
68
- await Promise.all(peersToDial.map(this.dialPeer));
69
- }
70
- async shouldSkipPeer(peerId) {
71
- if (this.dialHistory.has(peerId.toString())) {
72
- return true;
73
- }
74
- const hasShardInfo = await this.shardReader.hasShardInfo(peerId);
75
- if (!hasShardInfo) {
76
- return false;
77
- }
78
- const isOnSameShard = await this.shardReader.isPeerOnNetwork(peerId);
79
- if (!isOnSameShard) {
80
- log.info(`Skipping peer ${peerId} - not on same shard`);
81
- return true;
82
- }
83
- const hasConnection = this.libp2p.getPeers().some((p) => p.equals(peerId));
84
- if (hasConnection) {
85
- return true;
86
- }
87
- return false;
88
- }
89
33
  async updatePeerStore(peerId, multiaddrs) {
90
34
  try {
35
+ log.info(`Updating peer store for ${peerId}`);
91
36
  const peer = await this.getPeer(peerId);
92
37
  if (!peer) {
38
+ log.info(`Peer ${peerId} not found in store, saving`);
93
39
  await this.libp2p.peerStore.save(peerId, {
94
40
  multiaddrs: multiaddrs
95
41
  });
@@ -97,8 +43,10 @@ export class DiscoveryDialer {
97
43
  }
98
44
  const hasSameAddr = multiaddrs.every((addr) => peer.addresses.some((a) => a.multiaddr.equals(addr)));
99
45
  if (hasSameAddr) {
46
+ log.info(`Peer ${peerId} has same addresses in peer store, skipping`);
100
47
  return;
101
48
  }
49
+ log.info(`Merging peer ${peerId} addresses in peer store`);
102
50
  await this.libp2p.peerStore.merge(peerId, {
103
51
  multiaddrs: multiaddrs
104
52
  });
@@ -107,17 +55,6 @@ export class DiscoveryDialer {
107
55
  log.error(`Error updating peer store for ${peerId}`, error);
108
56
  }
109
57
  }
110
- async dialPeer(peerId) {
111
- try {
112
- log.info(`Dialing peer from queue: ${peerId}`);
113
- await this.libp2p.dial(peerId);
114
- this.dialHistory.add(peerId.toString());
115
- log.info(`Successfully dialed peer from queue: ${peerId}`);
116
- }
117
- catch (error) {
118
- log.error(`Error dialing peer ${peerId}`, error);
119
- }
120
- }
121
58
  async getPeer(peerId) {
122
59
  try {
123
60
  return await this.libp2p.peerStore.get(peerId);
@@ -1 +1 @@
1
- {"version":3,"file":"discovery_dialer.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/discovery_dialer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery_dialer.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/discovery_dialer.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,9 @@ type NetworkMonitorConstructorOptions = {
6
6
  interface INetworkMonitor {
7
7
  start(): void;
8
8
  stop(): void;
9
+ isConnected(): boolean;
10
+ isP2PConnected(): boolean;
11
+ isBrowserConnected(): boolean;
9
12
  }
10
13
  export declare class NetworkMonitor implements INetworkMonitor {
11
14
  private readonly libp2p;
@@ -14,7 +17,18 @@ export declare class NetworkMonitor implements INetworkMonitor {
14
17
  constructor(options: NetworkMonitorConstructorOptions);
15
18
  start(): void;
16
19
  stop(): void;
20
+ /**
21
+ * Returns true if the node is connected to the network via libp2p and browser.
22
+ */
17
23
  isConnected(): boolean;
24
+ /**
25
+ * Returns true if the node is connected to the network via libp2p.
26
+ */
27
+ isP2PConnected(): boolean;
28
+ /**
29
+ * Returns true if the node is connected to the network via browser.
30
+ */
31
+ isBrowserConnected(): boolean;
18
32
  private onConnectedEvent;
19
33
  private onDisconnectedEvent;
20
34
  private dispatchNetworkEvent;
@@ -31,7 +31,25 @@ export class NetworkMonitor {
31
31
  // ignore
32
32
  }
33
33
  }
34
+ /**
35
+ * Returns true if the node is connected to the network via libp2p and browser.
36
+ */
34
37
  isConnected() {
38
+ if (!this.isBrowserConnected()) {
39
+ return false;
40
+ }
41
+ return this.isP2PConnected();
42
+ }
43
+ /**
44
+ * Returns true if the node is connected to the network via libp2p.
45
+ */
46
+ isP2PConnected() {
47
+ return this.isNetworkConnected;
48
+ }
49
+ /**
50
+ * Returns true if the node is connected to the network via browser.
51
+ */
52
+ isBrowserConnected() {
35
53
  try {
36
54
  if (globalThis?.navigator && !globalThis?.navigator?.onLine) {
37
55
  return false;
@@ -40,7 +58,7 @@ export class NetworkMonitor {
40
58
  catch (err) {
41
59
  // ignore
42
60
  }
43
- return this.isNetworkConnected;
61
+ return true;
44
62
  }
45
63
  onConnectedEvent() {
46
64
  if (!this.isNetworkConnected) {
@@ -1 +1 @@
1
- {"version":3,"file":"network_monitor.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/network_monitor.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,cAAc;IACR,MAAM,CAAS;IACf,MAAM,CAAoB;IAEnC,kBAAkB,GAAY,KAAK,CAAC;IAE5C,YAAmB,OAAyC;QAC1D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE7B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAE1E,IAAI,CAAC;YACH,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjE,UAAU,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS;QACX,CAAC;IACH,CAAC;IAEM,IAAI;QACT,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAC7B,iBAAiB,EACjB,IAAI,CAAC,mBAAmB,CACzB,CAAC;QAEF,IAAI,CAAC;YACH,UAAU,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACpE,UAAU,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS;QACX,CAAC;IACH,CAAC;IAEM,WAAW;QAChB,IAAI,CAAC;YACH,IAAI,UAAU,EAAE,SAAS,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;gBAC5D,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,MAAM,CAAC,aAAa,CACvB,IAAI,WAAW,CAAU,iBAAiB,EAAE;YAC1C,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE;SAC3B,CAAC,CACH,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"network_monitor.js","sourceRoot":"","sources":["../../../src/lib/connection_manager/network_monitor.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@waku/core","version":"0.0.37-2ed5ddc.0","description":"TypeScript implementation of the Waku v2 protocol","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./lib/message/version_0":{"types":"./dist/lib/message/version_0.d.ts","import":"./dist/lib/message/version_0.js"}},"typesVersions":{"*":{"lib/*":["dist/lib/*"],"constants/*":["dist/constants/*"]}},"type":"module","homepage":"https://github.com/waku-org/js-waku/tree/master/packages/core#readme","repository":{"type":"git","url":"https://github.com/waku-org/js-waku.git"},"bugs":{"url":"https://github.com/waku-org/js-waku/issues"},"license":"MIT OR Apache-2.0","keywords":["waku","decentralised","communication","web3","ethereum","dapps"],"scripts":{"build":"run-s build:**","build:esm":"tsc","build:bundle":"rollup --config rollup.config.js","fix":"run-s fix:*","fix:lint":"eslint src *.js --fix","check":"run-s check:*","check:tsc":"tsc -p tsconfig.dev.json","check:lint":"eslint src *.js","check:spelling":"cspell \"{README.md,src/**/*.ts}\"","test":"NODE_ENV=test run-s test:*","test:node":"NODE_ENV=test TS_NODE_PROJECT=./tsconfig.dev.json mocha","test:browser":"NODE_ENV=test karma start karma.conf.cjs","watch:build":"tsc -p tsconfig.json -w","watch:test":"mocha --watch","prepublish":"npm run build","reset-hard":"git clean -dfx -e .idea && git reset --hard && npm i && npm run build"},"engines":{"node":">=22"},"dependencies":{"@waku/enr":"0.0.31-2ed5ddc.0","@waku/interfaces":"0.0.32-2ed5ddc.0","@libp2p/ping":"2.0.35","@waku/proto":"0.0.12-2ed5ddc.0","@waku/utils":"0.0.25-2ed5ddc.0","debug":"^4.3.4","@noble/hashes":"^1.3.2","it-all":"^3.0.4","it-length-prefixed":"^9.0.4","it-pipe":"^3.0.1","uint8arraylist":"^2.4.3","uuid":"^9.0.0"},"devDependencies":{"@libp2p/peer-id":"5.1.7","@libp2p/interface":"2.10.4","@multiformats/multiaddr":"^12.0.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.3","@types/chai":"^4.3.11","@types/debug":"^4.1.12","@types/mocha":"^10.0.6","@types/uuid":"^9.0.8","@waku/build-utils":"*","chai":"^4.3.10","sinon":"^18.0.0","cspell":"^8.6.1","fast-check":"^3.19.0","ignore-loader":"^0.1.2","isomorphic-fetch":"^3.0.0","mocha":"^10.3.0","npm-run-all":"^4.1.5","process":"^0.11.10","rollup":"^4.12.0"},"peerDependencies":{"@multiformats/multiaddr":"^12.0.0","libp2p":"2.8.11"},"peerDependenciesMeta":{"@multiformats/multiaddr":{"optional":true},"libp2p":{"optional":true}},"files":["dist","bundle","src/**/*.ts","!**/*.spec.*","!**/*.json","CHANGELOG.md","LICENSE","README.md"]}
1
+ {"name":"@waku/core","version":"0.0.37-987c6cd.0","description":"TypeScript implementation of the Waku v2 protocol","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./lib/message/version_0":{"types":"./dist/lib/message/version_0.d.ts","import":"./dist/lib/message/version_0.js"}},"typesVersions":{"*":{"lib/*":["dist/lib/*"],"constants/*":["dist/constants/*"]}},"type":"module","homepage":"https://github.com/waku-org/js-waku/tree/master/packages/core#readme","repository":{"type":"git","url":"https://github.com/waku-org/js-waku.git"},"bugs":{"url":"https://github.com/waku-org/js-waku/issues"},"license":"MIT OR Apache-2.0","keywords":["waku","decentralised","communication","web3","ethereum","dapps"],"scripts":{"build":"run-s build:**","build:esm":"tsc","build:bundle":"rollup --config rollup.config.js","fix":"run-s fix:*","fix:lint":"eslint src *.js --fix","check":"run-s check:*","check:tsc":"tsc -p tsconfig.dev.json","check:lint":"eslint src *.js","check:spelling":"cspell \"{README.md,src/**/*.ts}\"","test":"NODE_ENV=test run-s test:*","test:node":"NODE_ENV=test TS_NODE_PROJECT=./tsconfig.dev.json mocha","test:browser":"NODE_ENV=test karma start karma.conf.cjs","watch:build":"tsc -p tsconfig.json -w","watch:test":"mocha --watch","prepublish":"npm run build","reset-hard":"git clean -dfx -e .idea && git reset --hard && npm i && npm run build"},"engines":{"node":">=22"},"dependencies":{"@waku/enr":"0.0.31-987c6cd.0","@waku/interfaces":"0.0.32-987c6cd.0","@libp2p/ping":"2.0.35","@waku/proto":"0.0.12-987c6cd.0","@waku/utils":"0.0.25-987c6cd.0","debug":"^4.3.4","@noble/hashes":"^1.3.2","it-all":"^3.0.4","it-length-prefixed":"^9.0.4","it-pipe":"^3.0.1","uint8arraylist":"^2.4.3","uuid":"^9.0.0"},"devDependencies":{"@libp2p/peer-id":"5.1.7","@libp2p/interface":"2.10.4","@multiformats/multiaddr":"^12.0.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.3","@types/chai":"^4.3.11","@types/debug":"^4.1.12","@types/mocha":"^10.0.6","@types/uuid":"^9.0.8","@waku/build-utils":"*","chai":"^4.3.10","sinon":"^18.0.0","cspell":"^8.6.1","fast-check":"^3.19.0","ignore-loader":"^0.1.2","isomorphic-fetch":"^3.0.0","mocha":"^10.3.0","npm-run-all":"^4.1.5","process":"^0.11.10","rollup":"^4.12.0"},"peerDependencies":{"@multiformats/multiaddr":"^12.0.0","libp2p":"2.8.11"},"peerDependenciesMeta":{"@multiformats/multiaddr":{"optional":true},"libp2p":{"optional":true}},"files":["dist","bundle","src/**/*.ts","!**/*.spec.*","!**/*.json","CHANGELOG.md","LICENSE","README.md"]}
@@ -1,26 +1,29 @@
1
1
  import { Peer, PeerId } from "@libp2p/interface";
2
- import { ConnectionManagerOptions, Libp2p, Tags } from "@waku/interfaces";
2
+ import {
3
+ ConnectionManagerOptions,
4
+ IWakuEventEmitter,
5
+ Libp2p,
6
+ Tags
7
+ } from "@waku/interfaces";
3
8
  import { Logger } from "@waku/utils";
4
9
 
10
+ import { Dialer } from "./dialer.js";
11
+ import { NetworkMonitor } from "./network_monitor.js";
12
+
5
13
  const log = new Logger("connection-limiter");
6
14
 
7
15
  type Libp2pEventHandler<T> = (e: CustomEvent<T>) => void;
8
16
 
9
17
  type ConnectionLimiterConstructorOptions = {
10
18
  libp2p: Libp2p;
19
+ events: IWakuEventEmitter;
20
+ dialer: Dialer;
21
+ networkMonitor: NetworkMonitor;
11
22
  options: ConnectionManagerOptions;
12
23
  };
13
24
 
14
25
  interface IConnectionLimiter {
15
- /**
16
- * Dial all known peers because libp2p might have emitted `peer:discovery` before initialization
17
- * and listen to `peer:connect` and `peer:disconnect` events to manage connections.
18
- */
19
26
  start(): void;
20
-
21
- /**
22
- * Stop listening to `peer:connect` and `peer:disconnect` events.
23
- */
24
27
  stop(): void;
25
28
  }
26
29
 
@@ -31,12 +34,21 @@ interface IConnectionLimiter {
31
34
  */
32
35
  export class ConnectionLimiter implements IConnectionLimiter {
33
36
  private readonly libp2p: Libp2p;
37
+ private readonly events: IWakuEventEmitter;
38
+ private readonly networkMonitor: NetworkMonitor;
39
+ private readonly dialer: Dialer;
40
+
34
41
  private readonly options: ConnectionManagerOptions;
35
42
 
36
43
  public constructor(options: ConnectionLimiterConstructorOptions) {
37
44
  this.libp2p = options.libp2p;
45
+ this.events = options.events;
46
+ this.networkMonitor = options.networkMonitor;
47
+ this.dialer = options.dialer;
48
+
38
49
  this.options = options.options;
39
50
 
51
+ this.onWakuConnectionEvent = this.onWakuConnectionEvent.bind(this);
40
52
  this.onConnectedEvent = this.onConnectedEvent.bind(this);
41
53
  this.onDisconnectedEvent = this.onDisconnectedEvent.bind(this);
42
54
  }
@@ -45,6 +57,8 @@ export class ConnectionLimiter implements IConnectionLimiter {
45
57
  // dial all known peers because libp2p might have emitted `peer:discovery` before initialization
46
58
  void this.dialPeersFromStore();
47
59
 
60
+ this.events.addEventListener("waku:connection", this.onWakuConnectionEvent);
61
+
48
62
  this.libp2p.addEventListener(
49
63
  "peer:connect",
50
64
  this.onConnectedEvent as Libp2pEventHandler<PeerId>
@@ -68,6 +82,11 @@ export class ConnectionLimiter implements IConnectionLimiter {
68
82
  }
69
83
 
70
84
  public stop(): void {
85
+ this.events.removeEventListener(
86
+ "waku:connection",
87
+ this.onWakuConnectionEvent
88
+ );
89
+
71
90
  this.libp2p.removeEventListener(
72
91
  "peer:connect",
73
92
  this.onConnectedEvent as Libp2pEventHandler<PeerId>
@@ -79,6 +98,12 @@ export class ConnectionLimiter implements IConnectionLimiter {
79
98
  );
80
99
  }
81
100
 
101
+ private onWakuConnectionEvent(): void {
102
+ if (this.networkMonitor.isBrowserConnected()) {
103
+ void this.dialPeersFromStore();
104
+ }
105
+ }
106
+
82
107
  private async onConnectedEvent(evt: CustomEvent<PeerId>): Promise<void> {
83
108
  log.info(`Connected to peer ${evt.detail.toString()}`);
84
109
 
@@ -88,30 +113,45 @@ export class ConnectionLimiter implements IConnectionLimiter {
88
113
  const isBootstrap = tags.includes(Tags.BOOTSTRAP);
89
114
 
90
115
  if (!isBootstrap) {
116
+ log.info(
117
+ `Connected to peer ${peerId.toString()} is not a bootstrap peer`
118
+ );
91
119
  return;
92
120
  }
93
121
 
94
122
  if (await this.hasMoreThanMaxBootstrapConnections()) {
123
+ log.info(
124
+ `Connected to peer ${peerId.toString()} and node has more than max bootstrap connections ${this.options.maxBootstrapPeers}. Dropping connection.`
125
+ );
95
126
  await this.libp2p.hangUp(peerId);
96
127
  }
97
128
  }
98
129
 
99
130
  private async onDisconnectedEvent(): Promise<void> {
100
131
  if (this.libp2p.getConnections().length === 0) {
132
+ log.info(`No connections, dialing peers from store`);
101
133
  await this.dialPeersFromStore();
102
134
  }
103
135
  }
104
136
 
105
137
  private async dialPeersFromStore(): Promise<void> {
138
+ log.info(`Dialing peers from store`);
139
+
106
140
  const allPeers = await this.libp2p.peerStore.all();
107
141
  const allConnections = this.libp2p.getConnections();
108
142
 
143
+ log.info(
144
+ `Found ${allPeers.length} peers in store, and found ${allConnections.length} connections`
145
+ );
146
+
109
147
  const promises = allPeers
110
148
  .filter((p) => !allConnections.some((c) => c.remotePeer.equals(p.id)))
111
- .map((p) => this.libp2p.dial(p.id));
149
+ .map((p) => this.dialer.dial(p.id));
112
150
 
113
151
  try {
152
+ log.info(`Dialing ${promises.length} peers from store`);
114
153
  await Promise.all(promises);
154
+ log.info(`Dialed ${promises.length} peers from store`);
115
155
  } catch (error) {
116
156
  log.error(`Unexpected error while dialing peer store peers`, error);
117
157
  }