mirror of
https://github.com/logos-messaging/js-waku.git
synced 2026-01-10 17:53:09 +00:00
* fix: discovery for peer-exchange use the bootstrap node as a starter to send a peer-exchange query to, and emit the response peers received from it for further connection to libp2p using the peer-discovery interface * init: test for libp2p bootstrap/discovery for peer-exchange * temp-add: console.logs for easier debugging * add: peer discovery test & rm: console.logs * chore: rm and redundant spec test * add: interval for peer exchange queries we set an interval to query a peer every 5 minutes for peer exchange, and add new peers if found * address: reviews - add `type` for imports not using values - better handling for peer-exchange query interval * chore: fix tsc for peer-exchange use node16 for module resolution * chore: add extra exports to fix typedoc warnings ref: https://github.com/TypeStrong/typedoc/issues/1739
84 lines
2.2 KiB
TypeScript
84 lines
2.2 KiB
TypeScript
import { bootstrap } from "@libp2p/bootstrap";
|
|
import { waitForRemotePeer } from "@waku/core";
|
|
import {
|
|
Fleet,
|
|
getPredefinedBootstrapNodes,
|
|
} from "@waku/core/lib/predefined_bootstrap_nodes";
|
|
import { createLightNode } from "@waku/create";
|
|
import type { LightNode, PeerExchangeResponse } from "@waku/interfaces";
|
|
import { Protocols } from "@waku/interfaces";
|
|
import { wakuPeerExchangeDiscovery } from "@waku/peer-exchange";
|
|
import { expect } from "chai";
|
|
|
|
import { delay } from "../src/delay.js";
|
|
|
|
describe("Peer Exchange", () => {
|
|
let waku: LightNode;
|
|
afterEach(async function () {
|
|
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
|
});
|
|
|
|
it("Auto discovery", async function () {
|
|
this.timeout(120_000);
|
|
|
|
waku = await createLightNode({
|
|
libp2p: {
|
|
peerDiscovery: [
|
|
bootstrap({ list: getPredefinedBootstrapNodes(Fleet.Test) }),
|
|
wakuPeerExchangeDiscovery(),
|
|
],
|
|
},
|
|
});
|
|
|
|
await waku.start();
|
|
await delay(1000);
|
|
|
|
await waitForRemotePeer(waku, [Protocols.PeerExchange]);
|
|
const pxPeers = await waku.peerExchange.peers();
|
|
expect(pxPeers.length).to.be.greaterThan(0);
|
|
});
|
|
|
|
it("Manual query on test fleet", async function () {
|
|
this.timeout(150_000);
|
|
|
|
// skipping in CI as this test demonstrates Peer Exchange working with the test fleet
|
|
// but not with locally run nwaku nodes
|
|
if (process.env.ci) {
|
|
this.skip();
|
|
}
|
|
|
|
const waku = await createLightNode({
|
|
libp2p: {
|
|
peerDiscovery: [
|
|
bootstrap({ list: getPredefinedBootstrapNodes(Fleet.Test) }),
|
|
],
|
|
},
|
|
});
|
|
|
|
await waku.start();
|
|
|
|
await waitForRemotePeer(waku, [Protocols.PeerExchange]);
|
|
|
|
let receivedCallback = false;
|
|
const numPeersToRequest = 3;
|
|
const callback = (response: PeerExchangeResponse): void => {
|
|
receivedCallback = true;
|
|
expect(response.peerInfos.length).to.be.greaterThan(0);
|
|
expect(response.peerInfos.length).to.be.lessThanOrEqual(
|
|
numPeersToRequest
|
|
);
|
|
|
|
expect(response.peerInfos[0].ENR).to.not.be.null;
|
|
};
|
|
|
|
await waku.peerExchange.query(
|
|
{
|
|
numPeers: numPeersToRequest,
|
|
},
|
|
callback
|
|
);
|
|
|
|
expect(receivedCallback).to.be.true;
|
|
});
|
|
});
|