libp2p
Version:
JavaScript implementation of libp2p, a modular peer to peer network stack
42 lines • 1.55 kB
JavaScript
import { InvalidMultiaddrError, InvalidParametersError, isPeerId } from '@libp2p/interface';
import { peerIdFromString } from '@libp2p/peer-id';
import { isMultiaddr } from '@multiformats/multiaddr';
/**
* Extracts a PeerId and/or multiaddr from the passed PeerId or Multiaddr or an array of Multiaddrs
*/
export function getPeerAddress(peer) {
if (isPeerId(peer)) {
return { peerId: peer, multiaddrs: [] };
}
if (!Array.isArray(peer)) {
peer = [peer];
}
let peerId;
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
};
}
//# sourceMappingURL=get-peer.js.map