@waku/discovery
Version:
Contains various discovery mechanisms: DNS Discovery (EIP-1459, Peer Exchange, Local Peer Cache Discovery.
31 lines • 1.09 kB
JavaScript
import { Logger } from "@waku/utils";
const log = new Logger("discovery:fetch_nodes");
/**
* Fetch nodes using passed [[getNode]] until it has been called [[maxGet]]
* times, or it has returned empty or duplicate results more than [[maxErrors]]
* times.
*/
export async function* fetchNodes(getNode, maxGet = 10, maxErrors = 3) {
const peerNodeIds = new Set();
let totalSearches = 0;
let erroneousSearches = 0;
while (totalSearches < maxGet &&
erroneousSearches < maxErrors // Allows a couple of empty results before calling it quit
) {
totalSearches++;
const peer = await getNode();
if (!peer || !peer.nodeId) {
erroneousSearches++;
continue;
}
if (!peerNodeIds.has(peer.nodeId)) {
peerNodeIds.add(peer.nodeId);
// ENRs without a waku2 key are ignored.
if (peer.waku2) {
yield peer;
}
log.info(`got new peer candidate from DNS address=${peer.nodeId}@${peer.ip}`);
}
}
}
//# sourceMappingURL=fetch_nodes.js.map