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.
- package/dist/src/circuit/index.d.ts +2 -2
- package/dist/src/circuit/index.d.ts.map +1 -1
- package/dist/src/circuit/transport.d.ts +1 -1
- package/dist/src/circuit/transport.d.ts.map +1 -1
- package/dist/src/config.d.ts +0 -1
- package/dist/src/content-routing/index.d.ts +4 -2
- package/dist/src/content-routing/index.d.ts.map +1 -1
- package/dist/src/dht/dht-content-routing.d.ts +30 -0
- package/dist/src/dht/dht-content-routing.d.ts.map +1 -0
- package/dist/src/dht/dht-peer-routing.d.ts +29 -0
- package/dist/src/dht/dht-peer-routing.d.ts.map +1 -0
- package/dist/src/dialer/dial-request.d.ts +4 -4
- package/dist/src/dialer/dial-request.d.ts.map +1 -1
- package/dist/src/dialer/index.d.ts +1 -2
- package/dist/src/dialer/index.d.ts.map +1 -1
- package/dist/src/errors.d.ts +2 -0
- package/dist/src/identify/index.d.ts +1 -1
- package/dist/src/identify/index.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/metrics/stats.d.ts +0 -1
- package/dist/src/metrics/stats.d.ts.map +1 -1
- package/dist/src/nat-manager.d.ts.map +1 -1
- package/dist/src/peer-routing.d.ts.map +1 -1
- package/dist/src/peer-store/address-book.d.ts +1 -1
- package/dist/src/peer-store/address-book.d.ts.map +1 -1
- package/dist/src/peer-store/index.d.ts +37 -24
- package/dist/src/peer-store/index.d.ts.map +1 -1
- package/dist/src/peer-store/metadata-book.d.ts +3 -2
- package/dist/src/peer-store/metadata-book.d.ts.map +1 -1
- package/dist/src/peer-store/persistent/index.d.ts +0 -1
- package/dist/src/record/envelope/index.d.ts +23 -0
- package/dist/src/record/envelope/index.d.ts.map +1 -1
- package/dist/src/record/peer-record/index.d.ts +6 -0
- package/dist/src/record/peer-record/index.d.ts.map +1 -1
- package/dist/src/registrar.d.ts +1 -1
- package/dist/src/registrar.d.ts.map +1 -1
- package/dist/src/upgrader.d.ts +1 -1
- package/dist/src/upgrader.d.ts.map +1 -1
- package/package.json +15 -10
- package/src/circuit/auto-relay.js +4 -4
- package/src/circuit/circuit/hop.js +2 -2
- package/src/circuit/circuit/stop.js +1 -1
- package/src/circuit/circuit/utils.js +2 -2
- package/src/circuit/index.js +1 -1
- package/src/circuit/transport.js +1 -1
- package/src/connection-manager/index.js +1 -1
- package/src/content-routing/index.js +35 -9
- package/src/dht/dht-content-routing.js +44 -0
- package/src/dht/dht-peer-routing.js +51 -0
- package/src/dialer/index.js +2 -2
- package/src/errors.js +3 -1
- package/src/get-peer.js +1 -1
- package/src/identify/index.js +8 -8
- package/src/index.js +7 -12
- package/src/insecure/plaintext.js +1 -1
- package/src/keychain/cms.js +2 -2
- package/src/keychain/index.js +9 -9
- package/src/nat-manager.js +2 -2
- package/src/peer-routing.js +3 -2
- package/src/peer-store/address-book.js +1 -1
- package/src/peer-store/metadata-book.js +2 -1
- package/src/peer-store/persistent/index.js +5 -5
- package/src/pnet/crypto.js +1 -1
- package/src/pnet/key-generator.js +1 -1
- package/src/transport-manager.js +1 -1
- package/src/upgrader.js +9 -9
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "libp2p",
|
|
3
|
-
"version": "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": "^
|
|
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-
|
|
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
|
-
"
|
|
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)
|
package/src/circuit/index.js
CHANGED
|
@@ -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
|
package/src/circuit/transport.js
CHANGED
|
@@ -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
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 }
|
package/src/dialer/index.js
CHANGED
|
@@ -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
package/src/identify/index.js
CHANGED
|
@@ -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
|
|
305
|
-
this._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
|
}
|
package/src/keychain/cms.js
CHANGED
|
@@ -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
|
package/src/keychain/index.js
CHANGED
|
@@ -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
|
}
|