libp2p 0.33.0 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/src/circuit/index.d.ts +2 -2
  2. package/dist/src/circuit/index.d.ts.map +1 -1
  3. package/dist/src/circuit/transport.d.ts +1 -1
  4. package/dist/src/circuit/transport.d.ts.map +1 -1
  5. package/dist/src/config.d.ts +0 -1
  6. package/dist/src/content-routing/index.d.ts +4 -2
  7. package/dist/src/content-routing/index.d.ts.map +1 -1
  8. package/dist/src/dht/dht-content-routing.d.ts +30 -0
  9. package/dist/src/dht/dht-content-routing.d.ts.map +1 -0
  10. package/dist/src/dht/dht-peer-routing.d.ts +29 -0
  11. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -0
  12. package/dist/src/dialer/dial-request.d.ts +4 -4
  13. package/dist/src/dialer/dial-request.d.ts.map +1 -1
  14. package/dist/src/dialer/index.d.ts +1 -2
  15. package/dist/src/dialer/index.d.ts.map +1 -1
  16. package/dist/src/errors.d.ts +2 -0
  17. package/dist/src/identify/index.d.ts +1 -1
  18. package/dist/src/identify/index.d.ts.map +1 -1
  19. package/dist/src/index.d.ts +1 -2
  20. package/dist/src/index.d.ts.map +1 -1
  21. package/dist/src/metrics/stats.d.ts +0 -1
  22. package/dist/src/metrics/stats.d.ts.map +1 -1
  23. package/dist/src/nat-manager.d.ts.map +1 -1
  24. package/dist/src/peer-routing.d.ts.map +1 -1
  25. package/dist/src/peer-store/address-book.d.ts +1 -1
  26. package/dist/src/peer-store/address-book.d.ts.map +1 -1
  27. package/dist/src/peer-store/index.d.ts +37 -24
  28. package/dist/src/peer-store/index.d.ts.map +1 -1
  29. package/dist/src/peer-store/metadata-book.d.ts +3 -2
  30. package/dist/src/peer-store/metadata-book.d.ts.map +1 -1
  31. package/dist/src/peer-store/persistent/index.d.ts +0 -1
  32. package/dist/src/record/envelope/index.d.ts +23 -0
  33. package/dist/src/record/envelope/index.d.ts.map +1 -1
  34. package/dist/src/record/peer-record/index.d.ts +6 -0
  35. package/dist/src/record/peer-record/index.d.ts.map +1 -1
  36. package/dist/src/registrar.d.ts +1 -1
  37. package/dist/src/registrar.d.ts.map +1 -1
  38. package/dist/src/upgrader.d.ts +1 -1
  39. package/dist/src/upgrader.d.ts.map +1 -1
  40. package/package.json +15 -10
  41. package/src/circuit/auto-relay.js +4 -4
  42. package/src/circuit/circuit/hop.js +2 -2
  43. package/src/circuit/circuit/stop.js +1 -1
  44. package/src/circuit/circuit/utils.js +2 -2
  45. package/src/circuit/index.js +1 -1
  46. package/src/circuit/transport.js +1 -1
  47. package/src/connection-manager/index.js +1 -1
  48. package/src/content-routing/index.js +35 -9
  49. package/src/dht/dht-content-routing.js +44 -0
  50. package/src/dht/dht-peer-routing.js +51 -0
  51. package/src/dialer/index.js +2 -2
  52. package/src/errors.js +3 -1
  53. package/src/get-peer.js +1 -1
  54. package/src/identify/index.js +8 -8
  55. package/src/index.js +7 -12
  56. package/src/insecure/plaintext.js +1 -1
  57. package/src/keychain/cms.js +2 -2
  58. package/src/keychain/index.js +9 -9
  59. package/src/nat-manager.js +2 -2
  60. package/src/peer-routing.js +3 -2
  61. package/src/peer-store/address-book.js +1 -1
  62. package/src/peer-store/metadata-book.js +2 -1
  63. package/src/peer-store/persistent/index.js +5 -5
  64. package/src/pnet/crypto.js +1 -1
  65. package/src/pnet/key-generator.js +1 -1
  66. package/src/transport-manager.js +1 -1
  67. package/src/upgrader.js +9 -9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "libp2p",
