diff --git a/packages/sdk/src/create/libp2p.ts b/packages/sdk/src/create/libp2p.ts index 8f91d3660b..98b99844de 100644 --- a/packages/sdk/src/create/libp2p.ts +++ b/packages/sdk/src/create/libp2p.ts @@ -1,10 +1,10 @@ import { noise } from "@chainsafe/libp2p-noise"; import { bootstrap } from "@libp2p/bootstrap"; import { identify } from "@libp2p/identify"; +import type { ConnectionGater } from "@libp2p/interface"; import { mplex } from "@libp2p/mplex"; import { ping } from "@libp2p/ping"; import { webSockets } from "@libp2p/websockets"; -import { all as filterAll, wss } from "@libp2p/websockets/filters"; import { wakuMetadata } from "@waku/core"; import { type CreateLibp2pOptions, @@ -53,16 +53,22 @@ export async function defaultLibp2p( ? { metadata: wakuMetadata(pubsubTopics) } : {}; - const filter = - options?.filterMultiaddrs === false || isTestEnvironment() - ? filterAll - : wss; + const connectionGater: ConnectionGater = { + denyDialMultiaddr: async (multiaddr) => { + if (options?.filterMultiaddrs === false || isTestEnvironment()) { + return false; + } + const protocols = multiaddr.protos().map((proto) => proto.name); + return protocols.includes("ws") && !protocols.includes("wss"); + } + }; return createLibp2p({ - transports: [webSockets({ filter: filter })], + transports: [webSockets()], streamMuxers: [mplex()], connectionEncrypters: [noise()], ...options, + connectionGater, services: { identify: identify({ agentVersion: userAgent ?? DefaultUserAgent diff --git a/packages/sdk/src/waku/waku.ts b/packages/sdk/src/waku/waku.ts index e547130927..c7243882be 100644 --- a/packages/sdk/src/waku/waku.ts +++ b/packages/sdk/src/waku/waku.ts @@ -4,6 +4,7 @@ import { type Stream, TypedEventEmitter } from "@libp2p/interface"; +import { peerIdFromString } from "@libp2p/peer-id"; import type { MultiaddrInput } from "@multiformats/multiaddr"; import { ConnectionManager, createDecoder, createEncoder } from "@waku/core"; import type { @@ -88,8 +89,8 @@ export class WakuNode implements IWaku { this.connectionManager = new ConnectionManager({ libp2p, - relay: this.relay, events: this.events, + relay: this.relay, pubsubTopics: pubsubTopics, networkConfig: this.networkConfig, config: options?.connectionManager @@ -213,7 +214,22 @@ export class WakuNode implements IWaku { public async hangUp(peer: PeerId | MultiaddrInput): Promise { log.info(`Hanging up peer:${peer?.toString()}.`); - return this.connectionManager.hangUp(peer); + let peerId: PeerId; + if (typeof peer === "string") { + peerId = peerIdFromString(peer); + } else if (peer && "getPeerId" in peer) { + // MultiaddrInput case + const peerIdStr = peer.getPeerId?.(); + if (!peerIdStr) { + throw new Error("No peer ID in multiaddr"); + } + peerId = peerIdFromString(peerIdStr); + } else { + // PeerId case + peerId = peer as PeerId; + } + + return await this.connectionManager.hangUp(peerId); } public async start(): Promise { @@ -222,7 +238,7 @@ export class WakuNode implements IWaku { this._nodeStateLock = true; await this.libp2p.start(); - this.connectionManager.start(); + // Connection manager starts automatically this.peerManager.start(); this.healthIndicator.start(); this.lightPush?.start();