Compare commits

..

13 Commits

Author SHA1 Message Date
Vasco Santos
372f772740 fix: not add abort signals to useless addrs 2021-04-14 16:54:22 +02:00
Vasco Santos
98325d95bf chore: apply suggestions from code review
Co-authored-by: Alex Potsides <alex@achingbrain.net>
2021-04-14 15:22:35 +02:00
Vasco Santos
8e91334e24 chore: remove url from node globals 2021-04-13 13:53:19 +02:00
Vasco Santos
e69eba6571 chore: decrease bundle size 2021-04-13 13:01:38 +02:00
Vasco Santos
5159d2368e chore: identify to protobufjs instead of protons 2021-04-13 10:51:37 +02:00
Vasco Santos
55bfbe21cc chore: add prepare script 2021-04-12 18:42:12 +02:00
Vasco Santos
040495dcdb chore: update interfaces and multiaddr 2021-04-12 18:17:41 +02:00
Vasco Santos
2bff878fc6 chore: replace protons with protobufjs 2021-04-08 15:12:13 +02:00
Vasco Santos
8083aae34c chore: update parcel 2021-04-07 10:33:16 +02:00
Vasco Santos
b0db319076 chore: add ts tests 2021-03-29 19:11:32 +02:00
Vasco Santos
ab0f087e27 chore: increase bundle size 2021-03-29 15:33:44 +02:00
Vasco Santos
a3a2f15b19 chore: update aegir 2021-03-29 15:29:45 +02:00
Vasco Santos
cec3ce7bb6 chore: config typescript 2021-03-27 18:19:51 +01:00
30 changed files with 89 additions and 303 deletions

View File

