2
2
3
3
const PeerInfo = require ( 'peer-info' )
4
4
const 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' )
12
9
const multiaddr = require ( 'multiaddr' )
13
10
14
11
const DEFAULT_MAX_TIMEOUT = 30e3 // 30 second default
@@ -62,48 +59,18 @@ class DelegatedContentRouting {
62
59
* @param {CID } key
63
60
* @param {object } options
64
61
* @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> }
67
63
*/
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 = { } ) {
80
65
options . maxTimeout = options . maxTimeout || DEFAULT_MAX_TIMEOUT
81
66
82
- this . dht . findprovs ( key . toBaseEncodedString ( ) , {
67
+ const results = await this . dht . findProvs ( key . toBaseEncodedString ( ) , {
83
68
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 )
106
69
} )
70
+
71
+ for ( let i = 0 ; i < results . length ; i ++ ) {
72
+ yield results [ i ]
73
+ }
107
74
}
108
75
109
76
/**
@@ -115,32 +82,29 @@ class DelegatedContentRouting {
115
82
*
116
83
* @param {CID } key
117
84
* @param {function(Error) } callback
118
- * @returns {void }
85
+ * @returns {Promise }
119
86
*/
120
- provide ( key , callback ) {
87
+ async provide ( key ) {
121
88
const addrs = this . bootstrappers . map ( ( addr ) => {
122
89
return addr . encapsulate ( `/p2p-circuit/ipfs/${ this . peerId . toB58String ( ) } ` )
123
90
} )
124
91
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 )
132
100
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
+ } )
144
108
}
145
109
}
146
110
0 commit comments