3
- "version": "0.33.0",
3
+ "version": "0.34.0",
4
4
  "description": "JavaScript implementation of libp2p, a modular peer to peer network stack",
5
5
  "leadMaintainer": "Jacob Heun <jacobheun@gmail.com>",
6
6
  "main": "src/index.js",
@@ -41,6 +41,7 @@
41
41
  "test:node": "aegir test -t node -f \"./test/**/*.{node,spec}.js\"",
42
42
  "test:browser": "aegir test -t browser",
43
43
  "test:examples": "cd examples && npm run test:all",
44
+ "test:interop": "LIBP2P_JS=$PWD npx aegir test -t node -f ./node_modules/libp2p-interop/test/*",
44
45
  "prepare": "aegir build --no-bundle",
45
46
  "release": "aegir release -t node -t browser",
46
47
  "release-minor": "aegir release --type minor -t node -t browser",
@@ -74,7 +75,8 @@
74
75
  "extends": "ipfs",
75
76
  "ignorePatterns": [
76
77
  "!.aegir.js",
77
- "test/ts-use"
78
+ "test/ts-use",
79
+ "*.d.ts"
78
80
  ]
79
81
  },
80
82
  "dependencies": {
@@ -137,11 +139,10 @@
137
139
  "@types/node": "^16.0.1",
138
140
  "@types/node-forge": "^0.10.1",
139
141
  "@types/varint": "^6.0.0",
140
- "aegir": "^33.1.1",
142
+ "aegir": "^36.0.0",
141
143
  "buffer": "^6.0.3",
142
144
  "datastore-core": "^6.0.7",
143
145
  "delay": "^5.0.0",
144
- "interop-libp2p": "^0.4.0",
145
146
  "into-stream": "^7.0.0",
146
147
  "ipfs-http-client": "^52.0.2",
147
148
  "it-concat": "^2.0.0",
@@ -154,7 +155,8 @@
154
155
  "libp2p-floodsub": "^0.27.0",
155
156
  "libp2p-gossipsub": "^0.11.0",
156
157
  "libp2p-interfaces-compliance-tests": "^1.0.0",
157
- "libp2p-kad-dht": "^0.24.2",
158
+ "libp2p-interop": "^0.5.0",
159
+ "libp2p-kad-dht": "^0.26.5",
158
160
  "libp2p-mdns": "^0.17.0",
159
161
  "libp2p-mplex": "^0.10.1",
160
162
  "libp2p-tcp": "^0.17.0",
@@ -186,21 +188,22 @@
186
188
  "Richard Littauer <richard.littauer@gmail.com>",
187
189
  "a1300 <matthias-knopp@gmx.net>",
188
190
  "Ryan Bell <ryan@piing.net>",
191
+ "Elven <mon.samuel@qq.com>",
189
192
  "ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ <victorbjelkholm@gmail.com>",
190
- "Franck Royer <franck@royer.one>",
191
193
  "Thomas Eizinger <thomas@eizinger.io>",
192
- "Giovanni T. Parra <fiatjaf@gmail.com>",
193
- "acolytec3 <17355484+acolytec3@users.noreply.github.com>",
194
- "Elven <mon.samuel@qq.com>",
194
+ "Robert Kiel <robert.kiel@hoprnet.org>",
195
195
  "Andrew Nesbitt <andrewnez@gmail.com>",
196
196
  "Samlior <samlior@foxmail.com>",
197
+ "acolytec3 <17355484+acolytec3@users.noreply.github.com>",
198
+ "Franck Royer <franck@royer.one>",
199
+ "Giovanni T. Parra <fiatjaf@gmail.com>",
197
200
  "Didrik Nordström <didrik.nordstrom@gmail.com>",
198
201
  "RasmusErik Voel Jensen <github@solsort.com>",
199
- "Robert Kiel <robert.kiel@hoprnet.org>",
200
202
  "Smite Chow <xiaopengyou@live.com>",
201
203
  "Soeren <nikorpoulsen@gmail.com>",
202
204
  "Sönke Hahn <soenkehahn@gmail.com>",
203
205
  "TJKoury <TJKoury@gmail.com>",
206
+ "TheStarBoys <41286328+TheStarBoys@users.noreply.github.com>",
204
207
  "Tiago Alves <alvesjtiago@gmail.com>",
205
208
  "XiaoZhang <zxinmyth@gmail.com>",
206
209
  "Yusef Napora <yusef@napora.org>",
@@ -210,11 +213,13 @@
210
213
  "isan_rivkin <isanrivkin@gmail.com>",
211
214
  "mayerwin <mayerwin@users.noreply.github.com>",
212
215
  "mcclure <andi.m.mcclure@gmail.com>",
216
+ "patrickwoodhead <91056047+patrickwoodhead@users.noreply.github.com>",
213
217
  "phillmac <phillmac@users.noreply.github.com>",
214
218
  "robertkiel <robert.kiel@validitylabs.org>",
215
219
  "shresthagrawal <34920931+shresthagrawal@users.noreply.github.com>",
216
220
  "swedneck <40505480+swedneck@users.noreply.github.com>",
217
221
  "greenSnot <greenSnot@users.noreply.github.com>",
222
+ "Alan Smithee <ggnore.alan.smithee@gmail.com>",
218
223
  "Aleksei <vozhdb@gmail.com>",
219
224
  "Bernd Strehl <bernd.strehl@gmail.com>",
220
225
  "Chris Bratlien <chrisbratlien@gmail.com>",
@@ -116,7 +116,7 @@ class AutoRelay {
116
116
  this._peerStore.metadataBook.set(peerId, HOP_METADATA_KEY, uint8ArrayFromString(HOP_METADATA_VALUE))
117
117
  await this._addListenRelay(connection, id)
118
118
  }
119
- } catch (err) {
119
+ } catch (/** @type {any} */ err) {
120
120
  this._onError(err)
121
121
  }
