@@ -5,10 +5,12 @@ const log = Object.assign(debug('libp2p:circuit'), {
5
5
error : debug ( 'libp2p:circuit:err' )
6
6
} )
7
7
8
+ const errCode = require ( 'err-code' )
8
9
const mafmt = require ( 'mafmt' )
9
- const multiaddr = require ( 'multiaddr' )
10
+ const { Multiaddr } = require ( 'multiaddr' )
10
11
const PeerId = require ( 'peer-id' )
11
12
const { CircuitRelay : CircuitPB } = require ( './protocol' )
13
+ const { codes } = require ( '../errors' )
12
14
13
15
const toConnection = require ( 'libp2p-utils/src/stream-to-ma-conn' )
14
16
@@ -21,7 +23,6 @@ const StreamHandler = require('./circuit/stream-handler')
21
23
const transportSymbol = Symbol . for ( '@libp2p/js-libp2p-circuit/circuit' )
22
24
23
25
/**
24
- * @typedef {import('multiaddr') } Multiaddr
25
26
* @typedef {import('libp2p-interfaces/src/connection').Connection } Connection
26
27
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream } MuxedStream
27
28
*/
@@ -96,9 +97,9 @@ class Circuit {
96
97
97
98
if ( virtualConnection ) {
98
99
// @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 ] )
100
101
// @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 ] )
102
103
const maConn = toConnection ( {
103
104
stream : virtualConnection ,
104
105
remoteAddr,
@@ -124,10 +125,19 @@ class Circuit {
124
125
async dial ( ma , options ) {
125
126
// Check the multiaddr to see if it contains a relay and a destination peer
126
127
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 )
131
141
132
142
let disconnectOnFailure = false
133
143
let relayConnection = this . _connectionManager . get ( relayPeer )
@@ -147,7 +157,7 @@ class Circuit {
147
157
} ,
148
158
dstPeer : {
149
159
id : destinationPeer . toBytes ( ) ,
150
- addrs : [ multiaddr ( destinationAddr ) . bytes ]
160
+ addrs : [ new Multiaddr ( destinationAddr ) . bytes ]
151
161
}
152
162
}
153
163
} )
0 commit comments