orbitdb/test/utils/wait-for-peers.js
2023-09-23 16:25:29 +01:00

28 lines
806 B
JavaScript

'use strict'
const waitForPeers = (ipfs, peersToWait, topic) => {
return new Promise((resolve, reject) => {
const interval = setInterval(async () => {
try {
const peers = await ipfs.libp2p.services.pubsub.getPeers(topic)
const peerIds = peers.map(peer => peer.toString())
const peerIdsToWait = peersToWait.map(peer => peer.toString())
const hasAllPeers = peerIdsToWait.map((e) => peerIds.includes(e)).filter((e) => e === false).length === 0
// FIXME: Does not fail on timeout, not easily fixable
if (hasAllPeers) {
console.log('Found peers!')
clearInterval(interval)
resolve()
}
} catch (e) {
clearInterval(interval)
reject(e)
}
}, 200)
})
}
export default waitForPeers