@@ -1,83 +1,3 @@
# [0.31.0](https://github.com/libp2p/js-libp2p/compare/v0.31.0-rc.7...v0.31.0) (2021-04-28)
# [0.31.0-rc.7](https://github.com/libp2p/js-libp2p/compare/v0.31.0-rc.6...v0.31.0-rc.7) (2021-04-27)
### Bug Fixes
* address book guarantees no replicated entries are added ([#927](https://github.com/libp2p/js-libp2p/issues/927)) ([ac370fc](https://github.com/libp2p/js-libp2p/commit/ac370fc9679b51da8cee3791b6dd268d0695d136))
# [0.31.0-rc.6](https://github.com/libp2p/js-libp2p/compare/v0.31.0-rc.5...v0.31.0-rc.6) (2021-04-22)
### Bug Fixes
* keychain optional pw and use interfaces for validators and selectors instead ([#924](https://github.com/libp2p/js-libp2p/issues/924)) ([88b0415](https://github.com/libp2p/js-libp2p/commit/88b04156bf614650c2b14d49b12e969c5eecf04d))
# [0.31.0-rc.5](https://github.com/libp2p/js-libp2p/compare/v0.31.0-rc.4...v0.31.0-rc.5) (2021-04-21)
### Bug Fixes
* address book should not emit peer event if no addresses are known ([b4fb9b7](https://github.com/libp2p/js-libp2p/commit/b4fb9b7bf266ba03c4462c0a41b1c2691e4e88d4))
* demand pubsub subclass instead of pubsub instance ([#922](https://github.com/libp2p/js-libp2p/issues/922)) ([086b0ec](https://github.com/libp2p/js-libp2p/commit/086b0ec0df2fac93845d0a0a6b2e2464e869afcd))
* dht configuration selectors and validators ([#919](https://github.com/libp2p/js-libp2p/issues/919)) ([cc1f4af](https://github.com/libp2p/js-libp2p/commit/cc1f4af879a58e94538591851d0085ff98cd2641))
# [0.31.0-rc.4](https://github.com/libp2p/js-libp2p/compare/v0.31.0-rc.3...v0.31.0-rc.4) (2021-04-20)
### Bug Fixes
* add clientMode dht arg and upgrade interface-datastore ([#918](https://github.com/libp2p/js-libp2p/issues/918)) ([975e779](https://github.com/libp2p/js-libp2p/commit/975e77991e67dd9bff790b83df7bd6fa5ddcfc67))
* do not add abort signals to useless addresses ([#913](https://github.com/libp2p/js-libp2p/issues/913)) ([06e8f3d](https://github.com/libp2p/js-libp2p/commit/06e8f3dd42432e4b37ab7904b02abde7d1cadda3))
* specify pbjs root ([#917](https://github.com/libp2p/js-libp2p/issues/917)) ([b043bca](https://github.com/libp2p/js-libp2p/commit/b043bca607565cf534771e6cf975288a8ff3030b))
# [0.31.0-rc.3](https://github.com/libp2p/js-libp2p/compare/v0.31.0-rc.2...v0.31.0-rc.3) (2021-04-19)
### Bug Fixes
* remove inline arg types from function definitions ([#916](https://github.com/libp2p/js-libp2p/issues/916)) ([2af692f](https://github.com/libp2p/js-libp2p/commit/2af692fb4de572168524ae684608fc6526de4ef7))
# [0.31.0-rc.2](https://github.com/libp2p/js-libp2p/compare/v0.31.0-rc.1...v0.31.0-rc.2) (2021-04-16)
### Bug Fixes
* metrics stats and moving averages types ([#915](https://github.com/libp2p/js-libp2p/issues/915)) ([3d0a79e](https://github.com/libp2p/js-libp2p/commit/3d0a79eff3bc34a5bdc8ffa31e9b09345a02ad9d))
# [0.31.0-rc.1](https://github.com/libp2p/js-libp2p/compare/v0.31.0-rc.0...v0.31.0-rc.1) (2021-04-16)
### Bug Fixes
* dial protocol should throw if no protocol is provided ([#914](https://github.com/libp2p/js-libp2p/issues/914)) ([21c9aee](https://github.com/libp2p/js-libp2p/commit/21c9aeecb13440238aa6b0fb5a6731d2f87d4938))
### BREAKING CHANGES
* dialProtocol does not return connection when no protocols are provided
# [0.31.0-rc.0](https://github.com/libp2p/js-libp2p/compare/v0.30.12...v0.31.0-rc.0) (2021-04-15)
## [0.30.12](https://github.com/libp2p/js-libp2p/compare/v0.30.11...v0.30.12) (2021-03-27)

View File

@@ -25,6 +25,7 @@
- [ ] [js-ipfs](https://github.com/ipfs/js-ipfs)
- Documentation
- [ ] Ensure that README.md is up to date
- [ ] Ensure that all the examples run
- [ ] Ensure [libp2p/js-libp2p-examples](https://github.com/libp2p/js-libp2p-examples) is updated
- [ ] Ensure that [libp2p/docs](https://github.com/libp2p/docs) is updated
- Communication

View File

@@ -4,13 +4,9 @@ This example leverages the [Parcel.js bundler](https://parceljs.org/) to compile
## Setup
In order to run the example:
- Install dependencey at the root of the js-libp2p repository (if not already done),
- then, install the dependencies from same directory as this README:
In order to run the example, first install the dependencies from same directory as this README:
```
npm install
cd ./examples/libp2p-in-the-browser
npm install
```

View File

@@ -1,6 +1,6 @@
{
"name": "libp2p",
"version": "0.31.0",
"version": "0.30.12",
"description": "JavaScript implementation of libp2p, a modular peer to peer network stack",
"leadMaintainer": "Jacob Heun <jacobheun@gmail.com>",
"main": "src/index.js",
@@ -21,13 +21,13 @@
"lint": "aegir lint",
"build": "aegir build",
"build:proto": "npm run build:proto:circuit && npm run build:proto:identify && npm run build:proto:plaintext && npm run build:proto:address-book && npm run build:proto:proto-book && npm run build:proto:peer-record && npm run build:proto:envelope",
"build:proto:circuit": "pbjs -t static-module -w commonjs -r libp2p-circuit --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/circuit/protocol/index.js ./src/circuit/protocol/index.proto",
"build:proto:identify": "pbjs -t static-module -w commonjs -r libp2p-identify --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/identify/message.js ./src/identify/message.proto",
"build:proto:plaintext": "pbjs -t static-module -w commonjs -r libp2p-plaintext --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/insecure/proto.js ./src/insecure/proto.proto",
"build:proto:address-book": "pbjs -t static-module -w commonjs -r libp2p-address-book --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/peer-store/persistent/pb/address-book.js ./src/peer-store/persistent/pb/address-book.proto",
"build:proto:proto-book": "pbjs -t static-module -w commonjs -r libp2p-proto-book --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/peer-store/persistent/pb/proto-book.js ./src/peer-store/persistent/pb/proto-book.proto",
"build:proto:peer-record": "pbjs -t static-module -w commonjs -r libp2p-peer-record --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/record/peer-record/peer-record.js ./src/record/peer-record/peer-record.proto",
"build:proto:envelope": "pbjs -t static-module -w commonjs -r libp2p-envelope --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/record/envelope/envelope.js ./src/record/envelope/envelope.proto",
"build:proto:circuit": "pbjs -t static-module -w commonjs --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/circuit/protocol/index.js ./src/circuit/protocol/index.proto",
"build:proto:identify": "pbjs -t static-module -w commonjs --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/identify/message.js ./src/identify/message.proto",
"build:proto:plaintext": "pbjs -t static-module -w commonjs --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/insecure/proto.js ./src/insecure/proto.proto",
"build:proto:address-book": "pbjs -t static-module -w commonjs --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/peer-store/persistent/pb/address-book.js ./src/peer-store/persistent/pb/address-book.proto",
"build:proto:proto-book": "pbjs -t static-module -w commonjs --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/peer-store/persistent/pb/proto-book.js ./src/peer-store/persistent/pb/proto-book.proto",
"build:proto:peer-record": "pbjs -t static-module -w commonjs --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/record/peer-record/peer-record.js ./src/record/peer-record/peer-record.proto",
"build:proto:envelope": "pbjs -t static-module -w commonjs --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/record/envelope/envelope.js ./src/record/envelope/envelope.proto",
"build:proto-types": "npm run build:proto-types:circuit && npm run build:proto-types:identify && npm run build:proto-types:plaintext && npm run build:proto-types:address-book && npm run build:proto-types:proto-book && npm run build:proto-types:peer-record && npm run build:proto-types:envelope",
"build:proto-types:circuit": "pbts -o src/circuit/protocol/index.d.ts src/circuit/protocol/index.js",
"build:proto-types:identify": "pbts -o src/identify/message.d.ts src/identify/message.js",
@@ -90,7 +90,7 @@
"es6-promisify": "^6.1.1",
"events": "^3.3.0",
"hashlru": "^2.3.0",
"interface-datastore": "^4.0.0",
"interface-datastore": "^3.0.3",
"ipfs-utils": "^6.0.0",
"it-all": "^1.0.4",
"it-buffer": "^0.1.2",
@@ -104,7 +104,7 @@
"it-pipe": "^1.1.0",
"it-take": "1.0.0",
"libp2p-crypto": "^0.19.0",
"libp2p-interfaces": "^0.10.3",
"libp2p-interfaces": "^0.10.0",
"libp2p-utils": "^0.3.1",
"mafmt": "^9.0.0",
"merge-options": "^3.0.4",
@@ -136,8 +136,10 @@
"@types/node-forge": "^0.9.7",
"@types/varint": "^6.0.0",
"abortable-iterator": "^3.0.0",
"aegir": "^33.1.1",
"aegir": "^33.0.0",
"buffer": "^6.0.3",
"chai-bytes": "^0.1.2",
"chai-string": "^1.5.0",
"delay": "^5.0.0",
"interop-libp2p": "^0.3.0",
"into-stream": "^6.0.0",
@@ -154,7 +156,7 @@
"libp2p-kad-dht": "^0.21.0",
"libp2p-mdns": "^0.16.0",
"libp2p-mplex": "^0.10.1",
"libp2p-noise": "^3.0.0",
"libp2p-noise": "^2.0.0",
"libp2p-tcp": "^0.15.1",
"libp2p-webrtc-star": "^0.22.0",
"libp2p-websockets": "^0.15.0",
@@ -170,59 +172,58 @@
},
"contributors": [
"David Dias <daviddias.p@gmail.com>",
"Vasco Santos <vasco.santos@moxy.studio>",
"Jacob Heun <jacobheun@gmail.com>",
"Alex Potsides <alex@achingbrain.net>",
"Vasco Santos <vasco.santos@moxy.studio>",
"Alan Shaw <alan@tableflip.io>",
"Alex Potsides <alex@achingbrain.net>",
"Cayman <caymannava@gmail.com>",
"Pedro Teixeira <i@pgte.me>",
"Friedel Ziegelmayer <dignifiedquire@gmail.com>",
"Maciej Krüger <mkg20001@gmail.com>",
"Hugo Dias <mail@hugodias.me>",
"dirkmc <dirkmdev@gmail.com>",
"Volker Mische <volker.mische@gmail.com>",
"dirkmc <dirkmdev@gmail.com>",
"Richard Littauer <richard.littauer@gmail.com>",
"a1300 <matthias-knopp@gmx.net>",
"Elven <mon.samuel@qq.com>",
"Giovanni T. Parra <fiatjaf@gmail.com>",
"Andrew Nesbitt <andrewnez@gmail.com>",
"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ <victorbjelkholm@gmail.com>",
"Giovanni T. Parra <fiatjaf@gmail.com>",
"Ryan Bell <ryan@piing.net>",
"Thomas Eizinger <thomas@eizinger.io>",
"Samlior <samlior@foxmail.com>",
"Ryan Bell <ryan@piing.net>",
"Andrew Nesbitt <andrewnez@gmail.com>",
"Didrik Nordström <didrik.nordstrom@gmail.com>",
"Didrik Nordström <didrik@betamos.se>",
"Julien Bouquillon <contact@revolunet.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>",
"RasmusErik Voel Jensen <github@solsort.com>",
"Smite Chow <xiaopengyou@live.com>",
"Soeren <nikorpoulsen@gmail.com>",
"Sönke Hahn <soenkehahn@gmail.com>",
"TJKoury <TJKoury@gmail.com>",
"Tiago Alves <alvesjtiago@gmail.com>",
"Daijiro Wachi <daijiro.wachi@gmail.com>",
"Cindy Wu <ciindy.wu@gmail.com>",
"Chris Bratlien <chrisbratlien@gmail.com>",
"Yusef Napora <yusef@napora.org>",
"Zane Starr <zcstarr@gmail.com>",
"Bernd Strehl <bernd.strehl@gmail.com>",
"ebinks <elizabethjbinks@gmail.com>",
"Ethan Lam <elmemphis2000@gmail.com>",
"isan_rivkin <isanrivkin@gmail.com>",
"robertkiel <robert.kiel@validitylabs.org>",
"RasmusErik Voel Jensen <github@solsort.com>",
"Aleksei <vozhdb@gmail.com>",
"Bernd Strehl <bernd.strehl@gmail.com>",
"Chris Bratlien <chrisbratlien@gmail.com>",
"Cindy Wu <ciindy.wu@gmail.com>",
"Daijiro Wachi <daijiro.wachi@gmail.com>",
"Diogo Silva <fsdiogo@gmail.com>",
"Dmitriy Ryajov <dryajov@gmail.com>",
"Ethan Lam <elmemphis2000@gmail.com>",
"Fei Liu <liu.feiwood@gmail.com>",
"Felipe Martins <felipebrasil93@gmail.com>",
"Florian-Merle <florian.david.merle@gmail.com>",
"Francis Gulotta <wizard@roborooter.com>",
"Franck Royer <franck@royer.one>",
"Dmitriy Ryajov <dryajov@gmail.com>",
"Henrique Dias <hacdias@gmail.com>",
"Irakli Gozalishvili <rfobic@gmail.com>",
"Joel Gustafson <joelg@mit.edu>",
"Julien Bouquillon <contact@revolunet.com>",
"Kevin Kwok <antimatter15@gmail.com>",
"Kevin Lacker <lacker@gmail.com>",
"Miguel Mota <miguelmota2@gmail.com>"
"Diogo Silva <fsdiogo@gmail.com>",
"Joel Gustafson <joelg@mit.edu>"
]
}

View File

@@ -31,7 +31,6 @@ const {
*
* @typedef {Object} AutoRelayOptions
* @property {number} [maxListeners = 1] - maximum number of relays to listen.
* @property {(error: Error, msg?: string) => {}} [onError]
*/
class AutoRelay {
@@ -41,7 +40,7 @@ class AutoRelay {
* @class
* @param {AutoRelayProperties & AutoRelayOptions} props
*/
constructor ({ libp2p, maxListeners = 1, onError }) {
constructor ({ libp2p, maxListeners = 1 }) {
this._libp2p = libp2p
this._peerId = libp2p.peerId
this._peerStore = libp2p.peerStore
@@ -61,15 +60,6 @@ class AutoRelay {
this._peerStore.on('change:protocols', this._onProtocolChange)
this._connectionManager.on('peer:disconnect', this._onPeerDisconnected)
/**
* @param {Error} error
* @param {string} [msg]
*/
this._onError = (error, msg) => {
log.error(msg || error)
onError && onError(error, msg)
}
}
/**
@@ -117,7 +107,7 @@ class AutoRelay {
await this._addListenRelay(connection, id)
}
} catch (err) {
this._onError(err)
log.error(err)
}
}
@@ -170,7 +160,7 @@ class AutoRelay {
await this._transportManager.listen([new Multiaddr(listenAddr)])
// Announce multiaddrs will update on listen success by TransportManager event being triggered
} catch (err) {
this._onError(err)
log.error(err)
this._listenRelays.delete(id)
}
}
@@ -241,7 +231,8 @@ class AutoRelay {
// Try to listen on known peers that are not connected
for (const peerId of knownHopsToDial) {
await this._tryToListenOnRelay(peerId)
const connection = await this._libp2p.dial(peerId)
await this._addListenRelay(connection, peerId.toB58String())
// Check if already listening on enough relays
if (this._listenRelays.size >= this.maxListeners) {
@@ -256,11 +247,12 @@ class AutoRelay {
if (!provider.multiaddrs.length) {
continue
}
const peerId = provider.id
this._peerStore.addressBook.add(peerId, provider.multiaddrs)
await this._tryToListenOnRelay(peerId)
this._peerStore.addressBook.add(peerId, provider.multiaddrs)
const connection = await this._libp2p.dial(peerId)
await this._addListenRelay(connection, peerId.toB58String())
// Check if already listening on enough relays
if (this._listenRelays.size >= this.maxListeners) {
@@ -268,19 +260,7 @@ class AutoRelay {
}
}
} catch (err) {
this._onError(err)
}
}
/**
* @param {PeerId} peerId
*/
async _tryToListenOnRelay (peerId) {
try {
const connection = await this._libp2p.dial(peerId)
await this._addListenRelay(connection, peerId.toB58String())
} catch (err) {
this._onError(err, `could not connect and listen on known hop relay ${peerId.toB58String()}`)
log.error(err)
}
}
}

View File

@@ -7,7 +7,7 @@ var $protobuf = require("protobufjs/minimal");
var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
// Exported root namespace
var $root = $protobuf.roots["libp2p-circuit"] || ($protobuf.roots["libp2p-circuit"] = {});
var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
$root.CircuitRelay = (function() {

View File

@@ -11,7 +11,6 @@ exports.codes = {
PUBSUB_NOT_STARTED: 'ERR_PUBSUB_NOT_STARTED',
DHT_NOT_STARTED: 'ERR_DHT_NOT_STARTED',
CONN_ENCRYPTION_REQUIRED: 'ERR_CONN_ENCRYPTION_REQUIRED',
ERR_INVALID_PROTOCOLS_FOR_STREAM: 'ERR_INVALID_PROTOCOLS_FOR_STREAM',
ERR_CONNECTION_ENDED: 'ERR_CONNECTION_ENDED',
ERR_CONNECTION_FAILED: 'ERR_CONNECTION_FAILED',
ERR_NODE_NOT_STARTED: 'ERR_NODE_NOT_STARTED',

View File

@@ -7,7 +7,7 @@ var $protobuf = require("protobufjs/minimal");
var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
// Exported root namespace
var $root = $protobuf.roots["libp2p-identify"] || ($protobuf.roots["libp2p-identify"] = {});
var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
$root.Identify = (function() {

View File

@@ -66,9 +66,6 @@ const { updateSelfPeerRecord } = require('./record/utils')
* @property {boolean} [enabled = false]
* @property {number} [kBucketSize = 20]
* @property {RandomWalkOptions} [randomWalk]
* @property {boolean} [clientMode]
* @property {import('libp2p-interfaces/src/types').DhtSelectors} [selectors]
* @property {import('libp2p-interfaces/src/types').DhtValidators} [validators]
*
* @typedef {Object} KeychainOptions
* @property {Datastore} [datastore]
@@ -104,7 +101,7 @@ const { updateSelfPeerRecord } = require('./record/utils')
* @property {PeerRoutingModule[]} [peerRouting]
* @property {ContentRoutingModule[]} [contentRouting]
* @property {Object} [dht]
* @property {{new(...args: any[]): Pubsub}} [pubsub]
* @property {Pubsub} [pubsub]
* @property {Protector} [connProtector]
*
* @typedef {Object} Libp2pOptions
@@ -465,23 +462,26 @@ class Libp2p extends EventEmitter {
}
/**
* Dials to the provided peer and tries to handshake with the given protocols in order.
* Dials to the provided peer and handshakes with the given protocol.
* If successful, the known metadata of the peer will be added to the nodes `peerStore`,
* and the `MuxedStream` will be returned together with the successful negotiated protocol.
* and the `Connection` will be returned
*
* @async
* @param {PeerId|Multiaddr|string} peer - The peer to dial
* @param {string[]|string} protocols
* @param {object} [options]
* @param {AbortSignal} [options.signal]
* @returns {Promise<Connection|{ stream: MuxedStream; protocol: string; }>}
*/
async dialProtocol (peer, protocols, options) {
if (!protocols || !protocols.length) {
throw errCode(new Error('no protocols were provided to open a stream'), codes.ERR_INVALID_PROTOCOLS_FOR_STREAM)
const connection = await this._dial(peer, options)
// If a protocol was provided, create a new stream
if (protocols && protocols.length) {
return connection.newStream(protocols)
}
const connection = await this._dial(peer, options)
return connection.newStream(protocols)
return connection
}
/**
@@ -700,7 +700,7 @@ class Libp2p extends EventEmitter {
try {
await this.dialer.connectToPeer(peerId)
} catch (err) {
log.error(`could not connect to discovered peer ${peerId.toB58String()} with ${err}`)
log.error('could not connect to discovered peer', err)
}
}
}

View File

@@ -7,7 +7,7 @@ var $protobuf = require("protobufjs/minimal");
var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
// Exported root namespace
var $root = $protobuf.roots["libp2p-plaintext"] || ($protobuf.roots["libp2p-plaintext"] = {});
var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
$root.Exchange = (function() {

View File

@@ -26,7 +26,7 @@ require('node-forge/lib/sha512')
* @property {number} keyLength
*
* @typedef {Object} KeychainOptions
* @property {string} [pass]
* @property {string} pass
* @property {DekOptions} [dek]
*/

View File

@@ -2,7 +2,7 @@
'use strict'
const EventEmitter = require('events')
const { BigNumber: Big } = require('bignumber.js')
const Big = require('bignumber.js')
const MovingAverage = require('moving-average')
const retimer = require('retimer')
@@ -19,17 +19,11 @@ class Stats extends EventEmitter {
this._options = options
this._queue = []
/** @type {{ dataReceived: Big, dataSent: Big }} */
this._stats = {
dataReceived: Big(0),
dataSent: Big(0)
}
this._stats = {}
this._frequencyLastTime = Date.now()
this._frequencyAccumulators = {}
/** @type {{ dataReceived: MovingAverage[], dataSent: MovingAverage[] }} */
this._movingAverages = {}
this._update = this._update.bind(this)

View File

@@ -229,11 +229,6 @@ class AddressBook extends Book {
const addresses = this._toAddresses(multiaddrs)
const id = peerId.toB58String()
// No addresses to be added
if (!addresses.length) {
return this
}
const entry = this.data.get(id)
if (entry && entry.addresses) {
@@ -307,13 +302,10 @@ class AddressBook extends Book {
throw errcode(new Error(`multiaddr ${addr} must be an instance of multiaddr`), ERR_INVALID_PARAMETERS)
}
// Guarantee no replicates
if (!addresses.find((a) => a.multiaddr.equals(addr))) {
addresses.push({
multiaddr: addr,
isCertified
})
}
addresses.push({
multiaddr: addr,
isCertified
})
})
return addresses

View File

@@ -7,7 +7,7 @@ var $protobuf = require("protobufjs/minimal");
var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
// Exported root namespace
var $root = $protobuf.roots["libp2p-address-book"] || ($protobuf.roots["libp2p-address-book"] = {});
var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
$root.Addresses = (function() {

View File

@@ -7,7 +7,7 @@ var $protobuf = require("protobufjs/minimal");
var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
// Exported root namespace
var $root = $protobuf.roots["libp2p-proto-book"] || ($protobuf.roots["libp2p-proto-book"] = {});
var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
$root.Protocols = (function() {

View File

@@ -7,13 +7,12 @@
*/
/**
* @param {{new(...args: any[]): PubsubRouter}} PubsubRouter
* @param {import("libp2p-interfaces/src/pubsub")} PubsubRouter
* @param {import('.')} libp2p
* @param {{ enabled: boolean; } & import(".").PubsubLocalOptions & import("libp2p-interfaces/src/pubsub").PubsubOptions} options
*/
function pubsubAdapter (PubsubRouter, libp2p, options) {
/** @type {PubsubRouter & { _subscribeAdapter: PubsubRouter['subscribe'], _unsubscribeAdapter: PubsubRouter['unsubscribe'] }} */
// @ts-ignore we set the extra _subscribeAdapter and _unsubscribeAdapter properties afterwards
// @ts-ignore Pubsub constructor type not defined
const pubsub = new PubsubRouter(libp2p, options)
pubsub._subscribeAdapter = pubsub.subscribe
pubsub._unsubscribeAdapter = pubsub.unsubscribe

View File

@@ -7,7 +7,7 @@ var $protobuf = require("protobufjs/minimal");
var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
// Exported root namespace
var $root = $protobuf.roots["libp2p-envelope"] || ($protobuf.roots["libp2p-envelope"] = {});
var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
$root.Envelope = (function() {

View File

@@ -7,7 +7,7 @@ var $protobuf = require("protobufjs/minimal");
var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
// Exported root namespace
var $root = $protobuf.roots["libp2p-peer-record"] || ($protobuf.roots["libp2p-peer-record"] = {});
var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
$root.PeerRecord = (function() {

View File

@@ -222,7 +222,6 @@ class Upgrader {
}) {
/** @type {import("libp2p-interfaces/src/stream-muxer/types").Muxer} */
let muxer
/** @type {import("libp2p-interfaces/src/connection/connection").CreatedMuxedStream | undefined} */
let newStream
/** @type {Connection} */
let connection // eslint-disable-line prefer-const
@@ -250,7 +249,7 @@ class Upgrader {
}
})
newStream = async (protocols) => {
newStream = async (/** @type {string | string[]} */ protocols) => {
log('%s: starting new stream on %s', direction, protocols)
const muxedStream = muxer.newStream()
const mss = new Multistream.Dialer(muxedStream)
@@ -310,8 +309,8 @@ class Upgrader {
},
newStream: newStream || errConnectionNotMultiplexed,
getStreams: () => muxer ? muxer.streams : errConnectionNotMultiplexed(),
close: async () => {
await maConn.close()
close: async (/** @type {Error | undefined} */ err) => {
await maConn.close(err)
// Ensure remaining streams are aborted
if (muxer) {
muxer.streams.map(stream => stream.abort())

View File

@@ -372,25 +372,6 @@ describe('Dialing (direct, TCP)', () => {
await pWaitFor(() => remoteConn.streams.length === 0)
})
it('should throw when using dialProtocol with no protocols', async () => {
libp2p = new Libp2p({
peerId,
modules: {
transport: [Transport],
streamMuxer: [Muxer],
connEncryption: [Crypto]
}
})
await expect(libp2p.dialProtocol(remotePeerId))
.to.eventually.be.rejectedWith(Error)
.and.to.have.property('code', ErrorCodes.ERR_INVALID_PROTOCOLS_FOR_STREAM)
await expect(libp2p.dialProtocol(remotePeerId, []))
.to.eventually.be.rejectedWith(Error)
.and.to.have.property('code', ErrorCodes.ERR_INVALID_PROTOCOLS_FOR_STREAM)
})
it('should be able to use hangup to close connections', async () => {
libp2p = new Libp2p({
peerId,

View File

@@ -2,7 +2,8 @@
/* eslint-env mocha */
'use strict'
const { expect } = require('aegir/utils/chai')
const { chai, expect } = require('aegir/utils/chai')
chai.use(require('chai-string'))
const uint8ArrayFromString = require('uint8arrays/from-string')
const uint8ArrayToString = require('uint8arrays/to-string')
const { MemoryDatastore } = require('interface-datastore')

View File

@@ -2,8 +2,9 @@
/* eslint-env mocha */
'use strict'
const { expect } = require('aegir/utils/chai')
const { chai, expect } = require('aegir/utils/chai')
const fail = expect.fail
chai.use(require('chai-string'))
const uint8ArrayFromString = require('uint8arrays/from-string')
const uint8ArrayToString = require('uint8arrays/to-string')

View File

@@ -186,23 +186,6 @@ describe('addressBook', () => {
throw new Error('invalid multiaddr should throw error')
})
it('does not emit event if no addresses are added', async () => {
const defer = pDefer()
peerStore.on('peer', () => {
defer.reject()
})
ab.add(peerId, [])
// Wait 50ms for incorrect second event
setTimeout(() => {
defer.resolve()
}, 50)
await defer.promise
})
it('adds the new content and emits change event', () => {
const defer = pDefer()
@@ -287,14 +270,6 @@ describe('addressBook', () => {
await defer.promise
})
it('does not add replicated content', () => {
// set 1
ab.set(peerId, [addr1, addr1])
const addresses = ab.get(peerId)
expect(addresses).to.have.lengthOf(1)
})
})
describe('addressBook.get', () => {

View File

@@ -1,7 +1,8 @@
'use strict'
/* eslint-env mocha */
const { expect } = require('aegir/utils/chai')
const { chai, expect } = require('aegir/utils/chai')
chai.use(require('chai-bytes'))
const sinon = require('sinon')
const PeerStore = require('../../src/peer-store')

View File

@@ -1,7 +1,8 @@
'use strict'
/* eslint-env mocha */
const { expect } = require('aegir/utils/chai')
const { chai, expect } = require('aegir/utils/chai')
chai.use(require('chai-bytes'))
const uint8ArrayFromString = require('uint8arrays/from-string')
const pDefer = require('p-defer')

View File

@@ -1,7 +1,8 @@
'use strict'
/* eslint-env mocha */
const { expect } = require('aegir/utils/chai')
const { chai, expect } = require('aegir/utils/chai')
chai.use(require('chai-bytes'))
const sinon = require('sinon')
const baseOptions = require('../utils/base-options')

View File

@@ -1,7 +1,8 @@
'use strict'
/* eslint-env mocha */
const { expect } = require('aegir/utils/chai')
const { chai, expect } = require('aegir/utils/chai')
chai.use(require('chai-bytes'))
const uint8arrayFromString = require('uint8arrays/from-string')
const uint8arrayEquals = require('uint8arrays/equals')
const Envelope = require('../../src/record/envelope')

View File

@@ -3,7 +3,6 @@
const { expect } = require('aegir/utils/chai')
const delay = require('delay')
const pDefer = require('p-defer')
const pWaitFor = require('p-wait-for')
const sinon = require('sinon')
const nock = require('nock')
@@ -359,7 +358,6 @@ describe('auto-relay', () => {
expect(relayLibp2p1.connectionManager.size).to.equal(1)
// Spy on dial
sinon.spy(autoRelay1, '_tryToListenOnRelay')
sinon.spy(relayLibp2p1, 'dial')
// Remove peer used as relay from peerStore and disconnect it
@@ -370,54 +368,9 @@ describe('auto-relay', () => {
// Wait for other peer connected to be added as listen addr
await pWaitFor(() => relayLibp2p1.transportManager.listen.callCount === 2)
expect(autoRelay1._tryToListenOnRelay.callCount).to.equal(1)
expect(autoRelay1._listenRelays.size).to.equal(1)
expect(relayLibp2p1.connectionManager.size).to.eql(1)
})
it('should not fail when trying to dial unreachable peers to add as hop relay and replaced removed ones', async () => {
const defer = pDefer()
// Spy if a connected peer is being added as listen relay
sinon.spy(autoRelay1, '_addListenRelay')
sinon.spy(relayLibp2p1.transportManager, 'listen')
// Discover one relay and connect
relayLibp2p1.peerStore.addressBook.add(relayLibp2p2.peerId, relayLibp2p2.multiaddrs)
await relayLibp2p1.dial(relayLibp2p2.peerId)
// Discover an extra relay and connect to gather its Hop support
relayLibp2p1.peerStore.addressBook.add(relayLibp2p3.peerId, relayLibp2p3.multiaddrs)
await relayLibp2p1.dial(relayLibp2p3.peerId)
// Wait for both peer to be attempted to added as listen relay
await pWaitFor(() => autoRelay1._addListenRelay.callCount === 2)
expect(autoRelay1._listenRelays.size).to.equal(1)
expect(relayLibp2p1.connectionManager.size).to.equal(2)
// Only one will be used for listeninng
expect(relayLibp2p1.transportManager.listen.callCount).to.equal(1)
// Disconnect not used listen relay
await relayLibp2p1.hangUp(relayLibp2p3.peerId)
expect(autoRelay1._listenRelays.size).to.equal(1)
expect(relayLibp2p1.connectionManager.size).to.equal(1)
// Stub dial
sinon.stub(relayLibp2p1, 'dial').callsFake(() => {
defer.resolve()
return Promise.reject(new Error('failed to dial'))
})
// Remove peer used as relay from peerStore and disconnect it
relayLibp2p1.peerStore.delete(relayLibp2p2.peerId)
await relayLibp2p1.hangUp(relayLibp2p2.peerId)
expect(autoRelay1._listenRelays.size).to.equal(0)
expect(relayLibp2p1.connectionManager.size).to.equal(0)
// Wait for failed dial
await defer.promise
})
})
describe('flows with 2 max listeners', () => {

View File

@@ -9,11 +9,10 @@
"libp2p-delegated-content-routing": "^0.9.0",
"libp2p-delegated-peer-routing": "^0.8.2",
"libp2p-gossipsub": "^0.8.0",
"libp2p-interfaces": "^0.10.1",
"libp2p-interfaces": "^0.8.4",
"libp2p-kad-dht": "^0.21.0",
"libp2p-mplex": "^0.10.2",
"libp2p-noise": "^2.0.5",
"libp2p-record": "^0.10.2",
"libp2p-tcp": "^0.15.3",
"libp2p-websockets": "^0.15.3",
"peer-id": "^0.14.3"

View File

@@ -1,5 +1,4 @@
import Libp2p = require('libp2p')
import Libp2pRecord = require('libp2p-record')
const TCP = require('libp2p-tcp')
const WEBSOCKETS = require('libp2p-websockets')
@@ -23,7 +22,6 @@ const DelegatedPeerRouter = require('libp2p-delegated-peer-routing')
const DelegatedContentRouter = require('libp2p-delegated-content-routing')
const PeerId = require('peer-id')
// Known peers addresses
const bootstrapMultiaddrs = [
'/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb',
@@ -127,13 +125,6 @@ async function main() {
enabled: true, // Allows to disable discovery (enabled by default)
interval: 300e3,
timeout: 10e3
},
clientMode: true,
validators: {
pk: Libp2pRecord.validator.validators.pk
},
selectors: {
pk: Libp2pRecord.selection.selectors.pk
}
},
nat: {