UNPKG

libp2p

Version:

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

52 lines 1.57 kB
import { dns, RecordType } from '@multiformats/dns'; import { multiaddr } from '@multiformats/multiaddr'; class DNSAddrResolver { dns; canResolve(ma) { return ma.getComponents().some(({ name }) => name === 'dnsaddr'); } async resolve(ma, options) { const hostname = ma.getComponents() .find(component => component.name === 'dnsaddr') ?.value; if (hostname == null) { return [ma]; } const resolver = this.getDNS(options); const result = await resolver.query(`_dnsaddr.${hostname}`, { signal: options?.signal, types: [ RecordType.TXT ] }); const peerId = ma.getComponents() .find(component => component.name === 'p2p') ?.value; const output = []; for (const answer of result.Answer) { const addr = answer.data .replace(/["']/g, '') .trim() .split('=')[1]; if (addr == null) { continue; } if (peerId != null && !addr.includes(peerId)) { continue; } output.push(multiaddr(addr)); } return output; } getDNS(options) { if (options.dns != null) { return options.dns; } if (this.dns == null) { this.dns = dns(); } return this.dns; } } export const dnsaddrResolver = new DNSAddrResolver(); //# sourceMappingURL=dnsaddr.js.map