mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-07-10 14:21:33 +00:00
Compare commits
1 Commits
v0.34.0
...
chore/use-
Author | SHA1 | Date | |
---|---|---|---|
7781075a7a |
65
.github/workflows/examples.yml
vendored
65
.github/workflows/examples.yml
vendored
@ -12,9 +12,6 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm install
|
||||
- run: npx aegir lint
|
||||
- run: npx aegir ts -p check
|
||||
@ -24,118 +21,82 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm install
|
||||
- run: cd examples && npm i && npm run test -- auto-relay
|
||||
- run: cd examples && npm install && npm run test -- auto-relay
|
||||
test-chat-example:
|
||||
needs: check
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm install
|
||||
- run: cd examples && npm i && npm run test -- chat
|
||||
- run: cd examples && npm install && npm run test -- chat
|
||||
test-connection-encryption-example:
|
||||
needs: check
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm install
|
||||
- run: cd examples && npm i && npm run test -- connection-encryption
|
||||
- run: cd examples && npm install && npm run test -- connection-encryption
|
||||
test-discovery-mechanisms-example:
|
||||
needs: check
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm install
|
||||
- run: cd examples && npm i && npm run test -- discovery-mechanisms
|
||||
- run: cd examples && npm install && npm run test -- discovery-mechanisms
|
||||
test-echo-example:
|
||||
needs: check
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm install
|
||||
- run: cd examples && npm i && npm run test -- echo
|
||||
- run: cd examples && npm install && npm run test -- echo
|
||||
test-libp2p-in-the-browser-example:
|
||||
needs: check
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm install
|
||||
- run: cd examples && npm i && npm run test -- libp2p-in-the-browser
|
||||
- run: cd examples && npm install && npm run test -- libp2p-in-the-browser
|
||||
test-peer-and-content-routing-example:
|
||||
needs: check
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm install
|
||||
- run: cd examples && npm i && npm run test -- peer-and-content-routing
|
||||
- run: cd examples && npm install && npm run test -- peer-and-content-routing
|
||||
test-pnet-example:
|
||||
needs: check
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm install
|
||||
- run: cd examples && npm i && npm run test -- pnet
|
||||
- run: cd examples && npm install && npm run test -- pnet
|
||||
test-protocol-and-stream-muxing-example:
|
||||
needs: check
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm install
|
||||
- run: cd examples && npm i && npm run test -- protocol-and-stream-muxing
|
||||
- run: cd examples && npm install && npm run test -- protocol-and-stream-muxing
|
||||
test-pubsub-example:
|
||||
needs: check
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm install
|
||||
- run: cd examples && npm i && npm run test -- pubsub
|
||||
- run: cd examples && npm install && npm run test -- pubsub
|
||||
test-transports-example:
|
||||
needs: check
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm install
|
||||
- run: cd examples && npm i && npm run test -- transports
|
||||
- run: cd examples && npm install && npm run test -- transports
|
||||
test-webrtc-direct-example:
|
||||
needs: check
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm install -g @mapbox/node-pre-gyp && npm install
|
||||
- run: cd examples && npm i && npm run test -- webrtc-direct
|
||||
- run: npm install
|
||||
- run: cd examples && npm install && npm run test -- webrtc-direct
|
3
.github/workflows/main.yml
vendored
3
.github/workflows/main.yml
vendored
@ -17,6 +17,7 @@ jobs:
|
||||
node-version: 14
|
||||
- run: npm install
|
||||
- run: npx aegir lint
|
||||
- uses: gozala/typescript-error-reporter-action@v1.0.8
|
||||
- run: npx aegir build
|
||||
- run: npx aegir dep-check
|
||||
- uses: ipfs/aegir/actions/bundle-size@v32.1.0
|
||||
@ -66,4 +67,4 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: npm install
|
||||
- run: npm run test:interop -- --bail -- --exit
|
||||
- run: cd node_modules/interop-libp2p && yarn && LIBP2P_JS=${GITHUB_WORKSPACE}/src/index.js npx aegir test -t node --bail -- --exit
|
||||
|
19
CHANGELOG.md
19
CHANGELOG.md
@ -1,22 +1,3 @@
|
||||
# [0.34.0](https://github.com/libp2p/js-libp2p/compare/v0.33.0...v0.34.0) (2021-11-25)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* private ip ts compile has no call signatures ([#1020](https://github.com/libp2p/js-libp2p/issues/1020)) ([77d7cb8](https://github.com/libp2p/js-libp2p/commit/77d7cb8f0815f2cdd3bfdfa8b641a7a186fe9520))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* update dht ([#1009](https://github.com/libp2p/js-libp2p/issues/1009)) ([2f598eb](https://github.com/libp2p/js-libp2p/commit/2f598eba09cff4301474af08196158065e3602d8))
|
||||
|
||||
|
||||
### BREAKING CHANGES
|
||||
|
||||
* libp2p-kad-dht has a new event-based API which is exposed as `_dht`
|
||||
|
||||
|
||||
|
||||
# [0.33.0](https://github.com/libp2p/js-libp2p/compare/v0.32.5...v0.33.0) (2021-09-24)
|
||||
|
||||
|
||||
|
@ -2086,7 +2086,7 @@ the NatManager performing NAT hole punching.
|
||||
|
||||
[address]: https://github.com/libp2p/js-libp2p/tree/master/src/peer-store/address-book.js
|
||||
[cid]: https://github.com/multiformats/js-cid
|
||||
[connection]: https://github.com/libp2p/js-libp2p-interfaces/tree/master/packages/interfaces/src/connection
|
||||
[connection]: https://github.com/libp2p/js-interfaces/tree/master/src/connection
|
||||
[multiaddr]: https://github.com/multiformats/js-multiaddr
|
||||
[peer-id]: https://github.com/libp2p/js-peer-id
|
||||
[keys]: https://github.com/libp2p/js-libp2p-crypto/tree/master/src/keys
|
||||
|
@ -1,37 +1,37 @@
|
||||
#
|
||||
#
|
||||
|
||||
- [Overview](#overview)
|
||||
- [Modules](#modules)
|
||||
- [Transport](#transport)
|
||||
- [Stream Multiplexing](#stream-multiplexing)
|
||||
- [Connection Encryption](#connection-encryption)
|
||||
- [Peer Discovery](#peer-discovery)
|
||||
- [Content Routing](#content-routing)
|
||||
- [Peer Routing](#peer-routing)
|
||||
- [DHT](#dht)
|
||||
- [Pubsub](#pubsub)
|
||||
- [Customizing libp2p](#customizing-libp2p)
|
||||
- [Examples](#examples)
|
||||
- [Basic setup](#basic-setup)
|
||||
- [Customizing Peer Discovery](#customizing-peer-discovery)
|
||||
- [Setup webrtc transport and discovery](#setup-webrtc-transport-and-discovery)
|
||||
- [Customizing Pubsub](#customizing-pubsub)
|
||||
- [Customizing DHT](#customizing-dht)
|
||||
- [Setup with Content and Peer Routing](#setup-with-content-and-peer-routing)
|
||||
- [Setup with Relay](#setup-with-relay)
|
||||
- [Setup with Auto Relay](#setup-with-auto-relay)
|
||||
- [Setup with Keychain](#setup-with-keychain)
|
||||
- [Configuring Dialing](#configuring-dialing)
|
||||
- [Configuring Connection Manager](#configuring-connection-manager)
|
||||
- [Configuring Transport Manager](#configuring-transport-manager)
|
||||
- [Configuring Metrics](#configuring-metrics)
|
||||
- [Configuring PeerStore](#configuring-peerstore)
|
||||
- [Customizing Transports](#customizing-transports)
|
||||
- [Configuring the NAT Manager](#configuring-the-nat-manager)
|
||||
- [Browser support](#browser-support)
|
||||
- [UPnP and NAT-PMP](#upnp-and-nat-pmp)
|
||||
- [Configuring protocol name](#configuring-protocol-name)
|
||||
- [Configuration examples](#configuration-examples)
|
||||
- [Configuration](#configuration)
|
||||
- [Overview](#overview)
|
||||
- [Modules](#modules)
|
||||
- [Transport](#transport)
|
||||
- [Stream Multiplexing](#stream-multiplexing)
|
||||
- [Connection Encryption](#connection-encryption)
|
||||
- [Peer Discovery](#peer-discovery)
|
||||
- [Content Routing](#content-routing)
|
||||
- [Peer Routing](#peer-routing)
|
||||
- [DHT](#dht)
|
||||
- [Pubsub](#pubsub)
|
||||
- [Customizing libp2p](#customizing-libp2p)
|
||||
- [Examples](#examples)
|
||||
- [Basic setup](#basic-setup)
|
||||
- [Customizing Peer Discovery](#customizing-peer-discovery)
|
||||
- [Setup webrtc transport and discovery](#setup-webrtc-transport-and-discovery)
|
||||
- [Customizing Pubsub](#customizing-pubsub)
|
||||
- [Customizing DHT](#customizing-dht)
|
||||
- [Setup with Content and Peer Routing](#setup-with-content-and-peer-routing)
|
||||
- [Setup with Relay](#setup-with-relay)
|
||||
- [Setup with Auto Relay](#setup-with-auto-relay)
|
||||
- [Setup with Keychain](#setup-with-keychain)
|
||||
- [Configuring Dialing](#configuring-dialing)
|
||||
- [Configuring Connection Manager](#configuring-connection-manager)
|
||||
- [Configuring Transport Manager](#configuring-transport-manager)
|
||||
- [Configuring Metrics](#configuring-metrics)
|
||||
- [Configuring PeerStore](#configuring-peerstore)
|
||||
- [Customizing Transports](#customizing-transports)
|
||||
- [Configuring the NAT Manager](#configuring-the-nat-manager)
|
||||
- [Browser support](#browser-support)
|
||||
- [UPnP and NAT-PMP](#upnp-and-nat-pmp)
|
||||
- [Configuration examples](#configuration-examples)
|
||||
|
||||
## Overview
|
||||
|
||||
@ -374,7 +374,11 @@ const node = await Libp2p.create({
|
||||
dht: { // The DHT options (and defaults) can be found in its documentation
|
||||
kBucketSize: 20,
|
||||
enabled: true, // This flag is required for DHT to run (disabled by default)
|
||||
clientMode: false // Whether to run the WAN DHT in client or server mode (default: client mode)
|
||||
randomWalk: {
|
||||
enabled: true, // Allows to disable discovery (enabled by default)
|
||||
interval: 300e3,
|
||||
timeout: 10e3
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
@ -784,7 +788,7 @@ By default under nodejs libp2p will attempt to use [UPnP](https://en.wikipedia.o
|
||||
|
||||
#### Configuring protocol name
|
||||
|
||||
Changing the protocol name prefix can isolate default public network (IPFS) for custom purposes.
|
||||
Changing the protocol name prefix can isolate default public network (IPFS) for custom purposes.
|
||||
|
||||
```js
|
||||
const node = await Libp2p.create({
|
||||
|
@ -7,7 +7,7 @@
|
||||
"libp2p": "github:libp2p/js-libp2p#master",
|
||||
"libp2p-delegated-content-routing": "~0.2.2",
|
||||
"libp2p-delegated-peer-routing": "~0.2.2",
|
||||
"libp2p-kad-dht": "^0.26.5",
|
||||
"libp2p-kad-dht": "~0.14.12",
|
||||
"libp2p-mplex": "~0.8.5",
|
||||
"libp2p-secio": "~0.11.1",
|
||||
"libp2p-webrtc-star": "~0.15.8",
|
||||
|
@ -55,7 +55,7 @@ const node = await Libp2p.create({
|
||||
peerId,
|
||||
addresses: {
|
||||
listen: ['/ip4/0.0.0.0/tcp/0']
|
||||
},
|
||||
}
|
||||
modules: {
|
||||
transport: [ TCP ],
|
||||
streamMuxer: [ Mplex ],
|
||||
@ -117,7 +117,7 @@ const createNode = () => {
|
||||
return Libp2p.create({
|
||||
addresses: {
|
||||
listen: ['/ip4/0.0.0.0/tcp/0']
|
||||
},
|
||||
}
|
||||
modules: {
|
||||
transport: [ TCP ],
|
||||
streamMuxer: [ Mplex ],
|
||||
@ -144,13 +144,8 @@ const [node1, node2] = await Promise.all([
|
||||
createNode()
|
||||
])
|
||||
|
||||
node1.on('peer:discovery', (peer) => console.log('Discovered:', peerId.toB58String()))
|
||||
node2.on('peer:discovery', (peer) => console.log('Discovered:', peerId.toB58String()))
|
||||
|
||||
await Promise.all([
|
||||
node1.start(),
|
||||
node2.start()
|
||||
])
|
||||
node1.on('peer:discovery', (peer) => console.log('Discovered:', peer.id.toB58String()))
|
||||
node2.on('peer:discovery', (peer) => console.log('Discovered:', peer.id.toB58String()))
|
||||
```
|
||||
|
||||
If you run this example, you will see the other peers being discovered.
|
||||
|
@ -38,7 +38,7 @@ async function run() {
|
||||
)
|
||||
await browser.close();
|
||||
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
process.exit(1)
|
||||
} finally {
|
||||
|
@ -81,7 +81,7 @@ function print ({ stream }) {
|
||||
// node 3 (listening WebSockets) can dial node 1 (TCP)
|
||||
try {
|
||||
await node3.dialProtocol(node1.peerId, '/print')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
console.log('node 3 failed to dial to node 1 with:', err.message)
|
||||
}
|
||||
})();
|
||||
|
@ -91,7 +91,7 @@ const concat = require('it-concat')
|
||||
const MPLEX = require('libp2p-mplex')
|
||||
```
|
||||
|
||||
We are going to reuse the `createNode` function from step 1, but this time add a stream multiplexer from `libp2p-mplex`.
|
||||
We are going to reuse the `createNode` function from step 1, but this time add a stream multiplexer from `libp2p-mplex`.
|
||||
```js
|
||||
const createNode = async () => {
|
||||
const node = await Libp2p.create({
|
||||
|
@ -9,7 +9,7 @@ async function isExecutable (command) {
|
||||
await fs.access(command, fs.constants.X_OK)
|
||||
|
||||
return true
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
if (err.code === 'ENOENT') {
|
||||
return isExecutable(await which(command))
|
||||
}
|
||||
@ -49,7 +49,7 @@ async function waitForOutput (expectedOutput, command, args = [], opts = {}) {
|
||||
|
||||
try {
|
||||
await proc
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
if (!err.killed) {
|
||||
throw err
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ async function test () {
|
||||
{ timeout: 10000 }
|
||||
)
|
||||
await browser.close();
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
process.exit(1)
|
||||
} finally {
|
||||
|
25
package.json
25
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "libp2p",
|
||||
"version": "0.34.0",
|
||||
"version": "0.33.0",
|
||||
"description": "JavaScript implementation of libp2p, a modular peer to peer network stack",
|
||||
"leadMaintainer": "Jacob Heun <jacobheun@gmail.com>",
|
||||
"main": "src/index.js",
|
||||
@ -41,7 +41,6 @@
|
||||
"test:node": "aegir test -t node -f \"./test/**/*.{node,spec}.js\"",
|
||||
"test:browser": "aegir test -t browser",
|
||||
"test:examples": "cd examples && npm run test:all",
|
||||
"test:interop": "LIBP2P_JS=$PWD npx aegir test -t node -f ./node_modules/libp2p-interop/test/*",
|
||||
"prepare": "aegir build --no-bundle",
|
||||
"release": "aegir release -t node -t browser",
|
||||
"release-minor": "aegir release --type minor -t node -t browser",
|
||||
@ -75,8 +74,7 @@
|
||||
"extends": "ipfs",
|
||||
"ignorePatterns": [
|
||||
"!.aegir.js",
|
||||
"test/ts-use",
|
||||
"*.d.ts"
|
||||
"test/ts-use"
|
||||
]
|
||||
},
|
||||
"dependencies": {
|
||||
@ -139,10 +137,11 @@
|
||||
"@types/node": "^16.0.1",
|
||||
"@types/node-forge": "^0.10.1",
|
||||
"@types/varint": "^6.0.0",
|
||||
"aegir": "^36.0.0",
|
||||
"aegir": "^33.1.1",
|
||||
"buffer": "^6.0.3",
|
||||
"datastore-core": "^6.0.7",
|
||||
"delay": "^5.0.0",
|
||||
"interop-libp2p": "^0.4.0",
|
||||
"into-stream": "^7.0.0",
|
||||
"ipfs-http-client": "^52.0.2",
|
||||
"it-concat": "^2.0.0",
|
||||
@ -155,8 +154,7 @@
|
||||
"libp2p-floodsub": "^0.27.0",
|
||||
"libp2p-gossipsub": "^0.11.0",
|
||||
"libp2p-interfaces-compliance-tests": "^1.0.0",
|
||||
"libp2p-interop": "^0.5.0",
|
||||
"libp2p-kad-dht": "^0.26.5",
|
||||
"libp2p-kad-dht": "^0.24.2",
|
||||
"libp2p-mdns": "^0.17.0",
|
||||
"libp2p-mplex": "^0.10.1",
|
||||
"libp2p-tcp": "^0.17.0",
|
||||
@ -188,22 +186,21 @@
|
||||
"Richard Littauer <richard.littauer@gmail.com>",
|
||||
"a1300 <matthias-knopp@gmx.net>",
|
||||
"Ryan Bell <ryan@piing.net>",
|
||||
"Elven <mon.samuel@qq.com>",
|
||||
"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ <victorbjelkholm@gmail.com>",
|
||||
"Franck Royer <franck@royer.one>",
|
||||
"Thomas Eizinger <thomas@eizinger.io>",
|
||||
"Robert Kiel <robert.kiel@hoprnet.org>",
|
||||
"Giovanni T. Parra <fiatjaf@gmail.com>",
|
||||
"acolytec3 <17355484+acolytec3@users.noreply.github.com>",
|
||||
"Elven <mon.samuel@qq.com>",
|
||||
"Andrew Nesbitt <andrewnez@gmail.com>",
|
||||
"Samlior <samlior@foxmail.com>",
|
||||
"acolytec3 <17355484+acolytec3@users.noreply.github.com>",
|
||||
"Franck Royer <franck@royer.one>",
|
||||
"Giovanni T. Parra <fiatjaf@gmail.com>",
|
||||
"Didrik Nordström <didrik.nordstrom@gmail.com>",
|
||||
"RasmusErik Voel Jensen <github@solsort.com>",
|
||||
"Robert Kiel <robert.kiel@hoprnet.org>",
|
||||
"Smite Chow <xiaopengyou@live.com>",
|
||||
"Soeren <nikorpoulsen@gmail.com>",
|
||||
"Sönke Hahn <soenkehahn@gmail.com>",
|
||||
"TJKoury <TJKoury@gmail.com>",
|
||||
"TheStarBoys <41286328+TheStarBoys@users.noreply.github.com>",
|
||||
"Tiago Alves <alvesjtiago@gmail.com>",
|
||||
"XiaoZhang <zxinmyth@gmail.com>",
|
||||
"Yusef Napora <yusef@napora.org>",
|
||||
@ -213,13 +210,11 @@
|
||||
"isan_rivkin <isanrivkin@gmail.com>",
|
||||
"mayerwin <mayerwin@users.noreply.github.com>",
|
||||
"mcclure <andi.m.mcclure@gmail.com>",
|
||||
"patrickwoodhead <91056047+patrickwoodhead@users.noreply.github.com>",
|
||||
"phillmac <phillmac@users.noreply.github.com>",
|
||||
"robertkiel <robert.kiel@validitylabs.org>",
|
||||
"shresthagrawal <34920931+shresthagrawal@users.noreply.github.com>",
|
||||
"swedneck <40505480+swedneck@users.noreply.github.com>",
|
||||
"greenSnot <greenSnot@users.noreply.github.com>",
|
||||
"Alan Smithee <ggnore.alan.smithee@gmail.com>",
|
||||
"Aleksei <vozhdb@gmail.com>",
|
||||
"Bernd Strehl <bernd.strehl@gmail.com>",
|
||||
"Chris Bratlien <chrisbratlien@gmail.com>",
|
||||
|
@ -116,7 +116,7 @@ class AutoRelay {
|
||||
this._peerStore.metadataBook.set(peerId, HOP_METADATA_KEY, uint8ArrayFromString(HOP_METADATA_VALUE))
|
||||
await this._addListenRelay(connection, id)
|
||||
}
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
this._onError(err)
|
||||
}
|
||||
}
|
||||
@ -169,7 +169,7 @@ class AutoRelay {
|
||||
try {
|
||||
await this._transportManager.listen([new Multiaddr(listenAddr)])
|
||||
// Announce multiaddrs will update on listen success by TransportManager event being triggered
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
this._onError(err)
|
||||
this._listenRelays.delete(id)
|
||||
}
|
||||
@ -267,7 +267,7 @@ class AutoRelay {
|
||||
return
|
||||
}
|
||||
}
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
this._onError(err)
|
||||
}
|
||||
}
|
||||
@ -279,7 +279,7 @@ class AutoRelay {
|
||||
try {
|
||||
const connection = await this._libp2p.dial(peerId)
|
||||
await this._addListenRelay(connection, peerId.toB58String())
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
this._onError(err, `could not connect and listen on known hop relay ${peerId.toB58String()}`)
|
||||
}
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ async function handleHop ({
|
||||
// Validate the HOP request has the required input
|
||||
try {
|
||||
validateAddrs(request, streamHandler)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
return log.error('invalid hop request via peer %s', connection.remotePeer.toB58String(), err)
|
||||
}
|
||||
|
||||
@ -93,7 +93,7 @@ async function handleHop ({
|
||||
connection: destinationConnection,
|
||||
request: stopRequest
|
||||
})
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
return log.error(err)
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ module.exports.handleStop = function handleStop ({
|
||||
// Validate the STOP request has the required input
|
||||
try {
|
||||
validateAddrs(request, streamHandler)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
return log.error('invalid stop request via peer %s', connection.remotePeer.toB58String(), err)
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ function validateAddrs (msg, streamHandler) {
|
||||
return new Multiaddr(addr)
|
||||
})
|
||||
}
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
writeResponse(streamHandler, msg.type === CircuitRelay.Type.HOP
|
||||
? CircuitRelay.Status.HOP_DST_MULTIADDR_INVALID
|
||||
: CircuitRelay.Status.STOP_DST_MULTIADDR_INVALID)
|
||||
@ -47,7 +47,7 @@ function validateAddrs (msg, streamHandler) {
|
||||
return new Multiaddr(addr)
|
||||
})
|
||||
}
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
writeResponse(streamHandler, msg.type === CircuitRelay.Type.HOP
|
||||
? CircuitRelay.Status.HOP_SRC_MULTIADDR_INVALID
|
||||
: CircuitRelay.Status.STOP_SRC_MULTIADDR_INVALID)
|
||||
|
@ -87,7 +87,7 @@ class Relay {
|
||||
try {
|
||||
const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS)
|
||||
await this._libp2p.contentRouting.provide(cid)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
if (err.code === 'NO_ROUTERS_AVAILABLE') {
|
||||
log.error('a content router, such as a DHT, must be provided in order to advertise the relay service', err)
|
||||
// Stop the advertise
|
||||
|
@ -171,7 +171,7 @@ class Circuit {
|
||||
log('new outbound connection %s', maConn.remoteAddr)
|
||||
|
||||
return this._upgrader.upgradeOutbound(maConn)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error('Circuit relay dial failed', err)
|
||||
disconnectOnFailure && await relayConnection.close()
|
||||
throw err
|
||||
|
@ -350,7 +350,7 @@ class ConnectionManager extends EventEmitter {
|
||||
if (!this._started) {
|
||||
return
|
||||
}
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error('could not connect to peerStore stored peer', err)
|
||||
}
|
||||
}
|
||||
|
@ -8,10 +8,9 @@ const {
|
||||
requirePeers,
|
||||
maybeLimitSource
|
||||
} = require('./utils')
|
||||
const drain = require('it-drain')
|
||||
|
||||
const merge = require('it-merge')
|
||||
const { pipe } = require('it-pipe')
|
||||
const { DHTContentRouting } = require('../dht/dht-content-routing')
|
||||
|
||||
/**
|
||||
* @typedef {import('peer-id')} PeerId
|
||||
@ -39,7 +38,7 @@ class ContentRouting {
|
||||
|
||||
// If we have the dht, add it to the available content routers
|
||||
if (this.dht && libp2p._config.dht.enabled) {
|
||||
this.routers.push(new DHTContentRouting(this.dht))
|
||||
this.routers.push(this.dht)
|
||||
}
|
||||
}
|
||||
|
||||
@ -92,12 +91,12 @@ class ContentRouting {
|
||||
* @param {number} [options.minPeers] - minimum number of peers required to successfully put
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async put (key, value, options) {
|
||||
put (key, value, options) {
|
||||
if (!this.libp2p.isStarted() || !this.dht.isStarted) {
|
||||
throw errCode(new Error(messages.NOT_STARTED_YET), codes.DHT_NOT_STARTED)
|
||||
}
|
||||
|
||||
await drain(this.dht.put(key, value, options))
|
||||
return this.dht.put(key, value, options)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -109,18 +108,12 @@ class ContentRouting {
|
||||
* @param {number} [options.timeout] - optional timeout (default: 60000)
|
||||
* @returns {Promise<GetData>}
|
||||
*/
|
||||
async get (key, options) {
|
||||
get (key, options) {
|
||||
if (!this.libp2p.isStarted() || !this.dht.isStarted) {
|
||||
throw errCode(new Error(messages.NOT_STARTED_YET), codes.DHT_NOT_STARTED)
|
||||
}
|
||||
|
||||
for await (const event of this.dht.get(key, options)) {
|
||||
if (event.name === 'VALUE') {
|
||||
return { from: event.peerId, val: event.value }
|
||||
}
|
||||
}
|
||||
|
||||
throw errCode(new Error(messages.NOT_FOUND), codes.ERR_NOT_FOUND)
|
||||
return this.dht.get(key, options)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -130,33 +123,14 @@ class ContentRouting {
|
||||
* @param {number} nVals
|
||||
* @param {Object} [options] - get options
|
||||
* @param {number} [options.timeout] - optional timeout (default: 60000)
|
||||
* @returns {Promise<GetData[]>}
|
||||
*/
|
||||
async * getMany (key, nVals, options) { // eslint-disable-line require-await
|
||||
async getMany (key, nVals, options) { // eslint-disable-line require-await
|
||||
if (!this.libp2p.isStarted() || !this.dht.isStarted) {
|
||||
throw errCode(new Error(messages.NOT_STARTED_YET), codes.DHT_NOT_STARTED)
|
||||
}
|
||||
|
||||
if (!nVals) {
|
||||
return
|
||||
}
|
||||
|
||||
let gotValues = 0
|
||||
|
||||
for await (const event of this.dht.get(key, options)) {
|
||||
if (event.name === 'VALUE') {
|
||||
yield { from: event.peerId, val: event.value }
|
||||
|
||||
gotValues++
|
||||
|
||||
if (gotValues === nVals) {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (gotValues === 0) {
|
||||
throw errCode(new Error(messages.NOT_FOUND), codes.ERR_NOT_FOUND)
|
||||
}
|
||||
return this.dht.getMany(key, nVals, options)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,44 +0,0 @@
|
||||
'use strict'
|
||||
|
||||
const drain = require('it-drain')
|
||||
|
||||
/**
|
||||
* @typedef {import('peer-id')} PeerId
|
||||
* @typedef {import('libp2p-interfaces/src/content-routing/types').ContentRouting} ContentRoutingModule
|
||||
* @typedef {import('multiformats/cid').CID} CID
|
||||
*/
|
||||
|
||||
/**
|
||||
* Wrapper class to convert events into returned values
|
||||
*
|
||||
* @implements {ContentRoutingModule}
|
||||
*/
|
||||
class DHTContentRouting {
|
||||
/**
|
||||
* @param {import('libp2p-kad-dht').DHT} dht
|
||||
*/
|
||||
constructor (dht) {
|
||||
this._dht = dht
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {CID} cid
|
||||
*/
|
||||
async provide (cid) {
|
||||
await drain(this._dht.provide(cid))
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {CID} cid
|
||||
* @param {*} options
|
||||
*/
|
||||
async * findProviders (cid, options) {
|
||||
for await (const event of this._dht.findProviders(cid, options)) {
|
||||
if (event.name === 'PROVIDER') {
|
||||
yield * event.providers
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { DHTContentRouting }
|
@ -1,51 +0,0 @@
|
||||
'use strict'
|
||||
|
||||
const errCode = require('err-code')
|
||||
const { messages, codes } = require('../errors')
|
||||
|
||||
/**
|
||||
* @typedef {import('peer-id')} PeerId
|
||||
* @typedef {import('libp2p-interfaces/src/peer-routing/types').PeerRouting} PeerRoutingModule
|
||||
*/
|
||||
|
||||
/**
|
||||
* Wrapper class to convert events into returned values
|
||||
*
|
||||
* @implements {PeerRoutingModule}
|
||||
*/
|
||||
class DHTPeerRouting {
|
||||
/**
|
||||
* @param {import('libp2p-kad-dht').DHT} dht
|
||||
*/
|
||||
constructor (dht) {
|
||||
this._dht = dht
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {PeerId} peerId
|
||||
* @param {any} options
|
||||
*/
|
||||
async findPeer (peerId, options = {}) {
|
||||
for await (const event of this._dht.findPeer(peerId, options)) {
|
||||
if (event.name === 'FINAL_PEER') {
|
||||
return event.peer
|
||||
}
|
||||
}
|
||||
|
||||
throw errCode(new Error(messages.NOT_FOUND), codes.ERR_NOT_FOUND)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Uint8Array} key
|
||||
* @param {any} options
|
||||
*/
|
||||
async * getClosestPeers (key, options = {}) {
|
||||
for await (const event of this._dht.getClosestPeers(key, options)) {
|
||||
if (event.name === 'PEER_RESPONSE') {
|
||||
yield * event.closer
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { DHTPeerRouting }
|
@ -95,7 +95,7 @@ class Dialer {
|
||||
for (const dial of this._pendingDials.values()) {
|
||||
try {
|
||||
dial.controller.abort()
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error(err)
|
||||
}
|
||||
}
|
||||
@ -129,7 +129,7 @@ class Dialer {
|
||||
const connection = await pendingDial.promise
|
||||
log('dial succeeded to %s', dialTarget.id)
|
||||
return connection
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
// Error is a timeout
|
||||
if (pendingDial.controller.signal.aborted) {
|
||||
err.code = codes.ERR_TIMEOUT
|
||||
|
@ -3,8 +3,7 @@
|
||||
exports.messages = {
|
||||
NOT_STARTED_YET: 'The libp2p node is not started yet',
|
||||
DHT_DISABLED: 'DHT is not available',
|
||||
CONN_ENCRYPTION_REQUIRED: 'At least one connection encryption module is required',
|
||||
NOT_FOUND: 'Not found'
|
||||
CONN_ENCRYPTION_REQUIRED: 'At least one connection encryption module is required'
|
||||
}
|
||||
|
||||
exports.codes = {
|
||||
@ -30,7 +29,6 @@ exports.codes = {
|
||||
ERR_INVALID_PARAMETERS: 'ERR_INVALID_PARAMETERS',
|
||||
ERR_INVALID_PEER: 'ERR_INVALID_PEER',
|
||||
ERR_MUXER_UNAVAILABLE: 'ERR_MUXER_UNAVAILABLE',
|
||||
ERR_NOT_FOUND: 'ERR_NOT_FOUND',
|
||||
ERR_TIMEOUT: 'ERR_TIMEOUT',
|
||||
ERR_TRANSPORT_UNAVAILABLE: 'ERR_TRANSPORT_UNAVAILABLE',
|
||||
ERR_TRANSPORT_DIAL_FAILED: 'ERR_TRANSPORT_DIAL_FAILED',
|
||||
|
@ -32,7 +32,7 @@ function getPeer (peer) {
|
||||
|
||||
try {
|
||||
peer = PeerId.createFromB58String(idStr)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
throw errCode(
|
||||
new Error(`${peer} is not a valid peer type`),
|
||||
codes.ERR_INVALID_MULTIADDR
|
||||
|
@ -124,7 +124,7 @@ class IdentifyService {
|
||||
stream,
|
||||
consume
|
||||
)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
// Just log errors
|
||||
log.error('could not push identify update to peer', err)
|
||||
}
|
||||
@ -182,7 +182,7 @@ class IdentifyService {
|
||||
let message
|
||||
try {
|
||||
message = Message.Identify.decode(data)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
throw errCode(err, codes.ERR_INVALID_MESSAGE)
|
||||
}
|
||||
|
||||
@ -211,14 +211,14 @@ class IdentifyService {
|
||||
this.peerStore.metadataBook.set(id, 'ProtocolVersion', uint8ArrayFromString(message.protocolVersion))
|
||||
return
|
||||
}
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log('received invalid envelope, discard it and fallback to listenAddrs is available', err)
|
||||
}
|
||||
|
||||
// LEGACY: Update peers data in PeerStore
|
||||
try {
|
||||
this.peerStore.addressBook.set(id, listenAddrs.map((addr) => new Multiaddr(addr)))
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error('received invalid addrs', err)
|
||||
}
|
||||
|
||||
@ -287,7 +287,7 @@ class IdentifyService {
|
||||
stream,
|
||||
consume
|
||||
)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error('could not respond to identify request', err)
|
||||
}
|
||||
}
|
||||
@ -313,7 +313,7 @@ class IdentifyService {
|
||||
collect
|
||||
)
|
||||
message = Message.Identify.decode(data)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
return log.error('received invalid message', err)
|
||||
}
|
||||
|
||||
@ -325,7 +325,7 @@ class IdentifyService {
|
||||
this.peerStore.protoBook.set(id, message.protocols)
|
||||
return
|
||||
}
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log('received invalid envelope, discard it and fallback to listenAddrs is available', err)
|
||||
}
|
||||
|
||||
@ -333,7 +333,7 @@ class IdentifyService {
|
||||
try {
|
||||
this.peerStore.addressBook.set(id,
|
||||
message.listenAddrs.map((addr) => new Multiaddr(addr)))
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error('received invalid addrs', err)
|
||||
}
|
||||
|
||||
|
19
src/index.js
19
src/index.js
@ -301,9 +301,14 @@ class Libp2p extends EventEmitter {
|
||||
// dht provided components (peerRouting, contentRouting, dht)
|
||||
if (this._modules.dht) {
|
||||
const DHT = this._modules.dht
|
||||
// @ts-ignore TODO: types need fixing - DHT is an `object` which has no `create` method
|
||||
this._dht = DHT.create({
|
||||
// @ts-ignore Object is not constructable
|
||||
this._dht = new DHT({
|
||||
libp2p: this,
|
||||
dialer: this.dialer,
|
||||
peerId: this.peerId,
|
||||
peerStore: this.peerStore,
|
||||
registrar: this.registrar,
|
||||
datastore: this.datastore,
|
||||
...this._config.dht
|
||||
})
|
||||
}
|
||||
@ -358,7 +363,7 @@ class Libp2p extends EventEmitter {
|
||||
await this._onStarting()
|
||||
await this._onDidStart()
|
||||
log('libp2p has started')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
this.emit('error', err)
|
||||
log.error('An error occurred starting libp2p', err)
|
||||
await this.stop()
|
||||
@ -403,7 +408,7 @@ class Libp2p extends EventEmitter {
|
||||
|
||||
ping.unmount(this)
|
||||
this.dialer.destroy()
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
if (err) {
|
||||
log.error(err)
|
||||
this.emit('error', err)
|
||||
@ -426,7 +431,7 @@ class Libp2p extends EventEmitter {
|
||||
|
||||
try {
|
||||
await this.keychain.findKeyByName('self')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
await this.keychain.importPeer('self', this.peerId)
|
||||
}
|
||||
}
|
||||
@ -619,7 +624,7 @@ class Libp2p extends EventEmitter {
|
||||
|
||||
// DHT subsystem
|
||||
if (this._config.dht.enabled) {
|
||||
this._dht && await this._dht.start()
|
||||
this._dht && this._dht.start()
|
||||
|
||||
// TODO: this should be modified once random-walk is used as
|
||||
// the other discovery modules
|
||||
@ -693,7 +698,7 @@ class Libp2p extends EventEmitter {
|
||||
log('connecting to discovered peer %s', peerId.toB58String())
|
||||
try {
|
||||
await this.dialer.connectToPeer(peerId)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error(`could not connect to discovered peer ${peerId.toB58String()} with ${err}`)
|
||||
}
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ async function encrypt (localId, conn, remoteId) {
|
||||
let peerId
|
||||
try {
|
||||
peerId = await PeerId.createFromPubKey(id.pubkey.Data)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error(err)
|
||||
throw new InvalidCryptoExchangeError('Remote did not provide its public key')
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ class CMS {
|
||||
const obj = forge.asn1.fromDer(buf)
|
||||
// @ts-ignore not defined
|
||||
cms = forge.pkcs7.messageFromAsn1(obj)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
throw errcode(new Error('Invalid CMS: ' + err.message), 'ERR_INVALID_CMS')
|
||||
}
|
||||
|
||||
@ -114,7 +114,7 @@ class CMS {
|
||||
try {
|
||||
const key = await this.keychain.findKeyById(recipient.keyId)
|
||||
if (key) return true
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
return false
|
||||
}
|
||||
return false
|
||||
|
@ -248,7 +248,7 @@ class Keychain {
|
||||
batch.put(DsInfoName(name), uint8ArrayFromString(JSON.stringify(keyInfo)))
|
||||
|
||||
await batch.commit()
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
return throwDelayed(err)
|
||||
}
|
||||
|
||||
@ -284,7 +284,7 @@ class Keychain {
|
||||
try {
|
||||
const keys = await this.listKeys()
|
||||
return keys.find((k) => k.id === id)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
return throwDelayed(err)
|
||||
}
|
||||
}
|
||||
@ -304,7 +304,7 @@ class Keychain {
|
||||
try {
|
||||
const res = await this.store.get(dsname)
|
||||
return JSON.parse(uint8ArrayToString(res))
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
return throwDelayed(errcode(new Error(`Key '${name}' does not exist. ${err.message}`), 'ERR_KEY_NOT_FOUND'))
|
||||
}
|
||||
}
|
||||
@ -365,7 +365,7 @@ class Keychain {
|
||||
batch.delete(oldInfoName)
|
||||
await batch.commit()
|
||||
return keyInfo
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
return throwDelayed(err)
|
||||
}
|
||||
}
|
||||
@ -393,7 +393,7 @@ class Keychain {
|
||||
const dek = privates.get(this).dek
|
||||
const privateKey = await crypto.keys.import(pem, dek)
|
||||
return privateKey.export(password)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
return throwDelayed(err)
|
||||
}
|
||||
}
|
||||
@ -421,7 +421,7 @@ class Keychain {
|
||||
let privateKey
|
||||
try {
|
||||
privateKey = await crypto.keys.import(pem, password)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
return throwDelayed(errcode(new Error('Cannot read the key, most likely the password is wrong'), 'ERR_CANNOT_READ_KEY'))
|
||||
}
|
||||
|
||||
@ -431,7 +431,7 @@ class Keychain {
|
||||
/** @type {string} */
|
||||
const dek = privates.get(this).dek
|
||||
pem = await privateKey.export(dek)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
return throwDelayed(err)
|
||||
}
|
||||
|
||||
@ -482,7 +482,7 @@ class Keychain {
|
||||
batch.put(DsInfoName(name), uint8ArrayFromString(JSON.stringify(keyInfo)))
|
||||
await batch.commit()
|
||||
return keyInfo
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
return throwDelayed(err)
|
||||
}
|
||||
}
|
||||
@ -502,7 +502,7 @@ class Keychain {
|
||||
const dsname = DsName(name)
|
||||
const res = await this.store.get(dsname)
|
||||
return uint8ArrayToString(res)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
return throwDelayed(errcode(new Error(`Key '${name}' does not exist. ${err.message}`), 'ERR_KEY_NOT_FOUND'))
|
||||
}
|
||||
}
|
||||
|
@ -114,7 +114,7 @@ class NatManager {
|
||||
const client = this._getClient()
|
||||
const publicIp = this._externalIp || await client.externalIp()
|
||||
|
||||
// @ts-expect-error types are wrong
|
||||
// @ts-ignore isPrivate has no call signatures
|
||||
if (isPrivateIp(publicIp)) {
|
||||
throw new Error(`${publicIp} is private - please set config.nat.externalIp to an externally routable IP or ensure you are not behind a double NAT`)
|
||||
}
|
||||
@ -188,7 +188,7 @@ class NatManager {
|
||||
try {
|
||||
await this._client.destroy()
|
||||
this._client = null
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error(err)
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,6 @@ const {
|
||||
clearDelayedInterval
|
||||
// @ts-ignore module with no types
|
||||
} = require('set-delayed-interval')
|
||||
const { DHTPeerRouting } = require('./dht/dht-peer-routing')
|
||||
|
||||
/**
|
||||
* @typedef {import('peer-id')} PeerId
|
||||
@ -52,7 +51,7 @@ class PeerRouting {
|
||||
|
||||
// If we have the dht, add it to the available peer routers
|
||||
if (libp2p._dht && libp2p._config.dht.enabled) {
|
||||
this._routers.push(new DHTPeerRouting(libp2p._dht))
|
||||
this._routers.push(libp2p._dht)
|
||||
}
|
||||
|
||||
this._refreshManagerOptions = libp2p._options.peerRouting.refreshManager
|
||||
@ -80,7 +79,7 @@ class PeerRouting {
|
||||
try {
|
||||
// nb getClosestPeers adds the addresses to the address book
|
||||
await drain(this.getClosestPeers(this._peerId.id))
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error(err)
|
||||
}
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ class AddressBook extends Book {
|
||||
let peerRecord
|
||||
try {
|
||||
peerRecord = PeerRecord.createFromProtobuf(envelope.payload)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error('invalid peer record received')
|
||||
return false
|
||||
}
|
||||
|
@ -80,11 +80,10 @@ class MetadataBook extends Book {
|
||||
/**
|
||||
* Set data into the datastructure
|
||||
*
|
||||
* @override
|
||||
* @param {PeerId} peerId
|
||||
* @param {string} key
|
||||
* @param {Uint8Array} value
|
||||
* @param {object} [opts]
|
||||
* @param {boolean} [opts.emit]
|
||||
*/
|
||||
_setValue (peerId, key, value, { emit = true } = {}) {
|
||||
const id = peerId.toB58String()
|
||||
|
@ -249,7 +249,7 @@ class PersistentPeerStore extends PeerStore {
|
||||
}).finish()
|
||||
|
||||
batch.put(key, encodedData)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error(err)
|
||||
}
|
||||
}
|
||||
@ -275,7 +275,7 @@ class PersistentPeerStore extends PeerStore {
|
||||
const encodedData = peerId.marshalPubKey()
|
||||
|
||||
batch.put(key, encodedData)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error(err)
|
||||
}
|
||||
}
|
||||
@ -302,7 +302,7 @@ class PersistentPeerStore extends PeerStore {
|
||||
batch.delete(key)
|
||||
}
|
||||
})
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error(err)
|
||||
}
|
||||
}
|
||||
@ -330,7 +330,7 @@ class PersistentPeerStore extends PeerStore {
|
||||
const encodedData = Protocols.encode({ protocols }).finish()
|
||||
|
||||
batch.put(key, encodedData)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error(err)
|
||||
}
|
||||
}
|
||||
@ -399,7 +399,7 @@ class PersistentPeerStore extends PeerStore {
|
||||
default:
|
||||
log('invalid data persisted for: ', key.toString())
|
||||
}
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error(err)
|
||||
}
|
||||
}
|
||||
|
@ -77,7 +77,7 @@ module.exports.decodeV1PSK = (pskBuffer) => {
|
||||
codecName: codec,
|
||||
psk: psk
|
||||
}
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error(err)
|
||||
throw new Error(Errors.INVALID_PSK)
|
||||
}
|
||||
|
@ -28,6 +28,6 @@ try {
|
||||
// @ts-ignore
|
||||
generate(process.stdout)
|
||||
}
|
||||
} catch (/** @type {any} */ error) {
|
||||
} catch (error) {
|
||||
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ class TransportManager {
|
||||
|
||||
try {
|
||||
return await transport.dial(ma, options)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
if (!err.code) err.code = codes.ERR_TRANSPORT_DIAL_FAILED
|
||||
throw err
|
||||
}
|
||||
|
@ -106,7 +106,7 @@ class Upgrader {
|
||||
} else {
|
||||
upgradedConn = encryptedConn
|
||||
}
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error('Failed to upgrade inbound connection', err)
|
||||
await maConn.close(err)
|
||||
throw err
|
||||
@ -181,7 +181,7 @@ class Upgrader {
|
||||
} else {
|
||||
upgradedConn = encryptedConn
|
||||
}
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error('Failed to upgrade outbound connection', err)
|
||||
await maConn.close(err)
|
||||
throw err
|
||||
@ -245,7 +245,7 @@ class Upgrader {
|
||||
if (this.metrics) this.metrics.trackStream({ stream, remotePeer, protocol })
|
||||
connection.addStream(muxedStream, { protocol })
|
||||
this._onStream({ connection, stream: { ...muxedStream, ...stream }, protocol })
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error(err)
|
||||
}
|
||||
},
|
||||
@ -263,7 +263,7 @@ class Upgrader {
|
||||
const { stream, protocol } = await mss.select(protocols)
|
||||
if (this.metrics) this.metrics.trackStream({ stream, remotePeer, protocol })
|
||||
return { stream: { ...muxedStream, ...stream }, protocol }
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error('could not create new stream', err)
|
||||
throw errCode(err, codes.ERR_UNSUPPORTED_PROTOCOL)
|
||||
}
|
||||
@ -283,7 +283,7 @@ class Upgrader {
|
||||
if (connection.stat.status === 'open') {
|
||||
await connection.close()
|
||||
}
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
log.error(err)
|
||||
} finally {
|
||||
this.onConnectionEnd(connection)
|
||||
@ -371,7 +371,7 @@ class Upgrader {
|
||||
...await crypto.secureInbound(localPeer, stream),
|
||||
protocol
|
||||
}
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
throw errCode(err, codes.ERR_ENCRYPTION_FAILED)
|
||||
}
|
||||
}
|
||||
@ -406,7 +406,7 @@ class Upgrader {
|
||||
...await crypto.secureOutbound(localPeer, stream, remotePeerId),
|
||||
protocol
|
||||
}
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
throw errCode(err, codes.ERR_ENCRYPTION_FAILED)
|
||||
}
|
||||
}
|
||||
@ -430,7 +430,7 @@ class Upgrader {
|
||||
log('%s selected as muxer protocol', protocol)
|
||||
const Muxer = muxers.get(protocol)
|
||||
return { stream, Muxer }
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
throw errCode(err, codes.ERR_MUXER_UNAVAILABLE)
|
||||
}
|
||||
}
|
||||
@ -453,7 +453,7 @@ class Upgrader {
|
||||
const { stream, protocol } = await listener.handle(protocols)
|
||||
const Muxer = muxers.get(protocol)
|
||||
return { stream, Muxer }
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
throw errCode(err, codes.ERR_MUXER_UNAVAILABLE)
|
||||
}
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ describe('content-routing', () => {
|
||||
try {
|
||||
for await (const _ of node.contentRouting.findProviders('a cid')) {} // eslint-disable-line
|
||||
throw new Error('.findProviders should return an error')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err).to.exist()
|
||||
expect(err.code).to.equal('NO_ROUTERS_AVAILABLE')
|
||||
}
|
||||
@ -238,7 +238,7 @@ describe('content-routing', () => {
|
||||
try {
|
||||
for await (const _ of node.contentRouting.findProviders(cid)) { } // eslint-disable-line
|
||||
throw new Error('should handle errors when finding providers')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err).to.exist()
|
||||
}
|
||||
|
||||
|
@ -125,7 +125,7 @@ describe('Dial Request', () => {
|
||||
try {
|
||||
await dialRequest.run({ signal: controller.signal })
|
||||
expect.fail('Should have thrown')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err).to.be.an.instanceof(AggregateError)
|
||||
}
|
||||
|
||||
@ -162,7 +162,7 @@ describe('Dial Request', () => {
|
||||
try {
|
||||
await dialRequest.run({ signal: controller.signal })
|
||||
expect.fail('Should have thrown')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err).to.be.an.instanceof(AggregateError)
|
||||
}
|
||||
|
||||
@ -212,7 +212,7 @@ describe('Dial Request', () => {
|
||||
setTimeout(() => controller.abort(), 100)
|
||||
await dialRequest.run({ signal: controller.signal })
|
||||
expect.fail('dial should have failed')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err).to.be.an.instanceof(AggregateError)
|
||||
}
|
||||
|
||||
|
@ -277,7 +277,7 @@ describe('Dialing (direct, TCP)', () => {
|
||||
|
||||
try {
|
||||
await libp2p.dial(remoteLibp2p.transportManager.getAddrs()[0])
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err).to.have.property('code', ErrorCodes.ERR_INVALID_MULTIADDR)
|
||||
return
|
||||
}
|
||||
|
@ -304,7 +304,7 @@ describe('Dialing (direct, WebSockets)', () => {
|
||||
dialer.destroy()
|
||||
await dialPromise
|
||||
expect.fail('should have failed')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err).to.be.an.instanceof(AggregateError)
|
||||
expect(dialer._pendingDials.size).to.equal(0) // 1 dial request
|
||||
}
|
||||
|
@ -519,7 +519,7 @@ describe('keychain', () => {
|
||||
it('should validate newPass is a string', async () => {
|
||||
try {
|
||||
await kc.rotateKeychainPass(oldPass, 1234567890)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err).to.exist()
|
||||
}
|
||||
})
|
||||
@ -527,7 +527,7 @@ describe('keychain', () => {
|
||||
it('should validate oldPass is a string', async () => {
|
||||
try {
|
||||
await kc.rotateKeychainPass(1234, 'newInsecurePassword1')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err).to.exist()
|
||||
}
|
||||
})
|
||||
@ -535,7 +535,7 @@ describe('keychain', () => {
|
||||
it('should validate newPass is at least 20 characters', async () => {
|
||||
try {
|
||||
await kc.rotateKeychainPass(oldPass, 'not20Chars')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err).to.exist()
|
||||
}
|
||||
})
|
||||
@ -586,7 +586,7 @@ describe('libp2p.keychain', () => {
|
||||
|
||||
try {
|
||||
await libp2p.keychain.createKey('keyName', 'rsa', 2048)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err).to.exist()
|
||||
return
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ describe('peer-routing', () => {
|
||||
try {
|
||||
for await (const _ of node.peerRouting.getClosestPeers('a cid')) { } // eslint-disable-line
|
||||
throw new Error('.getClosestPeers should return an error')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err).to.exist()
|
||||
expect(err.code).to.equal('NO_ROUTERS_AVAILABLE')
|
||||
}
|
||||
@ -275,7 +275,7 @@ describe('peer-routing', () => {
|
||||
try {
|
||||
for await (const _ of node.peerRouting.getClosestPeers(peerId.id)) { } // eslint-disable-line
|
||||
throw new Error('should handle errors when getting the closest peers')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err).to.exist()
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,7 @@ describe('addressBook', () => {
|
||||
it('throwns invalid parameters error if invalid PeerId is provided', () => {
|
||||
try {
|
||||
ab.set('invalid peerId')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -55,7 +55,7 @@ describe('addressBook', () => {
|
||||
it('throwns invalid parameters error if no addresses provided', () => {
|
||||
try {
|
||||
ab.set(peerId)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -65,7 +65,7 @@ describe('addressBook', () => {
|
||||
it('throwns invalid parameters error if invalid multiaddrs are provided', () => {
|
||||
try {
|
||||
ab.set(peerId, ['invalid multiaddr'])
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -159,7 +159,7 @@ describe('addressBook', () => {
|
||||
it('throwns invalid parameters error if invalid PeerId is provided', () => {
|
||||
try {
|
||||
ab.add('invalid peerId')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -169,7 +169,7 @@ describe('addressBook', () => {
|
||||
it('throwns invalid parameters error if no addresses provided', () => {
|
||||
try {
|
||||
ab.add(peerId)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -179,7 +179,7 @@ describe('addressBook', () => {
|
||||
it('throwns invalid parameters error if invalid multiaddrs are provided', () => {
|
||||
try {
|
||||
ab.add(peerId, ['invalid multiaddr'])
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -308,7 +308,7 @@ describe('addressBook', () => {
|
||||
it('throwns invalid parameters error if invalid PeerId is provided', () => {
|
||||
try {
|
||||
ab.get('invalid peerId')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -343,7 +343,7 @@ describe('addressBook', () => {
|
||||
it('throwns invalid parameters error if invalid PeerId is provided', () => {
|
||||
try {
|
||||
ab.getMultiaddrsForPeer('invalid peerId')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -391,7 +391,7 @@ describe('addressBook', () => {
|
||||
it('throwns invalid parameters error if invalid PeerId is provided', () => {
|
||||
try {
|
||||
ab.delete('invalid peerId')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ describe('keyBook', () => {
|
||||
it('throws invalid parameters error if invalid PeerId is provided in set', () => {
|
||||
try {
|
||||
kb.set('invalid peerId')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -33,7 +33,7 @@ describe('keyBook', () => {
|
||||
it('throws invalid parameters error if invalid PeerId is provided in get', () => {
|
||||
try {
|
||||
kb.get('invalid peerId')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ describe('metadataBook', () => {
|
||||
it('throws invalid parameters error if invalid PeerId is provided', () => {
|
||||
try {
|
||||
mb.set('invalid peerId')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -44,7 +44,7 @@ describe('metadataBook', () => {
|
||||
it('throws invalid parameters error if no key provided', () => {
|
||||
try {
|
||||
mb.set(peerId)
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -54,7 +54,7 @@ describe('metadataBook', () => {
|
||||
it('throws invalid parameters error if no value provided', () => {
|
||||
try {
|
||||
mb.set(peerId, 'location')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -64,7 +64,7 @@ describe('metadataBook', () => {
|
||||
it('throws invalid parameters error if value is not a buffer', () => {
|
||||
try {
|
||||
mb.set(peerId, 'location', 'mars')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -163,7 +163,7 @@ describe('metadataBook', () => {
|
||||
it('throws invalid parameters error if invalid PeerId is provided', () => {
|
||||
try {
|
||||
mb.get('invalid peerId')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -199,7 +199,7 @@ describe('metadataBook', () => {
|
||||
it('throws invalid parameters error if invalid PeerId is provided', () => {
|
||||
try {
|
||||
mb.getValue('invalid peerId')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -248,7 +248,7 @@ describe('metadataBook', () => {
|
||||
it('throwns invalid parameters error if invalid PeerId is provided', () => {
|
||||
try {
|
||||
mb.delete('invalid peerId')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
@ -305,7 +305,7 @@ describe('metadataBook', () => {
|
||||
it('throws invalid parameters error if invalid PeerId is provided', () => {
|
||||
try {
|
||||
mb.deleteValue('invalid peerId')
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err.code).to.equal(ERR_INVALID_PARAMETERS)
|
||||
return
|
||||
}
|
||||
|
@ -201,7 +201,7 @@ describe('libp2p.transportManager (dial only)', () => {
|
||||
|
||||
try {
|
||||
await libp2p.start()
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
expect(err).to.exist()
|
||||
expect(err.code).to.equal(ErrorCodes.ERR_NO_VALID_ADDRESSES)
|
||||
return
|
||||
|
@ -10,7 +10,7 @@
|
||||
"libp2p-delegated-peer-routing": "^0.10.0",
|
||||
"libp2p-gossipsub": "^0.9.0",
|
||||
"libp2p-interfaces": "^1.0.1",
|
||||
"libp2p-kad-dht": "^0.26.5",
|
||||
"libp2p-kad-dht": "^0.23.1",
|
||||
"libp2p-mplex": "^0.10.4",
|
||||
"@chainsafe/libp2p-noise": "^4.1.0",
|
||||
"libp2p-record": "^0.10.4",
|
||||
|
@ -108,7 +108,7 @@ function createConnection ({
|
||||
// Need to be able to notify a peer of this this._onStream({ connection, stream, protocol })
|
||||
const handler = protocols.get(protocol)
|
||||
handler({ connection, stream, protocol })
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
// Do nothing
|
||||
}
|
||||
},
|
||||
@ -124,7 +124,7 @@ function createConnection ({
|
||||
try {
|
||||
const { stream, protocol } = await mss.select(protocols)
|
||||
return { stream: { ...muxedStream, ...stream }, protocol }
|
||||
} catch (/** @type {any} */ err) {
|
||||
} catch (err) {
|
||||
throw errCode(err, codes.ERR_UNSUPPORTED_PROTOCOL)
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"extends": "aegir/src/config/tsconfig.aegir.json",
|
||||
"extends": "./node_modules/aegir/src/config/tsconfig.aegir.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "dist"
|
||||
},
|
||||
|
Reference in New Issue
Block a user