@waku/core 0.0.26 → 0.0.27

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.
Files changed (55) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/bundle/{base_protocol-pDODy0G6.js → base_protocol-LhsIWF3-.js} +137 -89
  3. package/bundle/{browser-mTOOnVZp.js → browser-BQyFvtq6.js} +501 -700
  4. package/bundle/{index-cmONXM-V.js → index-8YyfzF9R.js} +96 -41
  5. package/bundle/index.js +3033 -21649
  6. package/bundle/lib/base_protocol.js +3 -3
  7. package/bundle/lib/message/version_0.js +3 -3
  8. package/bundle/lib/predefined_bootstrap_nodes.js +1 -1
  9. package/bundle/{version_0-LQTFNC7k.js → version_0-FXfzO8Km.js} +1246 -2444
  10. package/dist/.tsbuildinfo +1 -1
  11. package/dist/index.d.ts +1 -5
  12. package/dist/index.js +1 -5
  13. package/dist/index.js.map +1 -1
  14. package/dist/lib/base_protocol.d.ts +13 -10
  15. package/dist/lib/base_protocol.js +38 -22
  16. package/dist/lib/base_protocol.js.map +1 -1
  17. package/dist/lib/connection_manager.d.ts +2 -2
  18. package/dist/lib/connection_manager.js +16 -6
  19. package/dist/lib/connection_manager.js.map +1 -1
  20. package/dist/lib/filter/index.d.ts +1 -1
  21. package/dist/lib/filter/index.js +140 -82
  22. package/dist/lib/filter/index.js.map +1 -1
  23. package/dist/lib/filterPeers.d.ts +8 -5
  24. package/dist/lib/filterPeers.js +12 -5
  25. package/dist/lib/filterPeers.js.map +1 -1
  26. package/dist/lib/keep_alive_manager.d.ts +2 -3
  27. package/dist/lib/keep_alive_manager.js.map +1 -1
  28. package/dist/lib/light_push/index.js +3 -6
  29. package/dist/lib/light_push/index.js.map +1 -1
  30. package/dist/lib/metadata/index.d.ts +2 -2
  31. package/dist/lib/metadata/index.js +25 -11
  32. package/dist/lib/metadata/index.js.map +1 -1
  33. package/dist/lib/store/index.js +1 -3
  34. package/dist/lib/store/index.js.map +1 -1
  35. package/dist/lib/stream_manager.d.ts +2 -2
  36. package/dist/lib/stream_manager.js.map +1 -1
  37. package/dist/lib/wait_for_remote_peer.d.ts +1 -1
  38. package/dist/lib/wait_for_remote_peer.js +40 -10
  39. package/dist/lib/wait_for_remote_peer.js.map +1 -1
  40. package/package.json +14 -12
  41. package/src/index.ts +1 -6
  42. package/src/lib/base_protocol.ts +59 -34
  43. package/src/lib/connection_manager.ts +17 -10
  44. package/src/lib/filter/index.ts +228 -137
  45. package/src/lib/filterPeers.ts +15 -7
  46. package/src/lib/keep_alive_manager.ts +2 -3
  47. package/src/lib/light_push/index.ts +11 -10
  48. package/src/lib/metadata/index.ts +51 -19
  49. package/src/lib/store/index.ts +3 -6
  50. package/src/lib/stream_manager.ts +2 -3
  51. package/src/lib/wait_for_remote_peer.ts +58 -12
  52. package/dist/lib/waku.d.ts +0 -57
  53. package/dist/lib/waku.js +0 -130
  54. package/dist/lib/waku.js.map +0 -1
  55. package/src/lib/waku.ts +0 -214
@@ -1,6 +1,5 @@
1
- import { encodeRelayShard } from "@waku/enr";
2
1
  import { proto_metadata } from "@waku/proto";
3
- import { Logger } from "@waku/utils";
2
+ import { encodeRelayShard, Logger, shardInfoToPubsubTopics } from "@waku/utils";
4
3
  import all from "it-all";
5
4
  import * as lp from "it-length-prefixed";
6
5
  import { pipe } from "it-pipe";
