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
|
||||
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 =
|
||||
transport === 'tcp' ? 'net' : transport === 'ws' ? 'ws' : null
|
||||
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