22
33const PeerInfo = require ( 'peer-info' )
44const PeerID = require ( 'peer-id' )
5- const dht = require ( 'ipfs-api/src/dht' )
6- const swarm = require ( 'ipfs-api/src/swarm' )
7- const refs = require ( 'ipfs-api/src/refs' )
8- const defaultConfig = require ( 'ipfs-api/src/utils/default-config' )
9- const series = require ( 'async/series' )
10- const parallel = require ( 'async/parallel' )
11- const reflect = require ( 'async/reflect' )
5+ const dht = require ( 'ipfs-http-client/src/dht' )
6+ const swarm = require ( 'ipfs-http-client/src/swarm' )
7+ const refs = require ( 'ipfs-http-client/src/files-regular/refs' )
8+ const defaultConfig = require ( 'ipfs-http-client/src/utils/default-config' )
129const multiaddr = require ( 'multiaddr' )
1310
1411const DEFAULT_MAX_TIMEOUT = 30e3 // 30 second default
@@ -62,48 +59,18 @@ class DelegatedContentRouting {
6259 * @param {CID } key
6360 * @param {object } options
6461 * @param {number } options.maxTimeout How long the query can take. Defaults to 30 seconds
65- * @param {function(Error, Array<PeerInfo>) } callback
66- * @returns {void }
62+ * @returns {AsyncIterable<PeerInfo> }
6763 */
68- findProviders ( key , options , callback ) {
69- if ( typeof options === 'function' ) {
70- callback = options
71- options = { }
72- } else if ( typeof options === 'number' ) { // This will be deprecated in a next release
73- options = {
74- maxTimeout : options
75- }
76- } else {
77- options = options || { }
78- }
79-
64+ async * findProviders ( key , options = { } ) {
8065 options . maxTimeout = options . maxTimeout || DEFAULT_MAX_TIMEOUT
8166
82- this . dht . findprovs ( key . toBaseEncodedString ( ) , {
67+ const results = await this . dht . findProvs ( key . toBaseEncodedString ( ) , {
8368 timeout : `${ options . maxTimeout } ms` // The api requires specification of the time unit (s/ms)
84- } , ( err , results ) => {
85- if ( err ) {
86- return callback ( err )
87- }
88-
89- // cleanup result from ipfs-api
90- const infos = [ ]
91- results
92- . filter ( ( res ) => Boolean ( res . Responses ) )
93- . forEach ( ( res ) => {
94- res . Responses . forEach ( ( raw ) => {
95- const info = new PeerInfo (
96- PeerID . createFromB58String ( raw . ID )
97- )
98- if ( raw . Addrs ) {
99- raw . Addrs . forEach ( ( addr ) => info . multiaddrs . add ( addr ) )
100- }
101- infos . push ( info )
102- } )
103- } )
104-
105- callback ( null , infos )
10669 } )
70+
71+ for ( let i = 0 ; i < results . length ; i ++ ) {
72+ yield results [ i ]
73+ }
10774 }
10875
10976 /**
@@ -115,32 +82,29 @@ class DelegatedContentRouting {
11582 *
11683 * @param {CID } key
11784 * @param {function(Error) } callback
118- * @returns {void }
85+ * @returns {Promise }
11986 */
120- provide ( key , callback ) {
87+ async provide ( key ) {
12188 const addrs = this . bootstrappers . map ( ( addr ) => {
12289 return addr . encapsulate ( `/p2p-circuit/ipfs/${ this . peerId . toB58String ( ) } ` )
12390 } )
12491
125- series ( [
126- ( cb ) => parallel ( addrs . map ( ( addr ) => {
127- return reflect ( ( cb ) => this . swarm . connect ( addr . toString ( ) , cb ) )
128- } ) , ( err , results ) => {
129- if ( err ) {
130- return cb ( err )
131- }
92+ const results = await Promise . all (
93+ addrs . map ( ( addr ) => {
94+ return this . swarm . connect ( addr . toString ( ) ) . catch ( ( ) => { } )
95+ } )
96+ )
97+
98+ // only some need to succeed
99+ const success = results . filter ( ( res ) => res && res . error == null )
132100
133- // only some need to succeed
134- const success = results . filter ( ( res ) => res . error == null )
135- if ( success . length === 0 ) {
136- return cb ( new Error ( 'unable to swarm.connect using p2p-circuit' ) )
137- }
138- cb ( )
139- } ) ,
140- ( cb ) => {
141- this . refs ( key . toBaseEncodedString ( ) , { recursive : true } , cb )
142- }
143- ] , ( err ) => callback ( err ) )
101+ if ( success . length === 0 ) {
102+ throw new Error ( 'unable to swarm.connect using p2p-circuit' )
103+ }
104+
105+ return this . refs ( key . toBaseEncodedString ( ) , {
106+ recursive : true
107+ } )
144108 }
145109}
146110
0 commit comments