js-multiaddr-to-uri/index.js
Henrique Dias 7fbb65a470 fix: add all protocols
License: MIT
Signed-off-by: Henrique Dias <hacdias@gmail.com>
2019-01-13 10:22:17 +00:00

44 lines
1.3 KiB
JavaScript

const Multiaddr = require('multiaddr')
const reduceValue = (_, v) => v
const Reducers = {
ip4: reduceValue,
ip6: (str, content, i, parts) => (
parts.length === 1 && parts[0].protocol === 'ip6'
? content
: `[${content}]`
),
tcp: (str, content, i, parts) => (
parts.some(p => ['http', 'https', 'ws', 'wss'].includes(p.protocol))
? `${str}:${content}`
: `tcp://${str}:${content}`
),
udp: (str, content) => `udp://${str}:${content}`,
dnsaddr: reduceValue,
dns4: reduceValue,
dns6: reduceValue,
ipfs: (str, content) => `${str}/ipfs/${content}`,
p2p: (str, content) => `${str}/p2p/${content}`,
http: str => `http://${str}`,
https: str => `https://${str}`,
ws: str => `ws://${str}`,
wss: str => `wss://${str}`,
'p2p-websocket-star': str => `${str}/p2p-websocket-star`,
'p2p-webrtc-star': str => `${str}/p2p-webrtc-star`,
'p2p-webrtc-direct': str => `${str}/p2p-webrtc-direct`
}
module.exports = (multiaddr) => (
Multiaddr(multiaddr)
.stringTuples()
.map(tuple => ({
protocol: Multiaddr.protocols.codes[tuple[0]].name,
content: tuple[1]
}))
.reduce((str, part, i, parts) => {
const reduce = Reducers[part.protocol]
if (!reduce) throw new Error(`Unsupported protocol ${part.protocol}`)
return reduce(str, part.content, i, parts)
}, '')
)