multiaddr implementation (binary + string representation of network addresses)
A standard way to represent addresses that
import { multiaddr } from '@multiformats/multiaddr' const addr = multiaddr('/ip4/127.0.0.1/udp/1234') // Multiaddr(/ip4/127.0.0.1/udp/1234) addr.bytes // <Uint8Array 04 7f 00 00 01 11 04 d2> addr.toString() // '/ip4/127.0.0.1/udp/1234' addr.protos() // [ // {code: 4, name: 'ip4', size: 32}, // {code: 273, name: 'udp', size: 16} // ] // gives you an object that is friendly with what Node.js core modules expect for addresses addr.nodeAddress() // { // family: 4, // port: 1234, // address: "127.0.0.1" // } addr.encapsulate('/sctp/5678') // Multiaddr(/ip4/127.0.0.1/udp/1234/sctp/5678)Resolving DNSADDR addresses
DNSADDR is a spec that allows storing a TXT DNS record that contains a Multiaddr.
To resolve DNSADDR addresses, call the .resolve()
function the multiaddr, optionally passing a DNS
resolver.
DNSADDR addresses can resolve to multiple multiaddrs, since there is no limit to the number of TXT records that can be stored.
Example - Resolving DNSADDR Multiaddrsimport { multiaddr, resolvers } from '@multiformats/multiaddr' import { dnsaddrResolver } from '@multiformats/multiaddr/resolvers' resolvers.set('dnsaddr', dnsaddrResolver) const ma = multiaddr('/dnsaddr/bootstrap.libp2p.io') // resolve with a 5s timeout const resolved = await ma.resolve({ signal: AbortSignal.timeout(5000) }) console.info(resolved) // [Multiaddr('/ip4/147.75...'), Multiaddr('/ip4/147.75...'), Multiaddr('/ip4/147.75...')...]Example - Using a custom DNS resolver to resolve DNSADDR Multiaddrs
See the docs for @multiformats/dns for a full breakdown of how to specify multiple resolvers or resolvers that can be used for specific TLDs.
import { multiaddr } from '@multiformats/multiaddr' import { dns } from '@multiformats/dns' import { dnsJsonOverHttps } from '@multiformats/dns/resolvers' const resolver = dns({ resolvers: { '.': dnsJsonOverHttps('https://cloudflare-dns.com/dns-query') } }) const ma = multiaddr('/dnsaddr/bootstrap.libp2p.io') const resolved = await ma.resolve({ dns: resolver }) console.info(resolved) // [Multiaddr('/ip4/147.75...'), Multiaddr('/ip4/147.75...'), Multiaddr('/ip4/147.75...')...]Example - Adding custom protocols
To add application-specific or experimental protocols, add a protocol codec to the protocol registry:
import { registry, V, multiaddr } from '@multiformats/multiaddr' import type { ProtocolCodec } from '@multiformats/multiaddr' const maWithCustomTuple = '/custom-protocol/hello' // throws UnknownProtocolError multiaddr(maWithCustomTuple) const protocol: ProtocolCodec = { code: 2059, name: 'custom-protocol', size: V // V means variable length, can also be 0, a positive integer (e.g. a fixed // length or omitted } registry.addProtocol(protocol) // does not throw UnknownProtocolError multiaddr(maWithCustomTuple) // protocols can also be removed registry.removeProtocol(protocol.code)
$ npm i @multiformats/multiaddr
Loading this module through a script tag will make its exports available as MultiformatsMultiaddr
in the global namespace.
<script src="https://unpkg.com/@multiformats/multiaddr/dist/index.min.js"></script>
Licensed under either of
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4