js-waku/src/lib/select_peer.ts
Franck R 69f0005445
Bump libp2p from 0.32.4 to 0.36.2, libp2p-gossipsub from 0.12.1 to 0.13.0 (#470)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-02 15:12:08 +11:00

36 lines
844 B
TypeScript

import Libp2p from 'libp2p';
import { Peer } from 'libp2p/src/peer-store';
/**
* Returns a pseudo-random peer that supports the given protocol.
* Useful for protocols such as store and light push
*/
export async function selectRandomPeer(
peersIter: AsyncIterable<Peer>
): Promise<Peer | undefined> {
const peers = [];
for await (const peer of peersIter) {
peers.push(peer);
}
if (peers.length === 0) return;
const index = Math.round(Math.random() * (peers.length - 1));
return peers[index];
}
/**
* Returns the list of peers that supports the given protocol.
*/
export async function* getPeersForProtocol(
libp2p: Libp2p,
protocol: string
): AsyncIterable<Peer> {
for await (const peer of libp2p.peerStore.getPeers()) {
if (!peer.protocols.includes(protocol)) {
continue;
}
yield peer;
}
}