UNPKG

libp2p

Version:

JavaScript implementation of libp2p, a modular peer to peer network stack

57 lines (46 loc) 1.59 kB
import { InvalidMultiaddrError, InvalidParametersError, isPeerId } from '@libp2p/interface' import { peerIdFromString } from '@libp2p/peer-id' import { isMultiaddr } from '@multiformats/multiaddr' import type { PeerId } from '@libp2p/interface' import type { Multiaddr } from '@multiformats/multiaddr' export interface PeerAddress { peerId?: PeerId multiaddrs: Multiaddr[] } /** * Extracts a PeerId and/or multiaddr from the passed PeerId or Multiaddr or an array of Multiaddrs */ export function getPeerAddress (peer: PeerId | Multiaddr | Multiaddr[]): PeerAddress { if (isPeerId(peer)) { return { peerId: peer, multiaddrs: [] } } if (!Array.isArray(peer)) { peer = [peer] } let peerId: PeerId | undefined if (peer.length > 0) { const peerIdStr = peer[0].getPeerId() peerId = peerIdStr == null ? undefined : peerIdFromString(peerIdStr) // ensure PeerId is either not set or is consistent peer.forEach(ma => { if (!isMultiaddr(ma)) { throw new InvalidMultiaddrError('Invalid multiaddr') } const maPeerIdStr = ma.getPeerId() if (maPeerIdStr == null) { if (peerId != null) { throw new InvalidParametersError('Multiaddrs must all have the same peer id or have no peer id') } } else { const maPeerId = peerIdFromString(maPeerIdStr) if (peerId?.equals(maPeerId) !== true) { throw new InvalidParametersError('Multiaddrs must all have the same peer id or have no peer id') } } }) } return { peerId, multiaddrs: peer } }