@libp2p/peer-store
Version:
Stores information about peers libp2p knows on the network
40 lines • 1.42 kB
JavaScript
import { InvalidParametersError } from '@libp2p/interface';
import { isMultiaddr, multiaddr } from '@multiformats/multiaddr';
export async function dedupeFilterAndSortAddresses(peerId, filter, addresses, existingAddresses) {
const addressMap = new Map();
for (const addr of addresses) {
if (addr == null) {
continue;
}
if (addr.multiaddr instanceof Uint8Array) {
addr.multiaddr = multiaddr(addr.multiaddr);
}
if (!isMultiaddr(addr.multiaddr)) {
throw new InvalidParametersError('Multiaddr was invalid');
}
if (!(await filter(peerId, addr.multiaddr))) {
continue;
}
const isCertified = addr.isCertified ?? false;
const maStr = addr.multiaddr.toString();
const existingAddr = addressMap.get(maStr);
if (existingAddr != null) {
addr.isCertified = existingAddr.isCertified || isCertified;
}
else {
addressMap.set(maStr, {
multiaddr: addr.multiaddr,
isCertified
});
}
}
return [...addressMap.values()]
.sort((a, b) => {
return a.multiaddr.toString().localeCompare(b.multiaddr.toString());
})
.map(({ isCertified, multiaddr }) => ({
isCertified,
multiaddr: multiaddr.bytes
}));
}
//# sourceMappingURL=dedupe-addresses.js.map