@multiformats/multiaddr

Example

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.getComponents()
// [
// { code: 4, name: 'ip4', value: '127.0.0.1' },
// { code: 273, name: 'udp', value: '1234' }
// ]

addr.encapsulate('/sctp/5678')
// Multiaddr(/ip4/127.0.0.1/udp/1234/sctp/5678)

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)