ipfs-core
Version:
JavaScript implementation of the IPFS specification
61 lines (48 loc) • 1.52 kB
JavaScript
import { withTimeoutOption } from 'ipfs-core-utils/with-timeout-option'
/**
* @typedef {import('ipfs-core-types/src/swarm').PeersResult} PeersResult
*/
/**
* @param {object} config
* @param {import('../../types').NetworkService} config.network
*/
export function createPeers ({ network }) {
/**
* @type {import('ipfs-core-types/src/swarm').API<{}>["peers"]}
*/
async function peers (options = {}) {
const { libp2p } = await network.use(options)
if (options.verbose) {
const peers = []
for (const connection of libp2p.getConnections()) {
/** @type {PeersResult} */
const peer = {
addr: connection.remoteAddr,
peer: connection.remotePeer
}
if (options.verbose || options.direction) {
peer.direction = connection.stat.direction
}
if (options.verbose) {
peer.muxer = connection.stat.multiplexer
peer.latency = 'n/a'
peer.streams = [] // TODO: get this from libp2p
}
peers.push(peer)
}
return peers
}
/** @type {Map<string, PeersResult>} */
const peers = new Map()
for (const connection of libp2p.getConnections()) {
/** @type {import('ipfs-core-types/src/swarm').PeersResult} */
const peer = {
addr: connection.remoteAddr,
peer: connection.remotePeer
}
peers.set(connection.remotePeer.toString(), peer)
}
return Array.from(peers.values())
}
return withTimeoutOption(peers)
}