multiaddr implementation in JavaScript.
> npm install multiaddr --save
const multiaddr = require('multiaddr')
Same as in Node.js, you just have to transpile it with Webpack before serving the code. Follow the webpack config example.
Same as in Node.js, you just have to browserify the code before serving it. See the browserify repo for how to do that.
Make the multiaddr.js available through your server and load it using a normal <script>
tag, this will export the multiaddr
on the window
object, such that:
const multiaddr = window.multiaddr
You will need to use Node.js Buffer
API compatible, if you are running inside the browser, you can access it by multiaddr.Buffer
or you can install Feross's Buffer.
const multiaddr = require('multiaddr')
const addr = multiaddr("/ip4/127.0.0.1/udp/1234")
// <Multiaddr /ip4/127.0.0.1/udp/1234>
addr.buffer
// <Buffer >
addr.toString()
// /ip4/127.0.0.1/udp/1234
// construct with Buffer
addr = multiaddr(addr.buffer)
// <Multiaddr /ip4/127.0.0.1/udp/1234>
// get the multiaddr protocol codes
addr.protoCodes()
// [4, 6]
// get the multiaddr protocol string codes
addr.protoNames()
// ['ip4', 'tcp']
// get the multiaddr protocol description objects
addr.protos()
// [{code: 4, name: 'ip4', size: 32},
// {code: 17, name: 'udp', size: 16}]
// get a node friendly address object
addr.nodeAddress()
// {family: "IPv4", port:1234, address: "127.0.0.1"} - note no UDP :(
addr.fromNodeAddress({family: "IPv4", port:1234, address: "127.0.0.1"}, 'udp')
// /ip4/127.0.0.1/udp/1234
// handles the stupid string version too
addr = multiaddr.fromStupidString("udp4://127.0.0.1:1234")
// <Multiaddr /ip4/127.0.0.1/udp/1234>
addr.toStupidString(buf)
// udp4://127.0.0.1:1234
addr.encapsulate('/sctp/5678')
// <Multiaddr /ip4/127.0.0.1/udp/1234/sctp/5678>
addr.decapsulate('/udp') // up to + inc last occurrence of this subaddr
// <Multiaddr /ip4/127.0.0.1>
Multiaddr allows expressing tunnels very nicely.
const printer = multiaddr('/ip4/192.168.0.13/tcp/80')
const proxy = multiaddr('/ip4/10.20.30.40/tcp/443')
const printerOverProxy = proxy.encapsulate(printer)
// <Multiaddr /ip4/10.20.30.40/tcp/443/ip4/192.168.0.13/tcp/80>
const proxyAgain = printerOverProxy.decapsulate('/ip4')
// <Multiaddr /ip4/10.20.30.40/tcp/443>