@@ -5,6 +5,7 @@ const PeerInfo = require('peer-info')
55const multiaddr = require ( 'multiaddr' )
66const EventEmitter = require ( 'events' ) . EventEmitter
77const debug = require ( 'debug' )
8+ const includes = require ( 'lodash/includes' )
89
910const log = debug ( 'libp2p:railing' )
1011log . error = debug ( 'libp2p:railing:error' )
@@ -19,15 +20,28 @@ class Railing extends EventEmitter {
1920 setImmediate ( callback )
2021 setImmediate ( ( ) => {
2122 this . bootstrapers . forEach ( ( candidate ) => {
22- // TODO: It would be awesome to get better tools at extracting things
23- // from multiaddr
24- const split = candidate . split ( '/' )
23+ candidate = multiaddr ( candidate )
24+
25+ let ma
26+ if ( includes ( candidate . protoNames ( ) , 'ipfs' ) ) {
27+ ma = candidate . decapsulate ( 'ipfs' )
28+ }
29+
30+ // TODO: switch for multiaddr.getPeerId once merged
31+ let peerIdB58Str
32+ try {
33+ peerIdB58Str = candidate . stringTuples ( ) . filter ( ( tuple ) => {
34+ if ( tuple [ 0 ] === candidate . protos ( ) . filter ( ( proto ) => {
35+ return proto . name === 'ipfs'
36+ } ) [ 0 ] . code ) {
37+ return true
38+ }
39+ } ) [ 0 ] [ 1 ]
40+ } catch ( e ) {
41+ throw new Error ( 'Error extracting IPFS id from multiaddr' , e )
42+ }
2543
26- const ma = multiaddr ( split . splice ( 0 , 5 ) . join ( '/' ) )
27-
28- const peerIdB58Str = split [ 1 ]
2944 const peerId = PeerId . createFromB58String ( peerIdB58Str )
30-
3145 PeerInfo . create ( peerId , ( err , peerInfo ) => {
3246 if ( err ) {
3347 return log . error ( 'Error creating PeerInfo from bootstrap peer' , err )
0 commit comments