@@ -5,10 +5,12 @@ const log = Object.assign(debug('libp2p:circuit'), {
55 error : debug ( 'libp2p:circuit:err' )
66} )
77
8+ const errCode = require ( 'err-code' )
89const mafmt = require ( 'mafmt' )
9- const multiaddr = require ( 'multiaddr' )
10+ const { Multiaddr } = require ( 'multiaddr' )
1011const PeerId = require ( 'peer-id' )
1112const { CircuitRelay : CircuitPB } = require ( './protocol' )
13+ const { codes } = require ( '../errors' )
1214
1315const toConnection = require ( 'libp2p-utils/src/stream-to-ma-conn' )
1416
@@ -21,7 +23,6 @@ const StreamHandler = require('./circuit/stream-handler')
2123const transportSymbol = Symbol . for ( '@libp2p/js-libp2p-circuit/circuit' )
2224
2325/**
24- * @typedef {import('multiaddr') } Multiaddr
2526 * @typedef {import('libp2p-interfaces/src/connection').Connection } Connection
2627 * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream } MuxedStream
2728 */
@@ -96,9 +97,9 @@ class Circuit {
9697
9798 if ( virtualConnection ) {
9899 // @ts -ignore dst peer will not be undefined
99- const remoteAddr = multiaddr ( request . dstPeer . addrs [ 0 ] )
100+ const remoteAddr = new Multiaddr ( request . dstPeer . addrs [ 0 ] )
100101 // @ts -ignore src peer will not be undefined
101- const localAddr = multiaddr ( request . srcPeer . addrs [ 0 ] )
102+ const localAddr = new Multiaddr ( request . srcPeer . addrs [ 0 ] )
102103 const maConn = toConnection ( {
103104 stream : virtualConnection ,
104105 remoteAddr,
@@ -124,10 +125,19 @@ class Circuit {
124125 async dial ( ma , options ) {
125126 // Check the multiaddr to see if it contains a relay and a destination peer
126127 const addrs = ma . toString ( ) . split ( '/p2p-circuit' )
127- const relayAddr = multiaddr ( addrs [ 0 ] )
128- const destinationAddr = multiaddr ( addrs [ addrs . length - 1 ] )
129- const relayPeer = PeerId . createFromCID ( relayAddr . getPeerId ( ) )
130- const destinationPeer = PeerId . createFromCID ( destinationAddr . getPeerId ( ) )
128+ const relayAddr = new Multiaddr ( addrs [ 0 ] )
129+ const destinationAddr = new Multiaddr ( addrs [ addrs . length - 1 ] )
130+ const relayId = relayAddr . getPeerId ( )
131+ const destinationId = destinationAddr . getPeerId ( )
132+
133+ if ( ! relayId || ! destinationId ) {
134+ const errMsg = 'Circuit relay dial failed as addresses did not have peer id'
135+ log . error ( errMsg )
136+ throw errCode ( new Error ( errMsg ) , codes . ERR_RELAYED_DIAL )
137+ }
138+
139+ const relayPeer = PeerId . createFromCID ( relayId )
140+ const destinationPeer = PeerId . createFromCID ( destinationId )
131141
132142 let disconnectOnFailure = false
133143 let relayConnection = this . _connectionManager . get ( relayPeer )
@@ -147,7 +157,7 @@ class Circuit {
147157 } ,
148158 dstPeer : {
149159 id : destinationPeer . toBytes ( ) ,
150- addrs : [ multiaddr ( destinationAddr ) . bytes ]
160+ addrs : [ new Multiaddr ( destinationAddr ) . bytes ]
151161 }
152162 }
153163 } )
0 commit comments