122
122
  }
@@ -169,7 +169,7 @@ class AutoRelay {
169
169
  try {
170
170
  await this._transportManager.listen([new Multiaddr(listenAddr)])
171
171
  // Announce multiaddrs will update on listen success by TransportManager event being triggered
172
- } catch (err) {
172
+ } catch (/** @type {any} */ err) {
173
173
  this._onError(err)
174
174
  this._listenRelays.delete(id)
175
175
  }
@@ -267,7 +267,7 @@ class AutoRelay {
267
267
  return
268
268
  }
269
269
  }
270
- } catch (err) {
270
+ } catch (/** @type {any} */ err) {
271
271
  this._onError(err)
272
272
  }
273
273
  }
@@ -279,7 +279,7 @@ class AutoRelay {
279
279
  try {
280
280
  const connection = await this._libp2p.dial(peerId)
281
281
  await this._addListenRelay(connection, peerId.toB58String())
282
- } catch (err) {
282
+ } catch (/** @type {any} */ err) {
283
283
  this._onError(err, `could not connect and listen on known hop relay ${peerId.toB58String()}`)
284
284
  }
285
285
  }
@@ -54,7 +54,7 @@ async function handleHop ({
54
54
  // Validate the HOP request has the required input
55
55
  try {
56
56
  validateAddrs(request, streamHandler)
57
- } catch (err) {
57
+ } catch (/** @type {any} */ err) {
58
58
  return log.error('invalid hop request via peer %s', connection.remotePeer.toB58String(), err)
59
59
  }
60
60
 
@@ -93,7 +93,7 @@ async function handleHop ({
93
93
  connection: destinationConnection,
94
94
  request: stopRequest
95
95
  })
96
- } catch (err) {
96
+ } catch (/** @type {any} */ err) {
97
97
  return log.error(err)
98
98
  }
99
99
 
@@ -34,7 +34,7 @@ module.exports.handleStop = function handleStop ({
34
34
  // Validate the STOP request has the required input
35
35
  try {
36
36
  validateAddrs(request, streamHandler)
37
- } catch (err) {
37
+ } catch (/** @type {any} */ err) {
38
38
  return log.error('invalid stop request via peer %s', connection.remotePeer.toB58String(), err)
39
39
  }
40
40
 
@@ -34,7 +34,7 @@ function validateAddrs (msg, streamHandler) {
34
34
  return new Multiaddr(addr)
35
35
  })
36
36
  }
37
- } catch (err) {
37
+ } catch (/** @type {any} */ err) {
38
38
  writeResponse(streamHandler, msg.type === CircuitRelay.Type.HOP
39
39
  ? CircuitRelay.Status.HOP_DST_MULTIADDR_INVALID
40
40
  : CircuitRelay.Status.STOP_DST_MULTIADDR_INVALID)
@@ -47,7 +47,7 @@ function validateAddrs (msg, streamHandler) {
47
47
  return new Multiaddr(addr)
48
48
  })
