mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-07-22 03:51:56 +00:00
Compare commits
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
06c3a6d407 | ||
|
833f789714 | ||
|
ef24fabf02 | ||
|
3b33fb4b73 | ||
|
a07fb7960b | ||
|
b11126ca89 | ||
|
df53ab4e65 | ||
|
0701de40b1 | ||
|
d6bb967243 | ||
|
d48005b8b7 | ||
|
67b97e32da | ||
|
664ba2d1e7 | ||
|
608564b033 | ||
|
af723b355e | ||
|
13cf476148 | ||
|
39b03586e8 |
5
.github/workflows/main.yml
vendored
5
.github/workflows/main.yml
vendored
@@ -12,6 +12,9 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: 14
|
||||||
- run: npm install
|
- run: npm install
|
||||||
- run: npx aegir lint
|
- run: npx aegir lint
|
||||||
- uses: gozala/typescript-error-reporter-action@v1.0.8
|
- uses: gozala/typescript-error-reporter-action@v1.0.8
|
||||||
@@ -31,7 +34,7 @@ jobs:
|
|||||||
fail-fast: true
|
fail-fast: true
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: actions/setup-node@v1
|
- uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node }}
|
node-version: ${{ matrix.node }}
|
||||||
- run: npm install
|
- run: npm install
|
||||||
|
48
CHANGELOG.md
48
CHANGELOG.md
@@ -1,3 +1,51 @@
|
|||||||
|
## [0.32.2](https://github.com/libp2p/js-libp2p/compare/v0.32.1...v0.32.2) (2021-08-13)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* browser example ci ([3b33fb4](https://github.com/libp2p/js-libp2p/commit/3b33fb4b73ba8065e432fb59f758fe138fd23d9e))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* custom protocol name ([#962](https://github.com/libp2p/js-libp2p/issues/962)) ([ef24fab](https://github.com/libp2p/js-libp2p/commit/ef24fabf0269fd079888e92eedb458e23ef1c733))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.32.1](https://github.com/libp2p/js-libp2p/compare/v0.32.0...v0.32.1) (2021-07-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* turn compliance tests into devDependency ([#960](https://github.com/libp2p/js-libp2p/issues/960)) ([0701de4](https://github.com/libp2p/js-libp2p/commit/0701de40b1ebdf319959846d8c4fdd30b3cf34a4))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.32.0](https://github.com/libp2p/js-libp2p/compare/v0.32.0-rc.0...v0.32.0) (2021-07-15)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.32.0-rc.0](https://github.com/libp2p/js-libp2p/compare/v0.31.7...v0.32.0-rc.0) (2021-07-09)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* do not allow dial to large number of multiaddrs ([#954](https://github.com/libp2p/js-libp2p/issues/954)) ([af723b3](https://github.com/libp2p/js-libp2p/commit/af723b355e1ddf4aecf439f81c3aa67613d45fa4))
|
||||||
|
|
||||||
|
|
||||||
|
### chore
|
||||||
|
|
||||||
|
* update to new multiformats ([#948](https://github.com/libp2p/js-libp2p/issues/948)) ([13cf476](https://github.com/libp2p/js-libp2p/commit/13cf4761489d59b22924bb8ec2ec6dbe207b280c))
|
||||||
|
|
||||||
|
|
||||||
|
### BREAKING CHANGES
|
||||||
|
|
||||||
|
* uses the CID class from the new multiformats module
|
||||||
|
|
||||||
|
Co-authored-by: Vasco Santos <vasco.santos@moxy.studio>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [0.31.7](https://github.com/libp2p/js-libp2p/compare/v0.31.6...v0.31.7) (2021-06-14)
|
## [0.31.7](https://github.com/libp2p/js-libp2p/compare/v0.31.6...v0.31.7) (2021-06-14)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -525,6 +525,7 @@ Dialing in libp2p can be configured to limit the rate of dialing, and how long d
|
|||||||
| Name | Type | Description |
|
| Name | Type | Description |
|
||||||
|------|------|-------------|
|
|------|------|-------------|
|
||||||
| maxParallelDials | `number` | How many multiaddrs we can dial in parallel. |
|
| maxParallelDials | `number` | How many multiaddrs we can dial in parallel. |
|
||||||
|
| maxAddrsToDial | `number` | How many multiaddrs is the dial allowed to dial for a single peer. |
|
||||||
| maxDialsPerPeer | `number` | How many multiaddrs we can dial per peer, in parallel. |
|
| maxDialsPerPeer | `number` | How many multiaddrs we can dial per peer, in parallel. |
|
||||||
| dialTimeout | `number` | Second dial timeout per peer in ms. |
|
| dialTimeout | `number` | Second dial timeout per peer in ms. |
|
||||||
| resolvers | `object` | Dial [Resolvers](https://github.com/multiformats/js-multiaddr/blob/master/src/resolvers/index.js) for resolving multiaddrs |
|
| resolvers | `object` | Dial [Resolvers](https://github.com/multiformats/js-multiaddr/blob/master/src/resolvers/index.js) for resolving multiaddrs |
|
||||||
@@ -549,6 +550,7 @@ const node = await Libp2p.create({
|
|||||||
},
|
},
|
||||||
dialer: {
|
dialer: {
|
||||||
maxParallelDials: 100,
|
maxParallelDials: 100,
|
||||||
|
maxAddrsToDial: 25,
|
||||||
maxDialsPerPeer: 4,
|
maxDialsPerPeer: 4,
|
||||||
dialTimeout: 30e3,
|
dialTimeout: 30e3,
|
||||||
resolvers: {
|
resolvers: {
|
||||||
@@ -779,6 +781,26 @@ By default under nodejs libp2p will attempt to use [UPnP](https://en.wikipedia.o
|
|||||||
|
|
||||||
[NAT-PMP](http://miniupnp.free.fr/nat-pmp.html) is a feature of some modern routers which performs a similar job to UPnP. NAT-PMP is disabled by default, if enabled libp2p will try to use NAT-PMP and will fall back to UPnP if it fails.
|
[NAT-PMP](http://miniupnp.free.fr/nat-pmp.html) is a feature of some modern routers which performs a similar job to UPnP. NAT-PMP is disabled by default, if enabled libp2p will try to use NAT-PMP and will fall back to UPnP if it fails.
|
||||||
|
|
||||||
|
#### Configuring protocol name
|
||||||
|
|
||||||
|
Changing the protocol name prefix can isolate default public network (IPFS) for custom purposes.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const node = await Libp2p.create({
|
||||||
|
config: {
|
||||||
|
protocolPrefix: 'ipfs' // default
|
||||||
|
}
|
||||||
|
})
|
||||||
|
/*
|
||||||
|
protocols: [
|
||||||
|
"/ipfs/id/1.0.0", // identify service protocol (if we have multiplexers)
|
||||||
|
"/ipfs/id/push/1.0.0", // identify service push protocol (if we have multiplexers)
|
||||||
|
"/ipfs/ping/1.0.0", // built-in ping protocol
|
||||||
|
]
|
||||||
|
*/
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Configuration examples
|
## Configuration examples
|
||||||
|
|
||||||
As libp2p is designed to be a modular networking library, its usage will vary based on individual project needs. We've included links to some existing project configurations for your reference, in case you wish to replicate their configuration:
|
As libp2p is designed to be a modular networking library, its usage will vary based on individual project needs. We've included links to some existing project configurations for your reference, in case you wish to replicate their configuration:
|
||||||
|
36
doc/migrations/v0.31-v0.32.md
Normal file
36
doc/migrations/v0.31-v0.32.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!--Specify versions for migration below-->
|
||||||
|
# Migrating to libp2p@32
|
||||||
|
|
||||||
|
A migration guide for refactoring your application code from libp2p v0.31.x to v0.32.0.
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
- [Module Updates](#module-updates)
|
||||||
|
|
||||||
|
## Module Updates
|
||||||
|
|
||||||
|
With this release you should update the following libp2p modules if you are relying on them:
|
||||||
|
|
||||||
|
<!--Specify module versions in JSON for migration below.
|
||||||
|
It's recommended to check package.json changes for this:
|
||||||
|
`git diff <release> <prev> -- package.json`
|
||||||
|
-->
|
||||||
|
|
||||||
|
```json
|
||||||
|
"libp2p-bootstrap": "^0.13.0",
|
||||||
|
"libp2p-crypto": "^0.19.4",
|
||||||
|
"libp2p-interfaces": "^1.0.0",
|
||||||
|
"libp2p-delegated-content-routing": "^0.11.0",
|
||||||
|
"libp2p-delegated-peer-routing": "^0.10.0",
|
||||||
|
"libp2p-floodsub": "^0.27.0",
|
||||||
|
"libp2p-gossipsub": "^0.11.0",
|
||||||
|
"libp2p-kad-dht": "^0.23.0",
|
||||||
|
"libp2p-mdns": "^0.17.0",
|
||||||
|
"libp2p-noise": "^4.0.0",
|
||||||
|
"libp2p-tcp": "^0.17.0",
|
||||||
|
"libp2p-webrtc-direct": "^0.7.0",
|
||||||
|
"libp2p-webrtc-star": "^0.23.0",
|
||||||
|
"libp2p-websockets": "^0.16.0"
|
||||||
|
```
|
||||||
|
|
||||||
|
One of the main changes in this new release is the update to `multiaddr@10.0.0`. This should also be updated in upstream projects to avoid several multiaddr versions in the bundle and to avoid potential problems when libp2p interacts with provided outdated multiaddr instances.
|
@@ -16,7 +16,7 @@
|
|||||||
<pre id="output"></pre>
|
<pre id="output"></pre>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="./index.js"></script>
|
<script type="module" src="./index.js"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
@@ -2,7 +2,6 @@
|
|||||||
"name": "libp2p-in-browser",
|
"name": "libp2p-in-browser",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "A libp2p node running in the browser",
|
"description": "A libp2p node running in the browser",
|
||||||
"main": "dist/index.html",
|
|
||||||
"browserslist": [
|
"browserslist": [
|
||||||
"last 2 Chrome versions"
|
"last 2 Chrome versions"
|
||||||
],
|
],
|
||||||
@@ -17,11 +16,11 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/preset-env": "^7.13.0",
|
"@babel/preset-env": "^7.13.0",
|
||||||
"libp2p": "../../",
|
"libp2p": "../../",
|
||||||
"libp2p-bootstrap": "^0.12.1",
|
"libp2p-bootstrap": "^0.13.0",
|
||||||
"libp2p-mplex": "^0.10.0",
|
"libp2p-mplex": "^0.10.4",
|
||||||
"libp2p-noise": "^2.0.0",
|
"libp2p-noise": "^4.0.0",
|
||||||
"libp2p-webrtc-star": "^0.22.0",
|
"libp2p-webrtc-star": "^0.23.0",
|
||||||
"libp2p-websockets": "^0.15.0"
|
"libp2p-websockets": "^0.16.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "^7.13.10",
|
"@babel/cli": "^7.13.10",
|
||||||
|
@@ -5,7 +5,7 @@ const Libp2p = require('../../')
|
|||||||
const TCP = require('libp2p-tcp')
|
const TCP = require('libp2p-tcp')
|
||||||
const Mplex = require('libp2p-mplex')
|
const Mplex = require('libp2p-mplex')
|
||||||
const { NOISE } = require('libp2p-noise')
|
const { NOISE } = require('libp2p-noise')
|
||||||
const CID = require('cids')
|
const { CID } = require('multiformats/cid')
|
||||||
const KadDHT = require('libp2p-kad-dht')
|
const KadDHT = require('libp2p-kad-dht')
|
||||||
|
|
||||||
const all = require('it-all')
|
const all = require('it-all')
|
||||||
@@ -51,10 +51,10 @@ const createNode = async () => {
|
|||||||
// Wait for onConnect handlers in the DHT
|
// Wait for onConnect handlers in the DHT
|
||||||
await delay(100)
|
await delay(100)
|
||||||
|
|
||||||
const cid = new CID('QmTp9VkYvnHyrqKQuFPiuZkiX9gPcqj6x5LJ1rmWuSySnL')
|
const cid = CID.parse('QmTp9VkYvnHyrqKQuFPiuZkiX9gPcqj6x5LJ1rmWuSySnL')
|
||||||
await node1.contentRouting.provide(cid)
|
await node1.contentRouting.provide(cid)
|
||||||
|
|
||||||
console.log('Node %s is providing %s', node1.peerId.toB58String(), cid.toBaseEncodedString())
|
console.log('Node %s is providing %s', node1.peerId.toB58String(), cid.toString())
|
||||||
|
|
||||||
// wait for propagation
|
// wait for propagation
|
||||||
await delay(300)
|
await delay(300)
|
||||||
|
@@ -81,7 +81,7 @@ Instead of calling `peerRouting.findPeer`, we will use `contentRouting.provide`
|
|||||||
|
|
||||||
```JavaScript
|
```JavaScript
|
||||||
await node1.contentRouting.provide(cid)
|
await node1.contentRouting.provide(cid)
|
||||||
console.log('Node %s is providing %s', node1.peerId.toB58String(), cid.toBaseEncodedString())
|
console.log('Node %s is providing %s', node1.peerId.toB58String(), cid.toString())
|
||||||
|
|
||||||
const provs = await all(node3.contentRouting.findProviders(cid, { timeout: 5000 }))
|
const provs = await all(node3.contentRouting.findProviders(cid, { timeout: 5000 }))
|
||||||
|
|
||||||
|
@@ -21,11 +21,11 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"libp2p": "../../",
|
"libp2p": "../../",
|
||||||
"libp2p-bootstrap": "^0.12.1",
|
"libp2p-bootstrap": "^0.13.0",
|
||||||
"libp2p-mplex": "^0.10.1",
|
"libp2p-mplex": "^0.10.4",
|
||||||
"libp2p-noise": "^2.0.1",
|
"libp2p-noise": "^4.0.0",
|
||||||
"libp2p-webrtc-direct": "^0.6.0",
|
"libp2p-webrtc-direct": "^0.7.0",
|
||||||
"peer-id": "^0.14.3"
|
"peer-id": "^0.15.0"
|
||||||
},
|
},
|
||||||
"browser": {
|
"browser": {
|
||||||
"ipfs": "ipfs/dist/index.min.js"
|
"ipfs": "ipfs/dist/index.min.js"
|
||||||
|
124
package.json
124
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "libp2p",
|
"name": "libp2p",
|
||||||
"version": "0.31.7",
|
"version": "0.32.2",
|
||||||
"description": "JavaScript implementation of libp2p, a modular peer to peer network stack",
|
"description": "JavaScript implementation of libp2p, a modular peer to peer network stack",
|
||||||
"leadMaintainer": "Jacob Heun <jacobheun@gmail.com>",
|
"leadMaintainer": "Jacob Heun <jacobheun@gmail.com>",
|
||||||
"main": "src/index.js",
|
"main": "src/index.js",
|
||||||
@@ -84,14 +84,13 @@
|
|||||||
"aggregate-error": "^3.1.0",
|
"aggregate-error": "^3.1.0",
|
||||||
"any-signal": "^2.1.1",
|
"any-signal": "^2.1.1",
|
||||||
"bignumber.js": "^9.0.1",
|
"bignumber.js": "^9.0.1",
|
||||||
"cids": "^1.1.5",
|
|
||||||
"class-is": "^1.1.0",
|
"class-is": "^1.1.0",
|
||||||
"debug": "^4.3.1",
|
"debug": "^4.3.1",
|
||||||
"err-code": "^3.0.0",
|
"err-code": "^3.0.0",
|
||||||
"es6-promisify": "^6.1.1",
|
"es6-promisify": "^6.1.1",
|
||||||
"events": "^3.3.0",
|
"events": "^3.3.0",
|
||||||
"hashlru": "^2.3.0",
|
"hashlru": "^2.3.0",
|
||||||
"interface-datastore": "^4.0.0",
|
"interface-datastore": "^5.1.1",
|
||||||
"it-all": "^1.0.4",
|
"it-all": "^1.0.4",
|
||||||
"it-buffer": "^0.1.2",
|
"it-buffer": "^0.1.2",
|
||||||
"it-drain": "^1.0.3",
|
"it-drain": "^1.0.3",
|
||||||
@@ -100,17 +99,16 @@
|
|||||||
"it-handshake": "^2.0.0",
|
"it-handshake": "^2.0.0",
|
||||||
"it-length-prefixed": "^5.0.2",
|
"it-length-prefixed": "^5.0.2",
|
||||||
"it-map": "^1.0.4",
|
"it-map": "^1.0.4",
|
||||||
"it-merge": "1.0.0",
|
"it-merge": "^1.0.0",
|
||||||
"it-pipe": "^1.1.0",
|
"it-pipe": "^1.1.0",
|
||||||
"it-take": "1.0.0",
|
"it-take": "^1.0.0",
|
||||||
"libp2p-crypto": "^0.19.4",
|
"libp2p-crypto": "^0.19.4",
|
||||||
"libp2p-interfaces": "^0.10.4",
|
"libp2p-interfaces": "^1.0.0",
|
||||||
"libp2p-utils": "^0.3.1",
|
"libp2p-utils": "^0.4.0",
|
||||||
"mafmt": "^9.0.0",
|
"mafmt": "^10.0.0",
|
||||||
"merge-options": "^3.0.4",
|
"merge-options": "^3.0.4",
|
||||||
"multiaddr": "^9.0.1",
|
"multiaddr": "^10.0.0",
|
||||||
"multicodec": "^3.0.1",
|
"multiformats": "^9.0.0",
|
||||||
"multihashing-async": "^2.1.2",
|
|
||||||
"multistream-select": "^2.0.0",
|
"multistream-select": "^2.0.0",
|
||||||
"mutable-proxy": "^1.0.0",
|
"mutable-proxy": "^1.0.0",
|
||||||
"node-forge": "^0.10.0",
|
"node-forge": "^0.10.0",
|
||||||
@@ -118,13 +116,13 @@
|
|||||||
"p-fifo": "^1.0.0",
|
"p-fifo": "^1.0.0",
|
||||||
"p-retry": "^4.4.0",
|
"p-retry": "^4.4.0",
|
||||||
"p-settle": "^4.1.1",
|
"p-settle": "^4.1.1",
|
||||||
"peer-id": "^0.14.2",
|
"peer-id": "^0.15.0",
|
||||||
"private-ip": "^2.1.0",
|
"private-ip": "^2.1.0",
|
||||||
"protobufjs": "^6.10.2",
|
"protobufjs": "^6.10.2",
|
||||||
"retimer": "^3.0.0",
|
"retimer": "^3.0.0",
|
||||||
"sanitize-filename": "^1.6.3",
|
"sanitize-filename": "^1.6.3",
|
||||||
"set-delayed-interval": "^1.0.0",
|
"set-delayed-interval": "^1.0.0",
|
||||||
"streaming-iterables": "^5.0.2",
|
"streaming-iterables": "^6.0.0",
|
||||||
"timeout-abort-controller": "^1.1.1",
|
"timeout-abort-controller": "^1.1.1",
|
||||||
"varint": "^6.0.0",
|
"varint": "^6.0.0",
|
||||||
"wherearewe": "^1.0.0",
|
"wherearewe": "^1.0.0",
|
||||||
@@ -133,7 +131,8 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nodeutils/defaults-deep": "^1.1.0",
|
"@nodeutils/defaults-deep": "^1.1.0",
|
||||||
"@types/es6-promisify": "^6.0.0",
|
"@types/es6-promisify": "^6.0.0",
|
||||||
"@types/node-forge": "^0.9.7",
|
"@types/node": "^16.0.1",
|
||||||
|
"@types/node-forge": "^0.10.1",
|
||||||
"@types/varint": "^6.0.0",
|
"@types/varint": "^6.0.0",
|
||||||
"abortable-iterator": "^3.0.0",
|
"abortable-iterator": "^3.0.0",
|
||||||
"aegir": "^33.1.1",
|
"aegir": "^33.1.1",
|
||||||
@@ -142,35 +141,36 @@
|
|||||||
"interop-libp2p": "^0.4.0",
|
"interop-libp2p": "^0.4.0",
|
||||||
"into-stream": "^6.0.0",
|
"into-stream": "^6.0.0",
|
||||||
"ipfs-http-client": "^50.1.1",
|
"ipfs-http-client": "^50.1.1",
|
||||||
"it-concat": "^1.0.0",
|
"it-concat": "^2.0.0",
|
||||||
"it-pair": "^1.0.0",
|
"it-pair": "^1.0.0",
|
||||||
"it-pushable": "^1.4.0",
|
"it-pushable": "^1.4.0",
|
||||||
"libp2p": ".",
|
"libp2p": ".",
|
||||||
"libp2p-bootstrap": "^0.12.3",
|
"libp2p-bootstrap": "^0.13.0",
|
||||||
"libp2p-delegated-content-routing": "^0.10.0",
|
"libp2p-delegated-content-routing": "^0.11.0",
|
||||||
"libp2p-delegated-peer-routing": "^0.9.0",
|
"libp2p-delegated-peer-routing": "^0.10.0",
|
||||||
"libp2p-floodsub": "^0.25.0",
|
"libp2p-floodsub": "^0.27.0",
|
||||||
"libp2p-gossipsub": "^0.9.0",
|
"libp2p-gossipsub": "^0.10.0",
|
||||||
"libp2p-kad-dht": "^0.22.0",
|
"libp2p-interfaces-compliance-tests": "^1.0.0",
|
||||||
"libp2p-mdns": "^0.16.0",
|
"libp2p-kad-dht": "^0.23.0",
|
||||||
|
"libp2p-mdns": "^0.17.0",
|
||||||
"libp2p-mplex": "^0.10.1",
|
"libp2p-mplex": "^0.10.1",
|
||||||
"libp2p-noise": "^3.0.0",
|
"libp2p-noise": "^4.0.0",
|
||||||
"libp2p-tcp": "^0.15.4",
|
"libp2p-tcp": "^0.17.0",
|
||||||
"libp2p-webrtc-star": "^0.22.2",
|
"libp2p-webrtc-star": "^0.23.0",
|
||||||
"libp2p-websockets": "^0.15.8",
|
"libp2p-websockets": "^0.16.0",
|
||||||
"multihashes": "^4.0.2",
|
"multihashes": "^4.0.2",
|
||||||
"nock": "^13.0.3",
|
"nock": "^13.0.3",
|
||||||
"p-defer": "^3.0.0",
|
"p-defer": "^3.0.0",
|
||||||
"p-times": "^3.0.0",
|
"p-times": "^3.0.0",
|
||||||
"p-wait-for": "^3.2.0",
|
"p-wait-for": "^3.2.0",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"sinon": "^10.0.0",
|
"sinon": "^11.1.1",
|
||||||
"uint8arrays": "^2.1.3",
|
"uint8arrays": "^2.1.3",
|
||||||
"util": "^0.12.3"
|
"util": "^0.12.3"
|
||||||
},
|
},
|
||||||
"contributors": [
|
"contributors": [
|
||||||
"David Dias <daviddias.p@gmail.com>",
|
|
||||||
"Vasco Santos <vasco.santos@moxy.studio>",
|
"Vasco Santos <vasco.santos@moxy.studio>",
|
||||||
|
"David Dias <daviddias.p@gmail.com>",
|
||||||
"Jacob Heun <jacobheun@gmail.com>",
|
"Jacob Heun <jacobheun@gmail.com>",
|
||||||
"Alex Potsides <alex@achingbrain.net>",
|
"Alex Potsides <alex@achingbrain.net>",
|
||||||
"Alan Shaw <alan@tableflip.io>",
|
"Alan Shaw <alan@tableflip.io>",
|
||||||
@@ -179,51 +179,67 @@
|
|||||||
"Friedel Ziegelmayer <dignifiedquire@gmail.com>",
|
"Friedel Ziegelmayer <dignifiedquire@gmail.com>",
|
||||||
"Maciej Krüger <mkg20001@gmail.com>",
|
"Maciej Krüger <mkg20001@gmail.com>",
|
||||||
"Hugo Dias <mail@hugodias.me>",
|
"Hugo Dias <mail@hugodias.me>",
|
||||||
"dirkmc <dirkmdev@gmail.com>",
|
|
||||||
"Volker Mische <volker.mische@gmail.com>",
|
"Volker Mische <volker.mische@gmail.com>",
|
||||||
|
"Chris Dostert <chrisdostert@users.noreply.github.com>",
|
||||||
|
"dirkmc <dirkmdev@gmail.com>",
|
||||||
"Richard Littauer <richard.littauer@gmail.com>",
|
"Richard Littauer <richard.littauer@gmail.com>",
|
||||||
|
"zeim839 <50573884+zeim839@users.noreply.github.com>",
|
||||||
"Ryan Bell <ryan@piing.net>",
|
"Ryan Bell <ryan@piing.net>",
|
||||||
"a1300 <matthias-knopp@gmx.net>",
|
"a1300 <matthias-knopp@gmx.net>",
|
||||||
"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ <victorbjelkholm@gmail.com>",
|
"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ <victorbjelkholm@gmail.com>",
|
||||||
"Samlior <samlior@foxmail.com>",
|
|
||||||
"Andrew Nesbitt <andrewnez@gmail.com>",
|
"Andrew Nesbitt <andrewnez@gmail.com>",
|
||||||
"Thomas Eizinger <thomas@eizinger.io>",
|
"Elven <mon.samuel@qq.com>",
|
||||||
"Franck Royer <franck@royer.one>",
|
"Franck Royer <franck@royer.one>",
|
||||||
"Giovanni T. Parra <fiatjaf@gmail.com>",
|
"Giovanni T. Parra <fiatjaf@gmail.com>",
|
||||||
"Elven <mon.samuel@qq.com>",
|
"Samlior <samlior@foxmail.com>",
|
||||||
"Didrik Nordström <didrik.nordstrom@gmail.com>",
|
"Thomas Eizinger <thomas@eizinger.io>",
|
||||||
|
"acolytec3 <17355484+acolytec3@users.noreply.github.com>",
|
||||||
|
"Didrik Nordström <didrik@betamos.se>",
|
||||||
|
"Irakli Gozalishvili <rfobic@gmail.com>",
|
||||||
|
"Joel Gustafson <joelg@mit.edu>",
|
||||||
|
"John Rees <johnrees@users.noreply.github.com>",
|
||||||
|
"João Santos <joaosantos15@users.noreply.github.com>",
|
||||||
|
"Julien Bouquillon <contact@revolunet.com>",
|
||||||
|
"Kevin Kwok <antimatter15@gmail.com>",
|
||||||
|
"Kevin Lacker <lacker@gmail.com>",
|
||||||
|
"Lars Gierth <lgierth@users.noreply.github.com>",
|
||||||
|
"Ethan Lam <elmemphis2000@gmail.com>",
|
||||||
|
"Marcin Tojek <mtojek@users.noreply.github.com>",
|
||||||
|
"Michael Burns <5170+mburns@users.noreply.github.com>",
|
||||||
|
"Miguel Mota <miguelmota2@gmail.com>",
|
||||||
|
"Nuno Nogueira <nunofmn@gmail.com>",
|
||||||
|
"Dmitriy Ryajov <dryajov@gmail.com>",
|
||||||
|
"Philipp Muens <raute1337@gmx.de>",
|
||||||
"RasmusErik Voel Jensen <github@solsort.com>",
|
"RasmusErik Voel Jensen <github@solsort.com>",
|
||||||
|
"Diogo Silva <fsdiogo@gmail.com>",
|
||||||
|
"Robert Kiel <robert.kiel@hoprnet.org>",
|
||||||
|
"phillmac <phillmac@users.noreply.github.com>",
|
||||||
|
"robertkiel <robert.kiel@validitylabs.org>",
|
||||||
"Smite Chow <xiaopengyou@live.com>",
|
"Smite Chow <xiaopengyou@live.com>",
|
||||||
"Soeren <nikorpoulsen@gmail.com>",
|
"Soeren <nikorpoulsen@gmail.com>",
|
||||||
"Sönke Hahn <soenkehahn@gmail.com>",
|
"Sönke Hahn <soenkehahn@gmail.com>",
|
||||||
"TJKoury <TJKoury@gmail.com>",
|
"TJKoury <TJKoury@gmail.com>",
|
||||||
|
"shresthagrawal <34920931+shresthagrawal@users.noreply.github.com>",
|
||||||
"Tiago Alves <alvesjtiago@gmail.com>",
|
"Tiago Alves <alvesjtiago@gmail.com>",
|
||||||
|
"Daijiro Wachi <daijiro.wachi@gmail.com>",
|
||||||
"Yusef Napora <yusef@napora.org>",
|
"Yusef Napora <yusef@napora.org>",
|
||||||
"Zane Starr <zcstarr@gmail.com>",
|
"Zane Starr <zcstarr@gmail.com>",
|
||||||
"ebinks <elizabethjbinks@gmail.com>",
|
"swedneck <40505480+swedneck@users.noreply.github.com>",
|
||||||
"isan_rivkin <isanrivkin@gmail.com>",
|
|
||||||
"mcclure <andi.m.mcclure@gmail.com>",
|
|
||||||
"robertkiel <robert.kiel@validitylabs.org>",
|
|
||||||
"Aleksei <vozhdb@gmail.com>",
|
"Aleksei <vozhdb@gmail.com>",
|
||||||
"Bernd Strehl <bernd.strehl@gmail.com>",
|
|
||||||
"Chris Bratlien <chrisbratlien@gmail.com>",
|
|
||||||
"Cindy Wu <ciindy.wu@gmail.com>",
|
"Cindy Wu <ciindy.wu@gmail.com>",
|
||||||
"Daijiro Wachi <daijiro.wachi@gmail.com>",
|
"Aditya Bose <13054902+adbose@users.noreply.github.com>",
|
||||||
"Diogo Silva <fsdiogo@gmail.com>",
|
"Chris Bratlien <chrisbratlien@gmail.com>",
|
||||||
"Dmitriy Ryajov <dryajov@gmail.com>",
|
"ebinks <elizabethjbinks@gmail.com>",
|
||||||
"Ethan Lam <elmemphis2000@gmail.com>",
|
"greenSnot <greenSnot@users.noreply.github.com>",
|
||||||
"Fei Liu <liu.feiwood@gmail.com>",
|
"Bernd Strehl <bernd.strehl@gmail.com>",
|
||||||
"Felipe Martins <felipebrasil93@gmail.com>",
|
|
||||||
"Florian-Merle <florian.david.merle@gmail.com>",
|
|
||||||
"Francis Gulotta <wizard@roborooter.com>",
|
"Francis Gulotta <wizard@roborooter.com>",
|
||||||
|
"isan_rivkin <isanrivkin@gmail.com>",
|
||||||
|
"Florian-Merle <florian.david.merle@gmail.com>",
|
||||||
|
"mayerwin <mayerwin@users.noreply.github.com>",
|
||||||
|
"Guy Sviry <32539816+guysv@users.noreply.github.com>",
|
||||||
"Henrique Dias <hacdias@gmail.com>",
|
"Henrique Dias <hacdias@gmail.com>",
|
||||||
"Irakli Gozalishvili <rfobic@gmail.com>",
|
"mcclure <andi.m.mcclure@gmail.com>",
|
||||||
"Joel Gustafson <joelg@mit.edu>",
|
"Felipe Martins <felipebrasil93@gmail.com>",
|
||||||
"Julien Bouquillon <contact@revolunet.com>",
|
"Fei Liu <liu.feiwood@gmail.com>"
|
||||||
"Kevin Kwok <antimatter15@gmail.com>",
|
|
||||||
"Kevin Lacker <lacker@gmail.com>",
|
|
||||||
"Miguel Mota <miguelmota2@gmail.com>",
|
|
||||||
"Nuno Nogueira <nunofmn@gmail.com>",
|
|
||||||
"Philipp Muens <raute1337@gmx.de>"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@@ -222,7 +222,7 @@ class AutoRelay {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
const peerId = PeerId.createFromCID(id)
|
const peerId = PeerId.createFromB58String(id)
|
||||||
const connection = this._connectionManager.get(peerId)
|
const connection = this._connectionManager.get(peerId)
|
||||||
|
|
||||||
// If not connected, store for possible later use.
|
// If not connected, store for possible later use.
|
||||||
|
@@ -136,8 +136,8 @@ class Circuit {
|
|||||||
throw errCode(new Error(errMsg), codes.ERR_RELAYED_DIAL)
|
throw errCode(new Error(errMsg), codes.ERR_RELAYED_DIAL)
|
||||||
}
|
}
|
||||||
|
|
||||||
const relayPeer = PeerId.createFromCID(relayId)
|
const relayPeer = PeerId.createFromB58String(relayId)
|
||||||
const destinationPeer = PeerId.createFromCID(destinationId)
|
const destinationPeer = PeerId.createFromB58String(destinationId)
|
||||||
|
|
||||||
let disconnectOnFailure = false
|
let disconnectOnFailure = false
|
||||||
let relayConnection = this._connectionManager.get(relayPeer)
|
let relayConnection = this._connectionManager.get(relayPeer)
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
const CID = require('cids')
|
const { CID } = require('multiformats/cid')
|
||||||
const multihashing = require('multihashing-async')
|
const { sha256 } = require('multiformats/hashes/sha2')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a namespace string into a cid.
|
* Convert a namespace string into a cid.
|
||||||
@@ -11,7 +11,7 @@ const multihashing = require('multihashing-async')
|
|||||||
*/
|
*/
|
||||||
module.exports.namespaceToCid = async (namespace) => {
|
module.exports.namespaceToCid = async (namespace) => {
|
||||||
const bytes = new TextEncoder().encode(namespace)
|
const bytes = new TextEncoder().encode(namespace)
|
||||||
const hash = await multihashing(bytes, 'sha2-256')
|
const hash = await sha256.digest(bytes)
|
||||||
|
|
||||||
return new CID(hash)
|
return CID.createV0(hash)
|
||||||
}
|
}
|
||||||
|
@@ -57,6 +57,7 @@ const DefaultConfig = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
|
protocolPrefix: 'ipfs',
|
||||||
dht: {
|
dht: {
|
||||||
enabled: false,
|
enabled: false,
|
||||||
kBucketSize: 20,
|
kBucketSize: 20,
|
||||||
|
@@ -4,6 +4,7 @@ module.exports = {
|
|||||||
DIAL_TIMEOUT: 30e3, // How long in ms a dial attempt is allowed to take
|
DIAL_TIMEOUT: 30e3, // How long in ms a dial attempt is allowed to take
|
||||||
MAX_PARALLEL_DIALS: 100, // Maximum allowed concurrent dials
|
MAX_PARALLEL_DIALS: 100, // Maximum allowed concurrent dials
|
||||||
MAX_PER_PEER_DIALS: 4, // Allowed parallel dials per DialRequest
|
MAX_PER_PEER_DIALS: 4, // Allowed parallel dials per DialRequest
|
||||||
|
MAX_ADDRS_TO_DIAL: 25, // Maximum number of allowed addresses to attempt to dial
|
||||||
METRICS: {
|
METRICS: {
|
||||||
computeThrottleMaxQueueSize: 1000,
|
computeThrottleMaxQueueSize: 1000,
|
||||||
computeThrottleTimeout: 2000,
|
computeThrottleTimeout: 2000,
|
||||||
|
@@ -15,7 +15,7 @@ const { pipe } = require('it-pipe')
|
|||||||
/**
|
/**
|
||||||
* @typedef {import('peer-id')} PeerId
|
* @typedef {import('peer-id')} PeerId
|
||||||
* @typedef {import('multiaddr').Multiaddr} Multiaddr
|
* @typedef {import('multiaddr').Multiaddr} Multiaddr
|
||||||
* @typedef {import('cids')} CID
|
* @typedef {import('multiformats/cid').CID} CID
|
||||||
* @typedef {import('libp2p-interfaces/src/content-routing/types').ContentRouting} ContentRoutingModule
|
* @typedef {import('libp2p-interfaces/src/content-routing/types').ContentRouting} ContentRoutingModule
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@@ -19,7 +19,8 @@ const { codes } = require('../errors')
|
|||||||
const {
|
const {
|
||||||
DIAL_TIMEOUT,
|
DIAL_TIMEOUT,
|
||||||
MAX_PARALLEL_DIALS,
|
MAX_PARALLEL_DIALS,
|
||||||
MAX_PER_PEER_DIALS
|
MAX_PER_PEER_DIALS,
|
||||||
|
MAX_ADDRS_TO_DIAL
|
||||||
} = require('../constants')
|
} = require('../constants')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -40,6 +41,7 @@ const {
|
|||||||
* @typedef {Object} DialerOptions
|
* @typedef {Object} DialerOptions
|
||||||
* @property {(addresses: Address[]) => Address[]} [options.addressSorter = publicAddressesFirst] - Sort the known addresses of a peer before trying to dial.
|
* @property {(addresses: Address[]) => Address[]} [options.addressSorter = publicAddressesFirst] - Sort the known addresses of a peer before trying to dial.
|
||||||
* @property {number} [maxParallelDials = MAX_PARALLEL_DIALS] - Number of max concurrent dials.
|
* @property {number} [maxParallelDials = MAX_PARALLEL_DIALS] - Number of max concurrent dials.
|
||||||
|
* @property {number} [maxAddrsToDial = MAX_ADDRS_TO_DIAL] - Number of max addresses to dial for a given peer.
|
||||||
* @property {number} [maxDialsPerPeer = MAX_PER_PEER_DIALS] - Number of max concurrent dials per peer.
|
* @property {number} [maxDialsPerPeer = MAX_PER_PEER_DIALS] - Number of max concurrent dials per peer.
|
||||||
* @property {number} [dialTimeout = DIAL_TIMEOUT] - How long a dial attempt is allowed to take.
|
* @property {number} [dialTimeout = DIAL_TIMEOUT] - How long a dial attempt is allowed to take.
|
||||||
* @property {Record<string, Resolver>} [resolvers = {}] - multiaddr resolvers to use when dialing
|
* @property {Record<string, Resolver>} [resolvers = {}] - multiaddr resolvers to use when dialing
|
||||||
@@ -65,6 +67,7 @@ class Dialer {
|
|||||||
peerStore,
|
peerStore,
|
||||||
addressSorter = publicAddressesFirst,
|
addressSorter = publicAddressesFirst,
|
||||||
maxParallelDials = MAX_PARALLEL_DIALS,
|
maxParallelDials = MAX_PARALLEL_DIALS,
|
||||||
|
maxAddrsToDial = MAX_ADDRS_TO_DIAL,
|
||||||
dialTimeout = DIAL_TIMEOUT,
|
dialTimeout = DIAL_TIMEOUT,
|
||||||
maxDialsPerPeer = MAX_PER_PEER_DIALS,
|
maxDialsPerPeer = MAX_PER_PEER_DIALS,
|
||||||
resolvers = {}
|
resolvers = {}
|
||||||
@@ -73,6 +76,7 @@ class Dialer {
|
|||||||
this.peerStore = peerStore
|
this.peerStore = peerStore
|
||||||
this.addressSorter = addressSorter
|
this.addressSorter = addressSorter
|
||||||
this.maxParallelDials = maxParallelDials
|
this.maxParallelDials = maxParallelDials
|
||||||
|
this.maxAddrsToDial = maxAddrsToDial
|
||||||
this.timeout = dialTimeout
|
this.timeout = dialTimeout
|
||||||
this.maxDialsPerPeer = maxDialsPerPeer
|
this.maxDialsPerPeer = maxDialsPerPeer
|
||||||
this.tokens = [...new Array(maxParallelDials)].map((_, index) => index)
|
this.tokens = [...new Array(maxParallelDials)].map((_, index) => index)
|
||||||
@@ -198,6 +202,11 @@ class Dialer {
|
|||||||
// Multiaddrs not supported by the available transports will be filtered out.
|
// Multiaddrs not supported by the available transports will be filtered out.
|
||||||
const supportedAddrs = addrs.filter(a => this.transportManager.transportForMultiaddr(a))
|
const supportedAddrs = addrs.filter(a => this.transportManager.transportForMultiaddr(a))
|
||||||
|
|
||||||
|
if (supportedAddrs.length > this.maxAddrsToDial) {
|
||||||
|
this.peerStore.delete(id)
|
||||||
|
throw errCode(new Error('dial with more addresses than allowed'), codes.ERR_TOO_MANY_ADDRESSES)
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: id.toB58String(),
|
id: id.toB58String(),
|
||||||
addrs: supportedAddrs
|
addrs: supportedAddrs
|
||||||
|
@@ -16,6 +16,7 @@ exports.codes = {
|
|||||||
ERR_CONNECTION_FAILED: 'ERR_CONNECTION_FAILED',
|
ERR_CONNECTION_FAILED: 'ERR_CONNECTION_FAILED',
|
||||||
ERR_NODE_NOT_STARTED: 'ERR_NODE_NOT_STARTED',
|
ERR_NODE_NOT_STARTED: 'ERR_NODE_NOT_STARTED',
|
||||||
ERR_ALREADY_ABORTED: 'ERR_ALREADY_ABORTED',
|
ERR_ALREADY_ABORTED: 'ERR_ALREADY_ABORTED',
|
||||||
|
ERR_TOO_MANY_ADDRESSES: 'ERR_TOO_MANY_ADDRESSES',
|
||||||
ERR_NO_VALID_ADDRESSES: 'ERR_NO_VALID_ADDRESSES',
|
ERR_NO_VALID_ADDRESSES: 'ERR_NO_VALID_ADDRESSES',
|
||||||
ERR_RELAYED_DIAL: 'ERR_RELAYED_DIAL',
|
ERR_RELAYED_DIAL: 'ERR_RELAYED_DIAL',
|
||||||
ERR_DIALED_SELF: 'ERR_DIALED_SELF',
|
ERR_DIALED_SELF: 'ERR_DIALED_SELF',
|
||||||
|
@@ -3,7 +3,13 @@
|
|||||||
// @ts-ignore file not listed within the file list of projects
|
// @ts-ignore file not listed within the file list of projects
|
||||||
const libp2pVersion = require('../../package.json').version
|
const libp2pVersion = require('../../package.json').version
|
||||||
|
|
||||||
module.exports.PROTOCOL_VERSION = 'ipfs/0.1.0'
|
module.exports.PROTOCOL_VERSION = 'ipfs/0.1.0' // deprecated
|
||||||
module.exports.AGENT_VERSION = `js-libp2p/${libp2pVersion}`
|
module.exports.AGENT_VERSION = `js-libp2p/${libp2pVersion}`
|
||||||
module.exports.MULTICODEC_IDENTIFY = '/ipfs/id/1.0.0'
|
module.exports.MULTICODEC_IDENTIFY = '/ipfs/id/1.0.0' // deprecated
|
||||||
module.exports.MULTICODEC_IDENTIFY_PUSH = '/ipfs/id/push/1.0.0'
|
module.exports.MULTICODEC_IDENTIFY_PUSH = '/ipfs/id/push/1.0.0' // deprecated
|
||||||
|
|
||||||
|
module.exports.IDENTIFY_PROTOCOL_VERSION = '0.1.0'
|
||||||
|
module.exports.MULTICODEC_IDENTIFY_PROTOCOL_NAME = 'id'
|
||||||
|
module.exports.MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME = 'id/push'
|
||||||
|
module.exports.MULTICODEC_IDENTIFY_PROTOCOL_VERSION = '1.0.0'
|
||||||
|
module.exports.MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION = '1.0.0'
|
||||||
|
@@ -23,7 +23,11 @@ const PeerRecord = require('../record/peer-record')
|
|||||||
const {
|
const {
|
||||||
MULTICODEC_IDENTIFY,
|
MULTICODEC_IDENTIFY,
|
||||||
MULTICODEC_IDENTIFY_PUSH,
|
MULTICODEC_IDENTIFY_PUSH,
|
||||||
PROTOCOL_VERSION
|
IDENTIFY_PROTOCOL_VERSION,
|
||||||
|
MULTICODEC_IDENTIFY_PROTOCOL_NAME,
|
||||||
|
MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME,
|
||||||
|
MULTICODEC_IDENTIFY_PROTOCOL_VERSION,
|
||||||
|
MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION
|
||||||
} = require('./consts')
|
} = require('./consts')
|
||||||
|
|
||||||
const { codes } = require('../errors')
|
const { codes } = require('../errors')
|
||||||
@@ -39,6 +43,16 @@ const { codes } = require('../errors')
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
class IdentifyService {
|
class IdentifyService {
|
||||||
|
/**
|
||||||
|
* @param {import('../')} libp2p
|
||||||
|
*/
|
||||||
|
static getProtocolStr (libp2p) {
|
||||||
|
return {
|
||||||
|
identifyProtocolStr: `/${libp2p._config.protocolPrefix}/${MULTICODEC_IDENTIFY_PROTOCOL_NAME}/${MULTICODEC_IDENTIFY_PROTOCOL_VERSION}`,
|
||||||
|
identifyPushProtocolStr: `/${libp2p._config.protocolPrefix}/${MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME}/${MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @class
|
* @class
|
||||||
* @param {Object} options
|
* @param {Object} options
|
||||||
@@ -53,9 +67,13 @@ class IdentifyService {
|
|||||||
|
|
||||||
this.handleMessage = this.handleMessage.bind(this)
|
this.handleMessage = this.handleMessage.bind(this)
|
||||||
|
|
||||||
|
const protocolStr = IdentifyService.getProtocolStr(libp2p)
|
||||||
|
this.identifyProtocolStr = protocolStr.identifyProtocolStr
|
||||||
|
this.identifyPushProtocolStr = protocolStr.identifyPushProtocolStr
|
||||||
|
|
||||||
// Store self host metadata
|
// Store self host metadata
|
||||||
this._host = {
|
this._host = {
|
||||||
protocolVersion: PROTOCOL_VERSION,
|
protocolVersion: `${libp2p._config.protocolPrefix}/${IDENTIFY_PROTOCOL_VERSION}`,
|
||||||
...libp2p._options.host
|
...libp2p._options.host
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +112,7 @@ class IdentifyService {
|
|||||||
|
|
||||||
const pushes = connections.map(async connection => {
|
const pushes = connections.map(async connection => {
|
||||||
try {
|
try {
|
||||||
const { stream } = await connection.newStream(MULTICODEC_IDENTIFY_PUSH)
|
const { stream } = await connection.newStream(this.identifyPushProtocolStr)
|
||||||
|
|
||||||
await pipe(
|
await pipe(
|
||||||
[Message.Identify.encode({
|
[Message.Identify.encode({
|
||||||
@@ -129,7 +147,7 @@ class IdentifyService {
|
|||||||
const connections = []
|
const connections = []
|
||||||
let connection
|
let connection
|
||||||
for (const peer of this.peerStore.peers.values()) {
|
for (const peer of this.peerStore.peers.values()) {
|
||||||
if (peer.protocols.includes(MULTICODEC_IDENTIFY_PUSH) && (connection = this.connectionManager.get(peer.id))) {
|
if (peer.protocols.includes(this.identifyPushProtocolStr) && (connection = this.connectionManager.get(peer.id))) {
|
||||||
connections.push(connection)
|
connections.push(connection)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,7 +165,7 @@ class IdentifyService {
|
|||||||
* @returns {Promise<void>}
|
* @returns {Promise<void>}
|
||||||
*/
|
*/
|
||||||
async identify (connection) {
|
async identify (connection) {
|
||||||
const { stream } = await connection.newStream(MULTICODEC_IDENTIFY)
|
const { stream } = await connection.newStream(this.identifyProtocolStr)
|
||||||
const [data] = await pipe(
|
const [data] = await pipe(
|
||||||
[],
|
[],
|
||||||
stream,
|
stream,
|
||||||
@@ -224,9 +242,9 @@ class IdentifyService {
|
|||||||
*/
|
*/
|
||||||
handleMessage ({ connection, stream, protocol }) {
|
handleMessage ({ connection, stream, protocol }) {
|
||||||
switch (protocol) {
|
switch (protocol) {
|
||||||
case MULTICODEC_IDENTIFY:
|
case this.identifyProtocolStr:
|
||||||
return this._handleIdentify({ connection, stream })
|
return this._handleIdentify({ connection, stream })
|
||||||
case MULTICODEC_IDENTIFY_PUSH:
|
case this.identifyPushProtocolStr:
|
||||||
return this._handlePush({ connection, stream })
|
return this._handlePush({ connection, stream })
|
||||||
default:
|
default:
|
||||||
log.error('cannot handle unknown protocol %s', protocol)
|
log.error('cannot handle unknown protocol %s', protocol)
|
||||||
|
@@ -31,7 +31,6 @@ const PersistentPeerStore = require('./peer-store/persistent')
|
|||||||
const Registrar = require('./registrar')
|
const Registrar = require('./registrar')
|
||||||
const ping = require('./ping')
|
const ping = require('./ping')
|
||||||
const IdentifyService = require('./identify')
|
const IdentifyService = require('./identify')
|
||||||
const IDENTIFY_PROTOCOLS = IdentifyService.multicodecs
|
|
||||||
const NatManager = require('./nat-manager')
|
const NatManager = require('./nat-manager')
|
||||||
const { updateSelfPeerRecord } = require('./record/utils')
|
const { updateSelfPeerRecord } = require('./record/utils')
|
||||||
|
|
||||||
@@ -289,7 +288,7 @@ class Libp2p extends EventEmitter {
|
|||||||
|
|
||||||
// Add the identify service since we can multiplex
|
// Add the identify service since we can multiplex
|
||||||
this.identifyService = new IdentifyService({ libp2p: this })
|
this.identifyService = new IdentifyService({ libp2p: this })
|
||||||
this.handle(Object.values(IDENTIFY_PROTOCOLS), this.identifyService.handleMessage)
|
this.handle(Object.values(IdentifyService.getProtocolStr(this)), this.identifyService.handleMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Attach private network protector
|
// Attach private network protector
|
||||||
|
@@ -99,7 +99,7 @@ class PeerStore extends EventEmitter {
|
|||||||
|
|
||||||
const peersData = new Map()
|
const peersData = new Map()
|
||||||
storedPeers.forEach((idStr) => {
|
storedPeers.forEach((idStr) => {
|
||||||
peersData.set(idStr, this.get(PeerId.createFromCID(idStr)))
|
peersData.set(idStr, this.get(PeerId.createFromB58String(idStr)))
|
||||||
})
|
})
|
||||||
|
|
||||||
return peersData
|
return peersData
|
||||||
|
@@ -7,6 +7,7 @@ const log = Object.assign(debug('libp2p:persistent-peer-store'), {
|
|||||||
const { Key } = require('interface-datastore')
|
const { Key } = require('interface-datastore')
|
||||||
const { Multiaddr } = require('multiaddr')
|
const { Multiaddr } = require('multiaddr')
|
||||||
const PeerId = require('peer-id')
|
const PeerId = require('peer-id')
|
||||||
|
const { base32 } = require('multiformats/bases/base32')
|
||||||
|
|
||||||
const PeerStore = require('..')
|
const PeerStore = require('..')
|
||||||
|
|
||||||
@@ -195,7 +196,7 @@ class PersistentPeerStore extends PeerStore {
|
|||||||
const batch = this._datastore.batch()
|
const batch = this._datastore.batch()
|
||||||
for (const peerIdStr of commitPeers) {
|
for (const peerIdStr of commitPeers) {
|
||||||
// PeerId
|
// PeerId
|
||||||
const peerId = this.keyBook.data.get(peerIdStr) || PeerId.createFromCID(peerIdStr)
|
const peerId = this.keyBook.data.get(peerIdStr) || PeerId.createFromB58String(peerIdStr)
|
||||||
|
|
||||||
// Address Book
|
// Address Book
|
||||||
this._batchAddressBook(peerId, batch)
|
this._batchAddressBook(peerId, batch)
|
||||||
@@ -346,7 +347,7 @@ class PersistentPeerStore extends PeerStore {
|
|||||||
async _processDatastoreEntry ({ key, value }) {
|
async _processDatastoreEntry ({ key, value }) {
|
||||||
try {
|
try {
|
||||||
const keyParts = key.toString().split('/')
|
const keyParts = key.toString().split('/')
|
||||||
const peerId = PeerId.createFromCID(keyParts[3])
|
const peerId = PeerId.createFromBytes(base32.decode(keyParts[3]))
|
||||||
|
|
||||||
let decoded
|
let decoded
|
||||||
switch (keyParts[2]) {
|
switch (keyParts[2]) {
|
||||||
|
@@ -1,6 +1,8 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
PROTOCOL: '/ipfs/ping/1.0.0',
|
PROTOCOL: '/ipfs/ping/1.0.0', // deprecated
|
||||||
PING_LENGTH: 32
|
PING_LENGTH: 32,
|
||||||
|
PROTOCOL_VERSION: '1.0.0',
|
||||||
|
PROTOCOL_NAME: 'ping'
|
||||||
}
|
}
|
||||||
|
@@ -13,7 +13,7 @@ const { toBuffer } = require('it-buffer')
|
|||||||
const { collect, take } = require('streaming-iterables')
|
const { collect, take } = require('streaming-iterables')
|
||||||
const equals = require('uint8arrays/equals')
|
const equals = require('uint8arrays/equals')
|
||||||
|
|
||||||
const { PROTOCOL, PING_LENGTH } = require('./constants')
|
const { PROTOCOL_NAME, PING_LENGTH, PROTOCOL_VERSION } = require('./constants')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {import('../')} Libp2p
|
* @typedef {import('../')} Libp2p
|
||||||
@@ -30,11 +30,12 @@ const { PROTOCOL, PING_LENGTH } = require('./constants')
|
|||||||
* @returns {Promise<number>}
|
* @returns {Promise<number>}
|
||||||
*/
|
*/
|
||||||
async function ping (node, peer) {
|
async function ping (node, peer) {
|
||||||
|
const protocol = `/${node._config.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`
|
||||||
// @ts-ignore multiaddr might not have toB58String
|
// @ts-ignore multiaddr might not have toB58String
|
||||||
log('dialing %s to %s', PROTOCOL, peer.toB58String ? peer.toB58String() : peer)
|
log('dialing %s to %s', protocol, peer.toB58String ? peer.toB58String() : peer)
|
||||||
|
|
||||||
const connection = await node.dial(peer)
|
const connection = await node.dial(peer)
|
||||||
const { stream } = await connection.newStream(PROTOCOL)
|
const { stream } = await connection.newStream(protocol)
|
||||||
|
|
||||||
const start = Date.now()
|
const start = Date.now()
|
||||||
const data = crypto.randomBytes(PING_LENGTH)
|
const data = crypto.randomBytes(PING_LENGTH)
|
||||||
@@ -61,7 +62,7 @@ async function ping (node, peer) {
|
|||||||
* @param {Libp2p} node
|
* @param {Libp2p} node
|
||||||
*/
|
*/
|
||||||
function mount (node) {
|
function mount (node) {
|
||||||
node.handle(PROTOCOL, ({ stream }) => pipe(stream, stream))
|
node.handle(`/${node._config.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`, ({ stream }) => pipe(stream, stream))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -70,7 +71,7 @@ function mount (node) {
|
|||||||
* @param {Libp2p} node
|
* @param {Libp2p} node
|
||||||
*/
|
*/
|
||||||
function unmount (node) {
|
function unmount (node) {
|
||||||
node.unhandle(PROTOCOL)
|
node.unhandle(`/${node._config.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
exports = module.exports = ping
|
exports = module.exports = ping
|
||||||
|
@@ -1,9 +1,7 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
const multicodec = require('multicodec')
|
|
||||||
|
|
||||||
// The domain string used for peer records contained in a Envelope.
|
// The domain string used for peer records contained in a Envelope.
|
||||||
const domain = multicodec.getName(multicodec.LIBP2P_PEER_RECORD) || 'libp2p-peer-record'
|
const domain = 'libp2p-peer-record'
|
||||||
|
|
||||||
// The type hint used to identify peer records in a Envelope.
|
// The type hint used to identify peer records in a Envelope.
|
||||||
// Defined in https://github.com/multiformats/multicodec/blob/master/table.csv
|
// Defined in https://github.com/multiformats/multicodec/blob/master/table.csv
|
||||||
|
47
test/configuration/protocol-prefix.node.js
Normal file
47
test/configuration/protocol-prefix.node.js
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
'use strict'
|
||||||
|
/* eslint-env mocha */
|
||||||
|
|
||||||
|
const { expect } = require('aegir/utils/chai')
|
||||||
|
const mergeOptions = require('merge-options')
|
||||||
|
|
||||||
|
const { create } = require('../../src')
|
||||||
|
const { baseOptions } = require('./utils')
|
||||||
|
|
||||||
|
describe('Protocol prefix is configurable', () => {
|
||||||
|
let libp2p
|
||||||
|
|
||||||
|
it('protocolPrefix is provided', async () => {
|
||||||
|
const testProtocol = 'test-protocol'
|
||||||
|
libp2p = await create(mergeOptions(baseOptions, {
|
||||||
|
config: {
|
||||||
|
protocolPrefix: testProtocol
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
|
||||||
|
const protocols = libp2p.peerStore.protoBook.get(libp2p.peerId);
|
||||||
|
[
|
||||||
|
'/libp2p/circuit/relay/0.1.0',
|
||||||
|
`/${testProtocol}/id/1.0.0`,
|
||||||
|
`/${testProtocol}/id/push/1.0.0`,
|
||||||
|
`/${testProtocol}/ping/1.0.0`
|
||||||
|
].forEach((i, idx) => {
|
||||||
|
expect(protocols[idx]).equals(i)
|
||||||
|
})
|
||||||
|
await libp2p.stop()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('protocolPrefix is not provided', async () => {
|
||||||
|
libp2p = await create(baseOptions)
|
||||||
|
|
||||||
|
const protocols = libp2p.peerStore.protoBook.get(libp2p.peerId);
|
||||||
|
[
|
||||||
|
'/libp2p/circuit/relay/0.1.0',
|
||||||
|
'/ipfs/id/1.0.0',
|
||||||
|
'/ipfs/id/push/1.0.0',
|
||||||
|
'/ipfs/ping/1.0.0'
|
||||||
|
].forEach((i, idx) => {
|
||||||
|
expect(protocols[idx]).equals(i)
|
||||||
|
})
|
||||||
|
await libp2p.stop()
|
||||||
|
})
|
||||||
|
})
|
@@ -8,7 +8,7 @@ const sinon = require('sinon')
|
|||||||
const pDefer = require('p-defer')
|
const pDefer = require('p-defer')
|
||||||
const mergeOptions = require('merge-options')
|
const mergeOptions = require('merge-options')
|
||||||
|
|
||||||
const CID = require('cids')
|
const { CID } = require('multiformats/cid')
|
||||||
const ipfsHttpClient = require('ipfs-http-client')
|
const ipfsHttpClient = require('ipfs-http-client')
|
||||||
const DelegatedContentRouter = require('libp2p-delegated-content-routing')
|
const DelegatedContentRouter = require('libp2p-delegated-content-routing')
|
||||||
const { Multiaddr } = require('multiaddr')
|
const { Multiaddr } = require('multiaddr')
|
||||||
@@ -164,7 +164,7 @@ describe('content-routing', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('should be able to register as a provider', async () => {
|
it('should be able to register as a provider', async () => {
|
||||||
const cid = new CID('QmU621oD8AhHw6t25vVyfYKmL9VV3PTgc52FngEhTGACFB')
|
const cid = CID.parse('QmU621oD8AhHw6t25vVyfYKmL9VV3PTgc52FngEhTGACFB')
|
||||||
const provider = 'QmZNgCqZCvTsi3B4Vt7gsSqpkqDpE7M2Y9TDmEhbDb4ceF'
|
const provider = 'QmZNgCqZCvTsi3B4Vt7gsSqpkqDpE7M2Y9TDmEhbDb4ceF'
|
||||||
|
|
||||||
const mockBlockApi = nock('http://0.0.0.0:60197')
|
const mockBlockApi = nock('http://0.0.0.0:60197')
|
||||||
@@ -191,7 +191,7 @@ describe('content-routing', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('should handle errors when registering as a provider', async () => {
|
it('should handle errors when registering as a provider', async () => {
|
||||||
const cid = new CID('QmU621oD8AhHw6t25vVyfYKmL9VV3PTgc52FngEhTGACFB')
|
const cid = CID.parse('QmU621oD8AhHw6t25vVyfYKmL9VV3PTgc52FngEhTGACFB')
|
||||||
const mockApi = nock('http://0.0.0.0:60197')
|
const mockApi = nock('http://0.0.0.0:60197')
|
||||||
// mock the block/stat call
|
// mock the block/stat call
|
||||||
.post('/api/v0/block/stat')
|
.post('/api/v0/block/stat')
|
||||||
@@ -205,7 +205,7 @@ describe('content-routing', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('should be able to find providers', async () => {
|
it('should be able to find providers', async () => {
|
||||||
const cid = new CID('QmU621oD8AhHw6t25vVyfYKmL9VV3PTgc52FngEhTGACFB')
|
const cid = CID.parse('QmU621oD8AhHw6t25vVyfYKmL9VV3PTgc52FngEhTGACFB')
|
||||||
const provider = 'QmZNgCqZCvTsi3B4Vt7gsSqpkqDpE7M2Y9TDmEhbDb4ceF'
|
const provider = 'QmZNgCqZCvTsi3B4Vt7gsSqpkqDpE7M2Y9TDmEhbDb4ceF'
|
||||||
|
|
||||||
const mockApi = nock('http://0.0.0.0:60197')
|
const mockApi = nock('http://0.0.0.0:60197')
|
||||||
@@ -227,7 +227,7 @@ describe('content-routing', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('should handle errors when finding providers', async () => {
|
it('should handle errors when finding providers', async () => {
|
||||||
const cid = new CID('QmU621oD8AhHw6t25vVyfYKmL9VV3PTgc52FngEhTGACFB')
|
const cid = CID.parse('QmU621oD8AhHw6t25vVyfYKmL9VV3PTgc52FngEhTGACFB')
|
||||||
const mockApi = nock('http://0.0.0.0:60197')
|
const mockApi = nock('http://0.0.0.0:60197')
|
||||||
.post('/api/v0/dht/findprovs')
|
.post('/api/v0/dht/findprovs')
|
||||||
.query(true)
|
.query(true)
|
||||||
|
@@ -177,6 +177,26 @@ describe('Dialing (direct, WebSockets)', () => {
|
|||||||
.and.to.have.property('code', ErrorCodes.ERR_TIMEOUT)
|
.and.to.have.property('code', ErrorCodes.ERR_TIMEOUT)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should throw when a peer advertises more than the allowed number of peers', async () => {
|
||||||
|
const spy = sinon.spy()
|
||||||
|
const dialer = new Dialer({
|
||||||
|
transportManager: localTM,
|
||||||
|
maxAddrsToDial: 10,
|
||||||
|
peerStore: {
|
||||||
|
delete: spy,
|
||||||
|
addressBook: {
|
||||||
|
add: () => { },
|
||||||
|
getMultiaddrsForPeer: () => Array.from({ length: 11 }, (_, i) => new Multiaddr(`/ip4/127.0.0.1/tcp/1500${i}/ws/p2p/12D3KooWHFKTMzwerBtsVmtz4ZZEQy2heafxzWw6wNn5PPYkBxJ5`))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
await expect(dialer.connectToPeer(remoteAddr))
|
||||||
|
.to.eventually.be.rejected()
|
||||||
|
.and.to.have.property('code', ErrorCodes.ERR_TOO_MANY_ADDRESSES)
|
||||||
|
expect(spy.calledOnce).to.be.true()
|
||||||
|
})
|
||||||
|
|
||||||
it('should sort addresses on dial', async () => {
|
it('should sort addresses on dial', async () => {
|
||||||
const peerMultiaddrs = [
|
const peerMultiaddrs = [
|
||||||
new Multiaddr('/ip4/127.0.0.1/tcp/15001/ws'),
|
new Multiaddr('/ip4/127.0.0.1/tcp/15001/ws'),
|
||||||
|
@@ -60,7 +60,8 @@ describe('Identify', () => {
|
|||||||
peerStore: localPeerStore,
|
peerStore: localPeerStore,
|
||||||
multiaddrs: listenMaddrs,
|
multiaddrs: listenMaddrs,
|
||||||
isStarted: () => true,
|
isStarted: () => true,
|
||||||
_options: { host: {} }
|
_options: { host: {} },
|
||||||
|
_config: { protocolPrefix: 'ipfs' }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const remoteIdentify = new IdentifyService({
|
const remoteIdentify = new IdentifyService({
|
||||||
@@ -70,7 +71,8 @@ describe('Identify', () => {
|
|||||||
peerStore: remotePeerStore,
|
peerStore: remotePeerStore,
|
||||||
multiaddrs: listenMaddrs,
|
multiaddrs: listenMaddrs,
|
||||||
isStarted: () => true,
|
isStarted: () => true,
|
||||||
_options: { host: {} }
|
_options: { host: {} },
|
||||||
|
_config: { protocolPrefix: 'ipfs' }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -119,7 +121,8 @@ describe('Identify', () => {
|
|||||||
peerStore: localPeerStore,
|
peerStore: localPeerStore,
|
||||||
multiaddrs: listenMaddrs,
|
multiaddrs: listenMaddrs,
|
||||||
isStarted: () => true,
|
isStarted: () => true,
|
||||||
_options: { host: { agentVersion } }
|
_options: { host: { agentVersion } },
|
||||||
|
_config: { protocolPrefix: 'ipfs' }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -131,7 +134,8 @@ describe('Identify', () => {
|
|||||||
peerStore: remotePeerStore,
|
peerStore: remotePeerStore,
|
||||||
multiaddrs: listenMaddrs,
|
multiaddrs: listenMaddrs,
|
||||||
isStarted: () => true,
|
isStarted: () => true,
|
||||||
_options: { host: { agentVersion } }
|
_options: { host: { agentVersion } },
|
||||||
|
_config: { protocolPrefix: 'ipfs' }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -180,7 +184,8 @@ describe('Identify', () => {
|
|||||||
connectionManager: new EventEmitter(),
|
connectionManager: new EventEmitter(),
|
||||||
peerStore: localPeerStore,
|
peerStore: localPeerStore,
|
||||||
multiaddrs: [],
|
multiaddrs: [],
|
||||||
_options: { host: {} }
|
_options: { host: {} },
|
||||||
|
_config: { protocolPrefix: 'ipfs' }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const remoteIdentify = new IdentifyService({
|
const remoteIdentify = new IdentifyService({
|
||||||
@@ -189,7 +194,8 @@ describe('Identify', () => {
|
|||||||
connectionManager: new EventEmitter(),
|
connectionManager: new EventEmitter(),
|
||||||
peerStore: remotePeerStore,
|
peerStore: remotePeerStore,
|
||||||
multiaddrs: [],
|
multiaddrs: [],
|
||||||
_options: { host: {} }
|
_options: { host: {} },
|
||||||
|
_config: { protocolPrefix: 'ipfs' }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -231,7 +237,8 @@ describe('Identify', () => {
|
|||||||
host: {
|
host: {
|
||||||
agentVersion
|
agentVersion
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
_config: { protocolPrefix: 'ipfs' }
|
||||||
},
|
},
|
||||||
protocols
|
protocols
|
||||||
})
|
})
|
||||||
@@ -261,7 +268,8 @@ describe('Identify', () => {
|
|||||||
peerStore: localPeerStore,
|
peerStore: localPeerStore,
|
||||||
multiaddrs: listenMaddrs,
|
multiaddrs: listenMaddrs,
|
||||||
isStarted: () => true,
|
isStarted: () => true,
|
||||||
_options: { host: {} }
|
_options: { host: {} },
|
||||||
|
_config: { protocolPrefix: 'ipfs' }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -275,7 +283,8 @@ describe('Identify', () => {
|
|||||||
peerStore: remotePeerStore,
|
peerStore: remotePeerStore,
|
||||||
multiaddrs: [],
|
multiaddrs: [],
|
||||||
isStarted: () => true,
|
isStarted: () => true,
|
||||||
_options: { host: {} }
|
_options: { host: {} },
|
||||||
|
_config: { protocolPrefix: 'ipfs' }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -333,7 +342,8 @@ describe('Identify', () => {
|
|||||||
peerStore: localPeerStore,
|
peerStore: localPeerStore,
|
||||||
multiaddrs: listenMaddrs,
|
multiaddrs: listenMaddrs,
|
||||||
isStarted: () => true,
|
isStarted: () => true,
|
||||||
_options: { host: {} }
|
_options: { host: {} },
|
||||||
|
_config: { protocolPrefix: 'ipfs' }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -347,6 +357,7 @@ describe('Identify', () => {
|
|||||||
peerStore: new PeerStore({ peerId: remotePeer }),
|
peerStore: new PeerStore({ peerId: remotePeer }),
|
||||||
multiaddrs: [],
|
multiaddrs: [],
|
||||||
_options: { host: {} },
|
_options: { host: {} },
|
||||||
|
_config: { protocolPrefix: 'ipfs' },
|
||||||
isStarted: () => true
|
isStarted: () => true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
/* eslint-env mocha */
|
/* eslint-env mocha */
|
||||||
|
|
||||||
const tests = require('libp2p-interfaces/src/crypto/tests')
|
const tests = require('libp2p-interfaces-compliance-tests/src/crypto')
|
||||||
const plaintext = require('../../src/insecure/plaintext')
|
const plaintext = require('../../src/insecure/plaintext')
|
||||||
|
|
||||||
describe('plaintext compliance', () => {
|
describe('plaintext compliance', () => {
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
const { expect } = require('aegir/utils/chai')
|
const { expect } = require('aegir/utils/chai')
|
||||||
const PeerId = require('peer-id')
|
const PeerId = require('peer-id')
|
||||||
const multihash = require('multihashes')
|
const { base58btc } = require('multiformats/bases/base58')
|
||||||
const crypto = require('libp2p-crypto')
|
const crypto = require('libp2p-crypto')
|
||||||
const rsaUtils = require('libp2p-crypto/src/keys/rsa-utils')
|
const rsaUtils = require('libp2p-crypto/src/keys/rsa-utils')
|
||||||
const rsaClass = require('libp2p-crypto/src/keys/rsa-class')
|
const rsaClass = require('libp2p-crypto/src/keys/rsa-class')
|
||||||
@@ -40,7 +40,7 @@ describe('peer ID', () => {
|
|||||||
const jwk = rsaUtils.pkixToJwk(publicKeyDer)
|
const jwk = rsaUtils.pkixToJwk(publicKeyDer)
|
||||||
const rsa = new rsaClass.RsaPublicKey(jwk)
|
const rsa = new rsaClass.RsaPublicKey(jwk)
|
||||||
const keyId = await rsa.hash()
|
const keyId = await rsa.hash()
|
||||||
const kids = multihash.toB58String(keyId)
|
const kids = base58btc.encode(keyId).substring(1)
|
||||||
expect(kids).to.equal(peer.toB58String())
|
expect(kids).to.equal(peer.toB58String())
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ describe('peer ID', () => {
|
|||||||
}
|
}
|
||||||
const rsa = new rsaClass.RsaPublicKey(jwk)
|
const rsa = new rsaClass.RsaPublicKey(jwk)
|
||||||
const keyId = await rsa.hash()
|
const keyId = await rsa.hash()
|
||||||
const kids = multihash.toB58String(keyId)
|
const kids = base58btc.encode(keyId).substring(1)
|
||||||
expect(kids).to.equal(peer.toB58String())
|
expect(kids).to.equal(peer.toB58String())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
const { expect } = require('aegir/utils/chai')
|
const { expect } = require('aegir/utils/chai')
|
||||||
|
|
||||||
const tests = require('libp2p-interfaces/src/record/tests')
|
const tests = require('libp2p-interfaces-compliance-tests/src/record')
|
||||||
const { Multiaddr } = require('multiaddr')
|
const { Multiaddr } = require('multiaddr')
|
||||||
const PeerId = require('peer-id')
|
const PeerId = require('peer-id')
|
||||||
|
|
||||||
|
@@ -52,7 +52,7 @@ describe('Dialing (via relay, TCP)', () => {
|
|||||||
await libp2p.stop()
|
await libp2p.stop()
|
||||||
// Clear the peer stores
|
// Clear the peer stores
|
||||||
for (const peerIdStr of libp2p.peerStore.peers.keys()) {
|
for (const peerIdStr of libp2p.peerStore.peers.keys()) {
|
||||||
const peerId = PeerId.createFromCID(peerIdStr)
|
const peerId = PeerId.createFromB58String(peerIdStr)
|
||||||
libp2p.peerStore.delete(peerId)
|
libp2p.peerStore.delete(peerId)
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
|
@@ -2,21 +2,21 @@
|
|||||||
"name": "ts-use",
|
"name": "ts-use",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"datastore-level": "^4.0.0",
|
"datastore-level": "^6.0.0",
|
||||||
"ipfs-http-client": "^49.0.4",
|
"ipfs-http-client": "^50.1.2",
|
||||||
"libp2p": "file:../..",
|
"libp2p": "file:../..",
|
||||||
"libp2p-bootstrap": "^0.12.2",
|
"libp2p-bootstrap": "^0.13.0",
|
||||||
"libp2p-delegated-content-routing": "^0.9.0",
|
"libp2p-delegated-content-routing": "^0.11.0",
|
||||||
"libp2p-delegated-peer-routing": "^0.8.2",
|
"libp2p-delegated-peer-routing": "^0.10.0",
|
||||||
"libp2p-gossipsub": "^0.8.0",
|
"libp2p-gossipsub": "^0.9.0",
|
||||||
"libp2p-interfaces": "^0.10.1",
|
"libp2p-interfaces": "^1.0.1",
|
||||||
"libp2p-kad-dht": "^0.21.0",
|
"libp2p-kad-dht": "^0.23.1",
|
||||||
"libp2p-mplex": "^0.10.2",
|
"libp2p-mplex": "^0.10.4",
|
||||||
"libp2p-noise": "^2.0.5",
|
"libp2p-noise": "^4.0.0",
|
||||||
"libp2p-record": "^0.10.2",
|
"libp2p-record": "^0.10.4",
|
||||||
"libp2p-tcp": "^0.15.3",
|
"libp2p-tcp": "^0.17.1",
|
||||||
"libp2p-websockets": "^0.15.3",
|
"libp2p-websockets": "^0.16.1",
|
||||||
"peer-id": "^0.14.3"
|
"peer-id": "^0.15.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "npx tsc",
|
"build": "npx tsc",
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import Libp2p = require('libp2p')
|
import Libp2p = require('libp2p')
|
||||||
import Libp2pRecord = require('libp2p-record')
|
import Libp2pRecord = require('libp2p-record')
|
||||||
|
import TCP = require('libp2p-tcp')
|
||||||
|
|
||||||
const TCP = require('libp2p-tcp')
|
|
||||||
const WEBSOCKETS = require('libp2p-websockets')
|
const WEBSOCKETS = require('libp2p-websockets')
|
||||||
const NOISE = require('libp2p-noise')
|
const NOISE = require('libp2p-noise')
|
||||||
const MPLEX = require('libp2p-mplex')
|
const MPLEX = require('libp2p-mplex')
|
||||||
|
Reference in New Issue
Block a user