@@ -11,10 +10,11 @@ export const MetadataCodec = "/vac/waku/metadata/1.0.0";
11
10
  class Metadata extends BaseProtocol {
12
11
  shardInfo;
13
12
  libp2pComponents;
13
+ handshakesConfirmed = new Set();
14
14
  constructor(shardInfo, libp2p) {
15
- super(MetadataCodec, libp2p.components);
16
- this.libp2pComponents = libp2p;
15
+ super(MetadataCodec, libp2p.components, log, shardInfoToPubsubTopics(shardInfo));
17
16
  this.shardInfo = shardInfo;
17
+ this.libp2pComponents = libp2p;
18
18
  void libp2p.registrar.handle(MetadataCodec, (streamData) => {
19
19
  void this.onRequest(streamData);
20
20
  });
@@ -28,12 +28,7 @@ class Metadata extends BaseProtocol {
28
28
  const encodedShardInfo = proto_metadata.WakuMetadataResponse.encode(this.shardInfo);
29
29
  const encodedResponse = await pipe([encodedShardInfo], lp.encode, stream, lp.decode, async (source) => await all(source));
30
30
  const remoteShardInfoResponse = this.decodeMetadataResponse(encodedResponse);
31
- // add or update the shardInfo to peer store
32
- await this.libp2pComponents.peerStore.merge(connection.remotePeer, {
33
- metadata: {
34
- shardInfo: encodeRelayShard(remoteShardInfoResponse)
35
- }
36
- });
31
+ await this.savePeerShardInfo(connection.remotePeer, remoteShardInfoResponse);
37
32
  }
38
33
  catch (error) {
39
34
  log.error("Error handling metadata request", error);
@@ -44,12 +39,22 @@ class Metadata extends BaseProtocol {
44
39
  */
45
40
  async query(peerId) {
46
41
  const request = proto_metadata.WakuMetadataRequest.encode(this.shardInfo);
47
- const peer = await this.getPeer(peerId);
42
+ const peer = await this.peerStore.get(peerId);
43
+ if (!peer) {
44
+ throw new Error(`Peer ${peerId.toString()} not found`);
45
+ }
48
46
  const stream = await this.getStream(peer);
49
47
  const encodedResponse = await pipe([request], lp.encode, stream, lp.decode, async (source) => await all(source));
50
48
  const decodedResponse = this.decodeMetadataResponse(encodedResponse);
49
+ await this.savePeerShardInfo(peerId, decodedResponse);
51
50
  return decodedResponse;
52
51
  }
52
+ async confirmOrAttemptHandshake(peerId) {
53
+ if (this.handshakesConfirmed.has(peerId.toString()))
54
+ return;
55
+ await this.query(peerId);
56
+ return;
57
+ }
53
58
  decodeMetadataResponse(encodedResponse) {
54
59
  const bytes = new Uint8ArrayList();
55
60
  encodedResponse.forEach((chunk) => {
@@ -60,6 +65,15 @@ class Metadata extends BaseProtocol {
60
65
  log.error("Error decoding metadata response");
61
66
  return response;
62
67
  }
68
+ async savePeerShardInfo(peerId, shardInfo) {
69
+ // add or update the shardInfo to peer store
70
+ await this.libp2pComponents.peerStore.merge(peerId, {
71
+ metadata: {
72
+ shardInfo: encodeRelayShard(shardInfo)
73
+ }
74
+ });
75
+ this.handshakesConfirmed.add(peerId.toString());
76
+ }
63
77
  }
64
78
  export function wakuMetadata(shardInfo) {
65
79
  return (components) => new Metadata(shardInfo, components);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/metadata/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/metadata/index.ts"],"names":[],"mappings":"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"}
@@ -21,11 +21,9 @@ export { PageDirection };
21
21
  * The Waku Store protocol can be used to retrieved historical messages.
22
22
  */
23
23
  class Store extends BaseProtocol {
24
- pubsubTopics;
25
24
  NUM_PEERS_PROTOCOL = 1;
26
25
  constructor(libp2p, options) {
27
- super(StoreCodec, libp2p.components);
28
- this.pubsubTopics = this.initializePubsubTopic(options);
26
+ super(StoreCodec, libp2p.components, log, options.pubsubTopics, options);
29
27
  }
30
28
  /**
31
29
  * Processes messages based on the provided callback and options.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/store/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/store/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import type { Stream } from "@libp2p/interface/connection";
2
- import { Peer } from "@libp2p/interface/peer-store";
1
+ import type { Stream } from "@libp2p/interface";
2
+ import { Peer } from "@libp2p/interface";
3
3
  import { Libp2p } from "@waku/interfaces";
4
4
  export declare class StreamManager {
5
5
  multicodec: string;
@@ -1 +1 @@
1
- {"version":3,"file":"stream_manager.js","sourceRoot":"","sources":["../../src/lib/stream_manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream_manager.js","sourceRoot":"","sources":["../../src/lib/stream_manager.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { Protocols } from "@waku/interfaces";
3
3
  /**
4
4
  * Wait for a remote peer to be ready given the passed protocols.
5
5
  * Must be used after attempting to connect to nodes, using
6
- * {@link @waku/core!WakuNode.dial} or a bootstrap method with
6
+ * {@link @waku/sdk!WakuNode.dial} or a bootstrap method with
7
7
  * {@link @waku/sdk!createLightNode}.
8
8
  *
9
9
  * If the passed protocols is a GossipSub protocol, then it resolves only once
@@ -5,7 +5,7 @@ const log = new Logger("wait-for-remote-peer");
5
5
  /**
6
6
  * Wait for a remote peer to be ready given the passed protocols.
7
7
  * Must be used after attempting to connect to nodes, using
8
- * {@link @waku/core!WakuNode.dial} or a bootstrap method with
8
+ * {@link @waku/sdk!WakuNode.dial} or a bootstrap method with
9
9
  * {@link @waku/sdk!createLightNode}.
10
10
  *
11
11
  * If the passed protocols is a GossipSub protocol, then it resolves only once
@@ -34,17 +34,17 @@ export async function waitForRemotePeer(waku, protocols, timeoutMs) {
34
34
  if (protocols.includes(Protocols.Store)) {
35
35
  if (!waku.store)
36
36
  throw new Error("Cannot wait for Store peer: protocol not mounted");
37
- promises.push(waitForConnectedPeer(waku.store));
37
+ promises.push(waitForConnectedPeer(waku.store, waku.libp2p.services.metadata));
38
38
  }
39
39
  if (protocols.includes(Protocols.LightPush)) {
40
40
  if (!waku.lightPush)
41
41
  throw new Error("Cannot wait for LightPush peer: protocol not mounted");
42
- promises.push(waitForConnectedPeer(waku.lightPush));
42
+ promises.push(waitForConnectedPeer(waku.lightPush, waku.libp2p.services.metadata));
43
43
  }
44
44
  if (protocols.includes(Protocols.Filter)) {
45
45
  if (!waku.filter)
46
46
  throw new Error("Cannot wait for Filter peer: protocol not mounted");
47
- promises.push(waitForConnectedPeer(waku.filter));
47
+ promises.push(waitForConnectedPeer(waku.filter, waku.libp2p.services.metadata));
48
48
  }
49
49
  if (timeoutMs) {
50
50
  await rejectOnTimeout(Promise.all(promises), timeoutMs, "Timed out waiting for a remote peer.");
@@ -55,19 +55,49 @@ export async function waitForRemotePeer(waku, protocols, timeoutMs) {
55
55
  }
56
56
  /**
57
57
  * Wait for a peer with the given protocol to be connected.
58
+ * If sharding is enabled on the node, it will also wait for the peer to be confirmed by the metadata service.
58
59
  */
59
- async function waitForConnectedPeer(protocol) {
60
+ async function waitForConnectedPeer(protocol, metadataService) {
60
61
  const codec = protocol.multicodec;
61
- const peers = await protocol.peers();
62
+ const peers = await protocol.connectedPeers();
62
63
  if (peers.length) {
63
- log.info(`${codec} peer found: `, peers[0].id.toString());
64
- return;
64
+ if (!metadataService) {
65
+ log.info(`${codec} peer found: `, peers[0].id.toString());
66
+ return;
67
+ }
68
+ // once a peer is connected, we need to confirm the metadata handshake with at least one of those peers if sharding is enabled
69
+ try {
70
+ await Promise.any(peers.map((peer) => metadataService.confirmOrAttemptHandshake(peer.id)));
71
+ return;
72
+ }
73
+ catch (e) {
74
+ if (e.code === "ERR_CONNECTION_BEING_CLOSED")
75
+ log.error(`Connection with the peer was closed and possibly because it's on a different shard. Error: ${e}`);
76
+ log.error(`Error waiting for handshake confirmation: ${e}`);
77
+ }
65
78
  }
79
+ log.info(`Waiting for ${codec} peer`);
80
+ // else we'll just wait for the next peer to connect
66
81
  await new Promise((resolve) => {
67
82
  const cb = (evt) => {
68
83
  if (evt.detail?.protocols?.includes(codec)) {
69
- protocol.removeLibp2pEventListener("peer:identify", cb);
70
- resolve();
84
+ if (metadataService) {
85
+ metadataService
86
+ .confirmOrAttemptHandshake(evt.detail.peerId)
87
+ .then(() => {
88
+ protocol.removeLibp2pEventListener("peer:identify", cb);
89
+ resolve();
90
+ })
91
+ .catch((e) => {
92
+ if (e.code === "ERR_CONNECTION_BEING_CLOSED")
93
+ log.error(`Connection with the peer was closed and possibly because it's on a different shard. Error: ${e}`);
94
+ log.error(`Error waiting for handshake confirmation: ${e}`);
95
+ });
96
+ }
97
+ else {
98
+ protocol.removeLibp2pEventListener("peer:identify", cb);
99
+ resolve();
100
+ }
71
101
  }
72
102
  };
73
103
  protocol.addLibp2pEventListener("peer:identify", cb);
@@ -1 +1 @@
1
- {"version":3,"file":"wait_for_remote_peer.js","sourceRoot":"","sources":["../../src/lib/wait_for_remote_peer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wait_for_remote_peer.js","sourceRoot":"","sources":["../../src/lib/wait_for_remote_peer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@waku/core",
3
- "version": "0.0.26",
3
+ "version": "0.0.27",
4
4
  "description": "TypeScript implementation of the Waku v2 protocol",
5
5
  "types": "./dist/index.d.ts",
6
6
  "module": "./dist/index.js",
@@ -72,14 +72,16 @@
72
72
  "node": ">=18"
73
73
  },
74
74
  "dependencies": {
75
+ "@libp2p/ping": "^1.0.11",
75
76
  "@noble/hashes": "^1.3.2",
76
- "@waku/enr": "^0.0.20",
77
- "@waku/interfaces": "0.0.21",
77
+ "@waku/enr": "^0.0.21",
78
+ "@waku/interfaces": "0.0.22",
79
+ "@waku/message-hash": "^0.1.11",
78
80
  "@waku/proto": "0.0.6",
79
- "@waku/utils": "0.0.14",
81
+ "@waku/utils": "0.0.15",
80
82
  "debug": "^4.3.4",
81
83
  "it-all": "^3.0.4",
82
- "it-length-prefixed": "^9.0.1",
84
+ "it-length-prefixed": "^9.0.4",
83
85
  "it-pipe": "^3.0.1",
84
86
  "p-event": "^6.0.0",
85
87
  "uint8arraylist": "^2.4.3",
@@ -92,22 +94,22 @@
92
94
  "@rollup/plugin-node-resolve": "^15.2.3",
93
95
  "@types/chai": "^4.3.11",
94
96
  "@types/debug": "^4.1.12",
95
- "@types/mocha": "^10.0.1",
96
- "@types/uuid": "^9.0.7",
97
+ "@types/mocha": "^10.0.6",
98
+ "@types/uuid": "^9.0.8",
97
99
  "@waku/build-utils": "*",
98
100
  "chai": "^4.3.10",
99
- "cspell": "^7.3.2",
100
- "fast-check": "^3.14.0",
101
+ "cspell": "^8.3.2",
102
+ "fast-check": "^3.15.1",
101
103
  "ignore-loader": "^0.1.2",
102
104
  "isomorphic-fetch": "^3.0.0",
103
- "mocha": "^10.2.0",
105
+ "mocha": "^10.3.0",
104
106
  "npm-run-all": "^4.1.5",
105
107
  "process": "^0.11.10",
106
- "rollup": "^4.6.0"
108
+ "rollup": "^4.12.0"
107
109
  },
108
110
  "peerDependencies": {
109
111
  "@multiformats/multiaddr": "^12.0.0",
110
- "libp2p": "^0.46.3"
112
+ "libp2p": "^1.1.2"
111
113
  },
112
114
  "peerDependenciesMeta": {
113
115
  "@multiformats/multiaddr": {
package/src/index.ts CHANGED
@@ -1,4 +1,3 @@
1
- export { DefaultUserAgent } from "./lib/waku.js";
2
1
  export { createEncoder, createDecoder } from "./lib/message/version_0.js";
3
2
  export type {
4
3
  Encoder,
@@ -7,15 +6,11 @@ export type {
7
6
  } from "./lib/message/version_0.js";
8
7
  export * as message from "./lib/message/index.js";
9
8
 
10
- export * as waku from "./lib/waku.js";
11
- export { WakuNode, WakuOptions } from "./lib/waku.js";
12
-
13
9
  export * as waku_filter from "./lib/filter/index.js";
14
10
  export { wakuFilter, FilterCodecs } from "./lib/filter/index.js";
15
11
 
16
12
  export * as waku_light_push from "./lib/light_push/index.js";
17
- export { LightPushCodec } from "./lib/light_push/index.js";
18
- export { wakuLightPush } from "./lib/light_push/index.js";
13
+ export { LightPushCodec, wakuLightPush } from "./lib/light_push/index.js";
19
14
 
20
15
  export * as waku_store from "./lib/store/index.js";
21
16
 
@@ -1,24 +1,23 @@
1
1
  import type { Libp2p } from "@libp2p/interface";
2
- import type { Stream } from "@libp2p/interface/connection";
3
- import type { PeerId } from "@libp2p/interface/peer-id";
4
- import { Peer, PeerStore } from "@libp2p/interface/peer-store";
2
+ import type { Peer, PeerStore, Stream } from "@libp2p/interface";
5
3
  import type {
6
4
  IBaseProtocol,
7
5
  Libp2pComponents,
8
6
  ProtocolCreateOptions,
9
7
  PubsubTopic
10
8
  } from "@waku/interfaces";
11
- import { DefaultPubsubTopic } from "@waku/interfaces";
12
- import { shardInfoToPubsubTopics } from "@waku/utils";
9
+ import { ensureShardingConfigured, Logger } from "@waku/utils";
13
10
  import {
14
- getConnectedPeersForProtocol,
11
+ getConnectedPeersForProtocolAndShard,
15
12
  getPeersForProtocol,
16
- selectPeerForProtocol
13
+ sortPeersByLatency
17
14
  } from "@waku/utils/libp2p";
18
15
 
19
- import { filterPeers } from "./filterPeers.js";
16
+ import { filterPeersByDiscovery } from "./filterPeers.js";
20
17
  import { StreamManager } from "./stream_manager.js";
21
18
 
19
+ const DEFAULT_NUM_PEERS_TO_USE = 3;
20
+
22
21
  /**
23
22
  * A class with predefined helpers, to be used as a base to implement Waku
24
23
  * Protocols.
@@ -26,12 +25,18 @@ import { StreamManager } from "./stream_manager.js";
26
25
  export class BaseProtocol implements IBaseProtocol {
27
26
  public readonly addLibp2pEventListener: Libp2p["addEventListener"];
28
27
  public readonly removeLibp2pEventListener: Libp2p["removeEventListener"];
28
+ readonly numPeersToUse: number;
29
29
  protected streamManager: StreamManager;
30
30
 
31
31
  constructor(
32
32
  public multicodec: string,
33
- private components: Libp2pComponents
33
+ private components: Libp2pComponents,
34
+ private log: Logger,
35
+ protected pubsubTopics: PubsubTopic[],
36
+ private options?: ProtocolCreateOptions
34
37
  ) {
38
+ this.numPeersToUse = options?.numPeersToUse ?? DEFAULT_NUM_PEERS_TO_USE;
39
+
35
40
  this.addLibp2pEventListener = components.events.addEventListener.bind(
36
41
  components.events
37
42
  );
@@ -60,26 +65,27 @@ export class BaseProtocol implements IBaseProtocol {
60
65
  * the class protocol. Waku may or may not be currently connected to these
61
66
  * peers.
62
67
  */
63
- public async peers(): Promise<Peer[]> {
68
+ public async allPeers(): Promise<Peer[]> {
64
69
  return getPeersForProtocol(this.peerStore, [this.multicodec]);
65
70
  }
66
71
 
67
- protected async getPeer(peerId?: PeerId): Promise<Peer> {
68
- const { peer } = await selectPeerForProtocol(
69
- this.peerStore,
70
- [this.multicodec],
71
- peerId
72
- );
73
- return peer;
72
+ public async connectedPeers(): Promise<Peer[]> {
73
+ const peers = await this.allPeers();
74
+ return peers.filter((peer) => {
75
+ return (
76
+ this.components.connectionManager.getConnections(peer.id).length > 0
77
+ );
78
+ });
74
79
  }
75
80
 
76
81
  /**
77
- * Retrieves a list of connected peers based on the specified criteria.
82
+ * Retrieves a list of connected peers that support the protocol. The list is sorted by latency.
78
83
  *
79
84
  * @param numPeers - The total number of peers to retrieve. If 0, all peers are returned.
80
85
  * @param maxBootstrapPeers - The maximum number of bootstrap peers to retrieve.
81
- * @returns A Promise that resolves to an array of peers based on the specified criteria.
82
- */
86
+
87
+ * @returns A list of peers that support the protocol sorted by latency.
88
+ */
83
89
  protected async getPeers(
84
90
  {
85
91
  numPeers,
@@ -92,23 +98,42 @@ export class BaseProtocol implements IBaseProtocol {
92
98
  numPeers: 0
93
99
  }
94
100
  ): Promise<Peer[]> {
95
- // Retrieve all connected peers that support the protocol
96
- const allPeersForProtocol = await getConnectedPeersForProtocol(
97
- this.components.connectionManager.getConnections(),
101
+ // Retrieve all connected peers that support the protocol & shard (if configured)
102
+ const connectedPeersForProtocolAndShard =
103
+ await getConnectedPeersForProtocolAndShard(
104
+ this.components.connectionManager.getConnections(),
105
+ this.peerStore,
106
+ [this.multicodec],
107
+ this.options?.shardInfo
108
+ ? ensureShardingConfigured(this.options.shardInfo).shardInfo
109
+ : undefined
110
+ );
111
+
112
+ // Filter the peers based on discovery & number of peers requested
113
+ const filteredPeers = filterPeersByDiscovery(
114
+ connectedPeersForProtocolAndShard,
115
+ numPeers,
116
+ maxBootstrapPeers
117
+ );
118
+
119
+ // Sort the peers by latency
120
+ const sortedFilteredPeers = await sortPeersByLatency(
98
121
  this.peerStore,
99
- [this.multicodec]
122
+ filteredPeers
100
123
  );
101
124
 
102
- // Filter the peers based on the specified criteria
103
- return filterPeers(allPeersForProtocol, numPeers, maxBootstrapPeers);
104
- }
125
+ if (sortedFilteredPeers.length === 0) {
126
+ this.log.warn(
127
+ "No peers found. Ensure you have a connection to the network."
128
+ );
129
+ }
105
130
 
106
- initializePubsubTopic(options?: ProtocolCreateOptions): PubsubTopic[] {
107
- return (
108
- options?.pubsubTopics ??
109
- (options?.shardInfo
110
- ? shardInfoToPubsubTopics(options.shardInfo)
111
- : [DefaultPubsubTopic])
112
- );
131
+ if (sortedFilteredPeers.length < numPeers) {
132
+ this.log.warn(
133
+ `Only ${sortedFilteredPeers.length} peers found. Requested ${numPeers}.`
134
+ );
135
+ }
136
+
137
+ return sortedFilteredPeers;
113
138
  }
114
139
  }
@@ -1,9 +1,5 @@
1
- import type { PeerId } from "@libp2p/interface/peer-id";
2
- import type { PeerInfo } from "@libp2p/interface/peer-info";
3
- import type { Peer } from "@libp2p/interface/peer-store";
4
- import type { PeerStore } from "@libp2p/interface/peer-store";
5
- import { CustomEvent, EventEmitter } from "@libp2p/interfaces/events";
6
- import { decodeRelayShard } from "@waku/enr";
1
+ import type { Peer, PeerId, PeerInfo, PeerStore } from "@libp2p/interface";
2
+ import { CustomEvent, TypedEventEmitter } from "@libp2p/interface";
7
3
  import {
8
4
  ConnectionManagerOptions,
9
5
  EConnectionStateEvents,
@@ -18,7 +14,7 @@ import {
18
14
  ShardInfo
19
15
  } from "@waku/interfaces";
20
16
  import { Libp2p, Tags } from "@waku/interfaces";
21
- import { shardInfoToPubsubTopics } from "@waku/utils";
17
+ import { decodeRelayShard, shardInfoToPubsubTopics } from "@waku/utils";
22
18
  import { Logger } from "@waku/utils";
23
19
 
24
20
  import { KeepAliveManager } from "./keep_alive_manager.js";
@@ -30,7 +26,7 @@ export const DEFAULT_MAX_DIAL_ATTEMPTS_FOR_PEER = 3;
30
26
  export const DEFAULT_MAX_PARALLEL_DIALS = 3;
31
27
 
32
28
  export class ConnectionManager
33
- extends EventEmitter<IPeersByDiscoveryEvents & IConnectionStateEvents>
29
+ extends TypedEventEmitter<IPeersByDiscoveryEvents & IConnectionStateEvents>
34
30
  implements IConnectionManager
35
31
  {
36
32
  private static instances = new Map<string, ConnectionManager>();
@@ -101,8 +97,11 @@ export class ConnectionManager
101
97
 
102
98
  const peersDiscoveredByBootstrap: Peer[] = [];
103
99
  const peersDiscoveredByPeerExchange: Peer[] = [];
100
+ const peersDiscoveredByLocal: Peer[] = [];
101
+
104
102
  const peersConnectedByBootstrap: Peer[] = [];
105
103
  const peersConnectedByPeerExchange: Peer[] = [];
104
+ const peersConnectedByLocal: Peer[] = [];
106
105
 
107
106
  for (const peer of peersDiscovered) {
108
107
  const tags = await this.getTagNamesForPeer(peer.id);
@@ -111,6 +110,8 @@ export class ConnectionManager
111
110
  peersDiscoveredByBootstrap.push(peer);
112
111
  } else if (tags.includes(Tags.PEER_EXCHANGE)) {
113
112
  peersDiscoveredByPeerExchange.push(peer);
113
+ } else if (tags.includes(Tags.LOCAL)) {
114
+ peersDiscoveredByLocal.push(peer);
114
115
  }
115
116
  }
116
117
 
@@ -122,17 +123,21 @@ export class ConnectionManager
122
123
  peersConnectedByBootstrap.push(peer);
123
124
  } else if (tags.includes(Tags.PEER_EXCHANGE)) {
124
125
  peersConnectedByPeerExchange.push(peer);
126
+ } else if (tags.includes(Tags.LOCAL)) {
127
+ peersConnectedByLocal.push(peer);
125
128
  }
126
129
  }
127
130
 
128
131
  return {
129
132
  DISCOVERED: {
130
133
  [Tags.BOOTSTRAP]: peersDiscoveredByBootstrap,
131
- [Tags.PEER_EXCHANGE]: peersDiscoveredByPeerExchange
134
+ [Tags.PEER_EXCHANGE]: peersDiscoveredByPeerExchange,
135
+ [Tags.LOCAL]: peersDiscoveredByLocal
132
136
  },
133
137
  CONNECTED: {
134
138
  [Tags.BOOTSTRAP]: peersConnectedByBootstrap,
135
- [Tags.PEER_EXCHANGE]: peersConnectedByPeerExchange
139
+ [Tags.PEER_EXCHANGE]: peersConnectedByPeerExchange,
140
+ [Tags.LOCAL]: peersConnectedByLocal
136
141
  }
137
142
  };
138
143
  }
@@ -380,6 +385,8 @@ export class ConnectionManager
380
385
  },
381
386
  "peer:connect": (evt: CustomEvent<PeerId>): void => {
382
387
  void (async () => {
388
+ log.info(`Connected to peer ${evt.detail.toString()}`);
389
+
383
390
  const peerId = evt.detail;
384
391
 
385
392
  this.keepAliveManager.start(