49
49
  }
50
- } catch (err) {
50
+ } catch (/** @type {any} */ err) {
51
51
  writeResponse(streamHandler, msg.type === CircuitRelay.Type.HOP
52
52
  ? CircuitRelay.Status.HOP_SRC_MULTIADDR_INVALID
53
53
  : CircuitRelay.Status.STOP_SRC_MULTIADDR_INVALID)
@@ -87,7 +87,7 @@ class Relay {
87
87
  try {
88
88
  const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS)
89
89
  await this._libp2p.contentRouting.provide(cid)
90
- } catch (err) {
90
+ } catch (/** @type {any} */ err) {
91
91
  if (err.code === 'NO_ROUTERS_AVAILABLE') {
92
92
  log.error('a content router, such as a DHT, must be provided in order to advertise the relay service', err)
93
93
  // Stop the advertise
@@ -171,7 +171,7 @@ class Circuit {
171
171
  log('new outbound connection %s', maConn.remoteAddr)
172
172
 
173
173
  return this._upgrader.upgradeOutbound(maConn)
174
- } catch (err) {
174
+ } catch (/** @type {any} */ err) {
175
175
  log.error('Circuit relay dial failed', err)
176
176
  disconnectOnFailure && await relayConnection.close()
177
177
  throw err
@@ -350,7 +350,7 @@ class ConnectionManager extends EventEmitter {
350
350
  if (!this._started) {
351
351
  return
352
352
  }
353
- } catch (err) {
353
+ } catch (/** @type {any} */ err) {
354
354
  log.error('could not connect to peerStore stored peer', err)
355
355
  }
356
356
  }
@@ -8,9 +8,10 @@ const {
8
8
  requirePeers,
9
9
  maybeLimitSource
10
10
  } = require('./utils')
11
-
11
+ const drain = require('it-drain')
12
12
  const merge = require('it-merge')
13
13
  const { pipe } = require('it-pipe')
14
+ const { DHTContentRouting } = require('../dht/dht-content-routing')
14
15
 
15
16
  /**
16
17
  * @typedef {import('peer-id')} PeerId
@@ -38,7 +39,7 @@ class ContentRouting {
38
39
 
39
40
  // If we have the dht, add it to the available content routers
40
41
  if (this.dht && libp2p._config.dht.enabled) {
41
- this.routers.push(this.dht)
42
+ this.routers.push(new DHTContentRouting(this.dht))
42
43
  }
43
44
  }
44
45
 
@@ -91,12 +92,12 @@ class ContentRouting {
91
92
  * @param {number} [options.minPeers] - minimum number of peers required to successfully put
92
93
  * @returns {Promise<void>}
93
94
  */
94
- put (key, value, options) {
95
+ async put (key, value, options) {
95
96
  if (!this.libp2p.isStarted() || !this.dht.isStarted) {
96
97
  throw errCode(new Error(messages.NOT_STARTED_YET), codes.DHT_NOT_STARTED)
97
98
  }
98
99
 
99
- return this.dht.put(key, value, options)
100
+ await drain(this.dht.put(key, value, options))
100
101
  }
101
102
 
102
103
  /**
@@ -108,12 +109,18 @@ class ContentRouting {
108
109
  * @param {number} [options.timeout] - optional timeout (default: 60000)
109
110
  * @returns {Promise<GetData>}
110
111
  */
111
- get (key, options) {
112
+ async get (key, options) {
112
113
  if (!this.libp2p.isStarted() || !this.dht.isStarted) {
113
114
  throw errCode(new Error(messages.NOT_STARTED_YET), codes.DHT_NOT_STARTED)
114
115
  }
115
116
 
116
- return this.dht.get(key, options)
117
+ for await (const event of this.dht.get(key, options)) {
118
+ if (event.name === 'VALUE') {
119
+ return { from: event.peerId, val: event.value }
120
+ }
121
+ }
122
+
123
+ throw errCode(new Error(messages.NOT_FOUND), codes.ERR_NOT_FOUND)
117
124
  }
118
125
 
119
126
  /**
@@ -123,14 +130,33 @@ class ContentRouting {
123
130
  * @param {number} nVals
124
131
  * @param {Object} [options] - get options
125
132
  * @param {number} [options.timeout] - optional timeout (default: 60000)
126
- * @returns {Promise<GetData[]>}
127
133
  */
128
- async getMany (key, nVals, options) { // eslint-disable-line require-await
134
+ async * getMany (key, nVals, options) { // eslint-disable-line require-await
129
135
  if (!this.libp2p.isStarted() || !this.dht.isStarted) {
130
136
  throw errCode(new Error(messages.NOT_STARTED_YET), codes.DHT_NOT_STARTED)
131
137
  }
132
138
 
133
- return this.dht.getMany(key, nVals, options)
139
+ if (!nVals) {
140
+ return
141
+ }
142
+
143
+ let gotValues = 0
144
+
145
+ for await (const event of this.dht.get(key, options)) {
146
+ if (event.name === 'VALUE') {
147
+ yield { from: event.peerId, val: event.value }
148
+
149
+ gotValues++
150
+
151
+ if (gotValues === nVals) {
152
+ break
153
+ }
154
+ }
155
+ }
156
+
157
+ if (gotValues === 0) {
158
+ throw errCode(new Error(messages.NOT_FOUND), codes.ERR_NOT_FOUND)
159
+ }
134
160
  }
135
161
  }
136
162
 
@@ -0,0 +1,44 @@
1
+ 'use strict'
2
+
3
+ const drain = require('it-drain')
4
+
5
+ /**
6
+ * @typedef {import('peer-id')} PeerId
7
+ * @typedef {import('libp2p-interfaces/src/content-routing/types').ContentRouting} ContentRoutingModule
8
+ * @typedef {import('multiformats/cid').CID} CID
9
+ */
10
+
11
+ /**
12
+ * Wrapper class to convert events into returned values
13
+ *
14
+ * @implements {ContentRoutingModule}
15
+ */
16
+ class DHTContentRouting {
17
+ /**
18
+ * @param {import('libp2p-kad-dht').DHT} dht
19
+ */
20
+ constructor (dht) {
21
+ this._dht = dht
22
+ }
23
+
24
+ /**
25
+ * @param {CID} cid
26
+ */
27
+ async provide (cid) {
28
+ await drain(this._dht.provide(cid))
29
+ }
30
+
31
+ /**
32
+ * @param {CID} cid
33
+ * @param {*} options
34
+ */
35
+ async * findProviders (cid, options) {
36
+ for await (const event of this._dht.findProviders(cid, options)) {
37
+ if (event.name === 'PROVIDER') {
38
+ yield * event.providers
39
+ }
40
+ }
41
+ }
42
+ }
43
+
44
+ module.exports = { DHTContentRouting }
@@ -0,0 +1,51 @@
1
+ 'use strict'
2
+
3
+ const errCode = require('err-code')
4
+ const { messages, codes } = require('../errors')
5
+
6
+ /**
7
+ * @typedef {import('peer-id')} PeerId
8
+ * @typedef {import('libp2p-interfaces/src/peer-routing/types').PeerRouting} PeerRoutingModule
9
+ */
10
+
11
+ /**
12
+ * Wrapper class to convert events into returned values
13
+ *
14
+ * @implements {PeerRoutingModule}
15
+ */
16
+ class DHTPeerRouting {
17
+ /**
18
+ * @param {import('libp2p-kad-dht').DHT} dht
19
+ */
20
+ constructor (dht) {
21
+ this._dht = dht
22
+ }
23
+
24
+ /**
25
+ * @param {PeerId} peerId
26
+ * @param {any} options
27
+ */
28
+ async findPeer (peerId, options = {}) {
29
+ for await (const event of this._dht.findPeer(peerId, options)) {
30
+ if (event.name === 'FINAL_PEER') {
31
+ return event.peer
32
+ }
33
+ }
34
+
35
+ throw errCode(new Error(messages.NOT_FOUND), codes.ERR_NOT_FOUND)
36
+ }
37
+
38
+ /**
39
+ * @param {Uint8Array} key
40
+ * @param {any} options
41
+ */
42
+ async * getClosestPeers (key, options = {}) {
43
+ for await (const event of this._dht.getClosestPeers(key, options)) {
44
+ if (event.name === 'PEER_RESPONSE') {
45
+ yield * event.closer
46
+ }
47
+ }
48
+ }
49
+ }
50
+
51
+ module.exports = { DHTPeerRouting }
@@ -95,7 +95,7 @@ class Dialer {
95
95
  for (const dial of this._pendingDials.values()) {
96
96
  try {
97
97
  dial.controller.abort()
98
- } catch (err) {
98
+ } catch (/** @type {any} */ err) {
99
99
  log.error(err)
100
100
  }
101
101
  }
@@ -129,7 +129,7 @@ class Dialer {
129
129
  const connection = await pendingDial.promise
130
130
  log('dial succeeded to %s', dialTarget.id)
131
131
  return connection
132
- } catch (err) {
132
+ } catch (/** @type {any} */ err) {
133
133
  // Error is a timeout
134
134
  if (pendingDial.controller.signal.aborted) {
135
135
  err.code = codes.ERR_TIMEOUT
package/src/errors.js CHANGED
@@ -3,7 +3,8 @@
3
3
  exports.messages = {
4
4
  NOT_STARTED_YET: 'The libp2p node is not started yet',
5
5
  DHT_DISABLED: 'DHT is not available',
6
- CONN_ENCRYPTION_REQUIRED: 'At least one connection encryption module is required'
6
+ CONN_ENCRYPTION_REQUIRED: 'At least one connection encryption module is required',
7
+ NOT_FOUND: 'Not found'
7
8
  }
8
9
 
9
10
  exports.codes = {
@@ -29,6 +30,7 @@ exports.codes = {
29
30
  ERR_INVALID_PARAMETERS: 'ERR_INVALID_PARAMETERS',
30
31
  ERR_INVALID_PEER: 'ERR_INVALID_PEER',
31
32
  ERR_MUXER_UNAVAILABLE: 'ERR_MUXER_UNAVAILABLE',
33
+ ERR_NOT_FOUND: 'ERR_NOT_FOUND',
32
34
  ERR_TIMEOUT: 'ERR_TIMEOUT',
33
35
  ERR_TRANSPORT_UNAVAILABLE: 'ERR_TRANSPORT_UNAVAILABLE',
34
36
  ERR_TRANSPORT_DIAL_FAILED: 'ERR_TRANSPORT_DIAL_FAILED',
package/src/get-peer.js CHANGED
@@ -32,7 +32,7 @@ function getPeer (peer) {
32
32
 
33
33
  try {
34
34
  peer = PeerId.createFromB58String(idStr)
35
- } catch (err) {
35
+ } catch (/** @type {any} */ err) {
36
36
  throw errCode(
37
37
  new Error(`${peer} is not a valid peer type`),
38
38
  codes.ERR_INVALID_MULTIADDR
@@ -124,7 +124,7 @@ class IdentifyService {
124
124
  stream,
125
125
  consume
126
126
  )
127
- } catch (err) {
127
+ } catch (/** @type {any} */ err) {
128
128
  // Just log errors
129
129
  log.error('could not push identify update to peer', err)
130
130
  }
@@ -182,7 +182,7 @@ class IdentifyService {
182
182
  let message
183
183
  try {
184
184
  message = Message.Identify.decode(data)
185
- } catch (err) {
185
+ } catch (/** @type {any} */ err) {
186
186
  throw errCode(err, codes.ERR_INVALID_MESSAGE)
187
187
  }
188
188
 
@@ -211,14 +211,14 @@ class IdentifyService {
211
211
  this.peerStore.metadataBook.set(id, 'ProtocolVersion', uint8ArrayFromString(message.protocolVersion))
212
212
  return
213
213
  }
214
- } catch (err) {
214
+ } catch (/** @type {any} */ err) {
215
215
  log('received invalid envelope, discard it and fallback to listenAddrs is available', err)
216
216
  }
217
217
 
218
218
  // LEGACY: Update peers data in PeerStore
219
219
  try {
220
220
  this.peerStore.addressBook.set(id, listenAddrs.map((addr) => new Multiaddr(addr)))
221
- } catch (err) {
221
+ } catch (/** @type {any} */ err) {
222
222
  log.error('received invalid addrs', err)
223
223
  }
224
224
 
@@ -287,7 +287,7 @@ class IdentifyService {
287
287
  stream,
288
288
  consume
289
289
  )
290
- } catch (err) {
290
+ } catch (/** @type {any} */ err) {
291
291
  log.error('could not respond to identify request', err)
292
292
  }
293
293
  }
@@ -313,7 +313,7 @@ class IdentifyService {
313
313
  collect
314
314
  )
315
315
  message = Message.Identify.decode(data)
316
- } catch (err) {
316
+ } catch (/** @type {any} */ err) {
317
317
  return log.error('received invalid message', err)
318
318
  }
319
319
 
@@ -325,7 +325,7 @@ class IdentifyService {
325
325
  this.peerStore.protoBook.set(id, message.protocols)
326
326
  return
327
327
  }
328
- } catch (err) {
328
+ } catch (/** @type {any} */ err) {
329
329
  log('received invalid envelope, discard it and fallback to listenAddrs is available', err)
330
330
  }
331
331
 
@@ -333,7 +333,7 @@ class IdentifyService {
333
333
  try {
334
334
  this.peerStore.addressBook.set(id,
335
335
  message.listenAddrs.map((addr) => new Multiaddr(addr)))
336
- } catch (err) {
336
+ } catch (/** @type {any} */ err) {
337
337
  log.error('received invalid addrs', err)
338
338
  }
339
339
 
package/src/index.js CHANGED
@@ -301,14 +301,9 @@ class Libp2p extends EventEmitter {
301
301
  // dht provided components (peerRouting, contentRouting, dht)
302
302
  if (this._modules.dht) {
303
303
  const DHT = this._modules.dht
304
- // @ts-ignore Object is not constructable
305
- this._dht = new DHT({
304
+ // @ts-ignore TODO: types need fixing - DHT is an `object` which has no `create` method
305
+ this._dht = DHT.create({
306
306
  libp2p: this,
307
- dialer: this.dialer,
308
- peerId: this.peerId,
309
- peerStore: this.peerStore,
310
- registrar: this.registrar,
311
- datastore: this.datastore,
312
307
  ...this._config.dht
313
308
  })
314
309
  }
@@ -363,7 +358,7 @@ class Libp2p extends EventEmitter {
363
358
  await this._onStarting()
364
359
  await this._onDidStart()
365
360
  log('libp2p has started')
366
- } catch (err) {
361
+ } catch (/** @type {any} */ err) {
367
362
  this.emit('error', err)
368
363
  log.error('An error occurred starting libp2p', err)
369
364
  await this.stop()
@@ -408,7 +403,7 @@ class Libp2p extends EventEmitter {
408
403
 
409
404
  ping.unmount(this)
410
405
  this.dialer.destroy()
411
- } catch (err) {
406
+ } catch (/** @type {any} */ err) {
412
407
  if (err) {
413
408
  log.error(err)
414
409
  this.emit('error', err)
@@ -431,7 +426,7 @@ class Libp2p extends EventEmitter {
431
426
 
432
427
  try {
433
428
  await this.keychain.findKeyByName('self')
434
- } catch (err) {
429
+ } catch (/** @type {any} */ err) {
435
430
  await this.keychain.importPeer('self', this.peerId)
436
431
  }
437
432
  }
@@ -624,7 +619,7 @@ class Libp2p extends EventEmitter {
624
619
 
625
620
  // DHT subsystem
626
621
  if (this._config.dht.enabled) {
627
- this._dht && this._dht.start()
622
+ this._dht && await this._dht.start()
628
623
 
629
624
  // TODO: this should be modified once random-walk is used as
630
625
  // the other discovery modules
@@ -698,7 +693,7 @@ class Libp2p extends EventEmitter {
698
693
  log('connecting to discovered peer %s', peerId.toB58String())
699
694
  try {
700
695
  await this.dialer.connectToPeer(peerId)
701
- } catch (err) {
696
+ } catch (/** @type {any} */ err) {
702
697
  log.error(`could not connect to discovered peer ${peerId.toB58String()} with ${err}`)
703
698
  }
704
699
  }
@@ -55,7 +55,7 @@ async function encrypt (localId, conn, remoteId) {
55
55
  let peerId
56
56
  try {
57
57
  peerId = await PeerId.createFromPubKey(id.pubkey.Data)
58
- } catch (err) {
58
+ } catch (/** @type {any} */ err) {
59
59
  log.error(err)
60
60
  throw new InvalidCryptoExchangeError('Remote did not provide its public key')
61
61
  }
@@ -90,7 +90,7 @@ class CMS {
90
90
  const obj = forge.asn1.fromDer(buf)
91
91
  // @ts-ignore not defined
92
92
  cms = forge.pkcs7.messageFromAsn1(obj)
93
- } catch (err) {
93
+ } catch (/** @type {any} */ err) {
94
94
  throw errcode(new Error('Invalid CMS: ' + err.message), 'ERR_INVALID_CMS')
95
95
  }
96
96
 
@@ -114,7 +114,7 @@ class CMS {
114
114
  try {
115
115
  const key = await this.keychain.findKeyById(recipient.keyId)
116
116
  if (key) return true
117
- } catch (err) {
117
+ } catch (/** @type {any} */ err) {
118
118
  return false
119
119
  }
120
120
  return false
@@ -248,7 +248,7 @@ class Keychain {
248
248
  batch.put(DsInfoName(name), uint8ArrayFromString(JSON.stringify(keyInfo)))
249
249
 
250
250
  await batch.commit()
251
- } catch (err) {
251
+ } catch (/** @type {any} */ err) {
252
252
  return throwDelayed(err)
253
253
  }
254
254
 
@@ -284,7 +284,7 @@ class Keychain {
284
284
  try {
285
285
  const keys = await this.listKeys()
286
286
  return keys.find((k) => k.id === id)
287
- } catch (err) {
287
+ } catch (/** @type {any} */ err) {
288
288
  return throwDelayed(err)
289
289
  }
290
290
  }
@@ -304,7 +304,7 @@ class Keychain {
304
304
  try {
305
305
  const res = await this.store.get(dsname)
306
306
  return JSON.parse(uint8ArrayToString(res))
307
- } catch (err) {
307
+ } catch (/** @type {any} */ err) {
308
308
  return throwDelayed(errcode(new Error(`Key '${name}' does not exist. ${err.message}`), 'ERR_KEY_NOT_FOUND'))
309
309
  }
310
310
  }
@@ -365,7 +365,7 @@ class Keychain {
365
365
  batch.delete(oldInfoName)
366
366
  await batch.commit()
367
367
  return keyInfo
368
- } catch (err) {
368
+ } catch (/** @type {any} */ err) {
369
369
  return throwDelayed(err)
370
370
  }
371
371
  }
@@ -393,7 +393,7 @@ class Keychain {
393
393
  const dek = privates.get(this).dek
394
394
  const privateKey = await crypto.keys.import(pem, dek)
395
395
  return privateKey.export(password)
396
- } catch (err) {
396
+ } catch (/** @type {any} */ err) {
397
397
  return throwDelayed(err)
398
398
  }
399
399
  }
@@ -421,7 +421,7 @@ class Keychain {
421
421
  let privateKey
422
422
  try {
423
423
  privateKey = await crypto.keys.import(pem, password)
424
- } catch (err) {
424
+ } catch (/** @type {any} */ err) {
425
425
  return throwDelayed(errcode(new Error('Cannot read the key, most likely the password is wrong'), 'ERR_CANNOT_READ_KEY'))
426
426
  }
427
427
 
@@ -431,7 +431,7 @@ class Keychain {
431
431
  /** @type {string} */
432
432
  const dek = privates.get(this).dek
433
433
  pem = await privateKey.export(dek)
434
- } catch (err) {
434
+ } catch (/** @type {any} */ err) {
435
435
  return throwDelayed(err)
436
436
  }
437
437
 
@@ -482,7 +482,7 @@ class Keychain {
482
482
  batch.put(DsInfoName(name), uint8ArrayFromString(JSON.stringify(keyInfo)))
483
483
  await batch.commit()
484
484
  return keyInfo
485
- } catch (err) {
485
+ } catch (/** @type {any} */ err) {
486
486
  return throwDelayed(err)
487
487
  }
488
488
  }
@@ -502,7 +502,7 @@ class Keychain {
502
502
  const dsname = DsName(name)
503
503
  const res = await this.store.get(dsname)
504
504
  return uint8ArrayToString(res)
505
- } catch (err) {
505
+ } catch (/** @type {any} */ err) {
506
506
  return throwDelayed(errcode(new Error(`Key '${name}' does not exist. ${err.message}`), 'ERR_KEY_NOT_FOUND'))
507
507
  }
508
508
  }