mirror of https://codeberg.org/pzp/pzp-net.git
Multiaddr.toMs() supports tunnels
This commit is contained in:
parent
c2d1adb19e
commit
e979aa0a9d
|
@ -44,7 +44,31 @@ const Multiaddr = {
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
throw new Error(`Invalid multiaddr "${multiaddr}"`)
|
throw new Error(`Invalid multiaddr "${multiaddr}"`)
|
||||||
}
|
}
|
||||||
const [, , host, transport, port, transform, cred] = multiaddr.split('/')
|
const pieces = multiaddr.split('/')
|
||||||
|
|
||||||
|
// Parse tunnel multiaddr
|
||||||
|
if (pieces[1] === 'tunnel') {
|
||||||
|
const [, , pubkeys, transform, cred] = pieces
|
||||||
|
const [hubPubkey, targetPubkey] = pubkeys.split('.')
|
||||||
|
// prettier-ignore
|
||||||
|
if (!hubPubkey || !targetPubkey) throw new Error(`Invalid tunnel multiaddr "${multiaddr}"`)
|
||||||
|
const soFar = `tunnel:${hubPubkey}:${targetPubkey}`
|
||||||
|
if (transform) {
|
||||||
|
// prettier-ignore
|
||||||
|
if (transform !== 'shse') throw new Error(`Unknown transform "${transform}"`)
|
||||||
|
const [pubkey, token] = cred.split('.')
|
||||||
|
if (token) {
|
||||||
|
return `${soFar}~shse:${pubkey}:${token}`
|
||||||
|
} else {
|
||||||
|
return `${soFar}~shse:${pubkey}`
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return soFar
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse host+transport multiaddr
|
||||||
|
const [, , host, transport, port, transform, cred] = pieces
|
||||||
const label1 =
|
const label1 =
|
||||||
transport === 'tcp' ? 'net' : transport === 'ws' ? 'ws' : null
|
transport === 'tcp' ? 'net' : transport === 'ws' ? 'ws' : null
|
||||||
if (!label1) throw new Error(`Unknown transport "${transport}"`)
|
if (!label1) throw new Error(`Unknown transport "${transport}"`)
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
const test = require('node:test')
|
||||||
|
const assert = require('node:assert')
|
||||||
|
const Multiaddr = require('../lib/multiaddr')
|
||||||
|
|
||||||
|
const PUBKEY = 'EqTMFv7zm8hpPyAkj789qdJgqtz81AEbcinpAs24RRUC'
|
||||||
|
const PUBKEY2 = 'EqTMFv7zm8hpPyAkj789qdJgqtz81AEbcinpAs35RRUC'
|
||||||
|
|
||||||
|
test('Multiaddr', async (t) => {
|
||||||
|
await t.test('toMs ip4+tcp', async () => {
|
||||||
|
assert.equal(
|
||||||
|
Multiaddr.toMs('/ip4/127.0.0.1/tcp/8008'),
|
||||||
|
'net:127.0.0.1:8008'
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
await t.test('toMs ip4+tcp+shse', async () => {
|
||||||
|
assert.equal(
|
||||||
|
Multiaddr.toMs(`/ip4/127.0.0.1/tcp/8008/shse/${PUBKEY}`),
|
||||||
|
`net:127.0.0.1:8008~shse:${PUBKEY}`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
await t.test('toMs ip4+tcp+shse+token', async () => {
|
||||||
|
assert.equal(
|
||||||
|
Multiaddr.toMs(`/ip4/127.0.0.1/tcp/8008/shse/${PUBKEY}.TOKEN`),
|
||||||
|
`net:127.0.0.1:8008~shse:${PUBKEY}:TOKEN`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
await t.test('toMs dns+tcp+shse', async () => {
|
||||||
|
assert.equal(
|
||||||
|
Multiaddr.toMs(`/dns/staltz.com/tcp/8008/shse/${PUBKEY}`),
|
||||||
|
`net:staltz.com:8008~shse:${PUBKEY}`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
await t.test('toMs dns+tcp+shse+token', async () => {
|
||||||
|
assert.equal(
|
||||||
|
Multiaddr.toMs(`/dns/staltz.com/tcp/8008/shse/${PUBKEY}.TOKEN`),
|
||||||
|
`net:staltz.com:8008~shse:${PUBKEY}:TOKEN`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
await t.test('toMs tunnel', async () => {
|
||||||
|
assert.equal(
|
||||||
|
Multiaddr.toMs(`/tunnel/${PUBKEY}.${PUBKEY2}`),
|
||||||
|
`tunnel:${PUBKEY}:${PUBKEY2}`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
await t.test('toMs tunnel+shse', async () => {
|
||||||
|
assert.equal(
|
||||||
|
Multiaddr.toMs(`/tunnel/${PUBKEY}.${PUBKEY2}/shse/${PUBKEY2}`),
|
||||||
|
`tunnel:${PUBKEY}:${PUBKEY2}~shse:${PUBKEY2}`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
await t.test('toMs tunnel+shse+token', async () => {
|
||||||
|
assert.equal(
|
||||||
|
Multiaddr.toMs(`/tunnel/${PUBKEY}.${PUBKEY2}/shse/${PUBKEY2}.TOKEN`),
|
||||||
|
`tunnel:${PUBKEY}:${PUBKEY2}~shse:${PUBKEY2}:TOKEN`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
Loading…
Reference in New Issue