From f8213e425f3fbb3c4731fcd8b3d4ce3edb784fa2 Mon Sep 17 00:00:00 2001 From: danisharora099 Date: Mon, 19 Feb 2024 18:38:15 +0530 Subject: [PATCH] handle local discovery for events --- packages/core/src/lib/connection_manager.ts | 74 +++++++++++++------ packages/interfaces/src/connection_manager.ts | 6 +- .../tests/connection-mananger/events.spec.ts | 1 + 3 files changed, 59 insertions(+), 22 deletions(-) diff --git a/packages/core/src/lib/connection_manager.ts b/packages/core/src/lib/connection_manager.ts index 1692154f5c..96273b4b6d 100644 --- a/packages/core/src/lib/connection_manager.ts +++ b/packages/core/src/lib/connection_manager.ts @@ -395,11 +395,26 @@ export class ConnectionManager this.libp2p.peerStore ); - const isBootstrap = (await this.getTagNamesForPeer(peerId)).includes( - Tags.BOOTSTRAP - ); + // const isBootstrap = (await this.getTagNamesForPeer(peerId)).includes( + // Tags.BOOTSTRAP + // ); + const tags = await this.getTagNamesForPeer(peerId); - if (isBootstrap) { + let tag: Tags; + if (tags.includes(Tags.BOOTSTRAP)) { + tag = Tags.BOOTSTRAP; + } else if (tags.includes(Tags.PEER_EXCHANGE)) { + tag = Tags.PEER_EXCHANGE; + } else if (tags.includes(Tags.LOCAL)) { + tag = Tags.LOCAL; + } else { + log.warn( + `Peer ${peerId.toString()} has no discovery tag. Not dispatching discovery event` + ); + return; + } + + if (tag === Tags.BOOTSTRAP) { const bootstrapConnections = this.libp2p .getConnections() .filter((conn) => conn.tags.includes(Tags.BOOTSTRAP)); @@ -420,13 +435,23 @@ export class ConnectionManager ); } } else { + let discoveryTagName: EPeersByDiscoveryEvents; + if (tag === Tags.PEER_EXCHANGE) { + discoveryTagName = + EPeersByDiscoveryEvents.PEER_CONNECT_PEER_EXCHANGE; + } else if (tag === Tags.LOCAL) { + discoveryTagName = EPeersByDiscoveryEvents.PEER_CONNECT_LOCAL; + } else { + log.warn( + `Peer ${peerId.toString()} has no discovery tag. Not dispatching discovery event` + ); + return; + } + this.dispatchEvent( - new CustomEvent( - EPeersByDiscoveryEvents.PEER_CONNECT_PEER_EXCHANGE, - { - detail: peerId - } - ) + new CustomEvent(discoveryTagName, { + detail: peerId + }) ); } this.toggleOnline(); @@ -518,19 +543,26 @@ export class ConnectionManager } private async dispatchDiscoveryEvent(peerId: PeerId): Promise { - const isBootstrap = (await this.getTagNamesForPeer(peerId)).includes( - Tags.BOOTSTRAP - ); + const tags = await this.getTagNamesForPeer(peerId); + + let tag: Tags; + if (tags.includes(Tags.BOOTSTRAP)) { + tag = Tags.BOOTSTRAP; + } else if (tags.includes(Tags.PEER_EXCHANGE)) { + tag = Tags.PEER_EXCHANGE; + } else if (tags.includes(Tags.LOCAL)) { + tag = Tags.LOCAL; + } else { + log.warn( + `Peer ${peerId.toString()} has no discovery tag. Not dispatching discovery event` + ); + return; + } this.dispatchEvent( - new CustomEvent( - isBootstrap - ? EPeersByDiscoveryEvents.PEER_DISCOVERY_BOOTSTRAP - : EPeersByDiscoveryEvents.PEER_DISCOVERY_PEER_EXCHANGE, - { - detail: peerId - } - ) + new CustomEvent(tag, { + detail: peerId + }) ); } diff --git a/packages/interfaces/src/connection_manager.ts b/packages/interfaces/src/connection_manager.ts index 486a48d3d4..c7186cace0 100644 --- a/packages/interfaces/src/connection_manager.ts +++ b/packages/interfaces/src/connection_manager.ts @@ -26,15 +26,19 @@ export interface ConnectionManagerOptions { export enum EPeersByDiscoveryEvents { PEER_DISCOVERY_BOOTSTRAP = "peer:discovery:bootstrap", PEER_DISCOVERY_PEER_EXCHANGE = "peer:discovery:peer-exchange", + PEER_DISCOVERY_LOCAL = "peer:discovery:local", PEER_CONNECT_BOOTSTRAP = "peer:connected:bootstrap", - PEER_CONNECT_PEER_EXCHANGE = "peer:connected:peer-exchange" + PEER_CONNECT_PEER_EXCHANGE = "peer:connected:peer-exchange", + PEER_CONNECT_LOCAL = "peer:connected:local" } export interface IPeersByDiscoveryEvents { [EPeersByDiscoveryEvents.PEER_DISCOVERY_BOOTSTRAP]: CustomEvent; [EPeersByDiscoveryEvents.PEER_DISCOVERY_PEER_EXCHANGE]: CustomEvent; + [EPeersByDiscoveryEvents.PEER_DISCOVERY_LOCAL]: CustomEvent; [EPeersByDiscoveryEvents.PEER_CONNECT_BOOTSTRAP]: CustomEvent; [EPeersByDiscoveryEvents.PEER_CONNECT_PEER_EXCHANGE]: CustomEvent; + [EPeersByDiscoveryEvents.PEER_CONNECT_LOCAL]: CustomEvent; } export interface PeersByDiscoveryResult { diff --git a/packages/tests/tests/connection-mananger/events.spec.ts b/packages/tests/tests/connection-mananger/events.spec.ts index 637c355f97..5b89782869 100644 --- a/packages/tests/tests/connection-mananger/events.spec.ts +++ b/packages/tests/tests/connection-mananger/events.spec.ts @@ -26,6 +26,7 @@ describe("Events", function () { await tearDownNodes([], waku); }); + //TODO: add tests for local discovery describe("peer:discovery", () => { it("should emit `peer:discovery:bootstrap` event when a peer is discovered", async function () { const peerIdBootstrap = await createSecp256k1PeerId();