From 6c30e8d400140492edd9baef95a85ef61f946da0 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Tue, 14 Jun 2022 16:12:37 +1000 Subject: [PATCH 01/68] Use `PeerId.toString()` instead of `toB58String()` New version of `PeerId` will only support `toString` --- examples/web-chat/src/command.ts | 4 ++-- src/lib/discovery/dns.spec.ts | 10 +++++----- src/lib/discovery/fetch_nodes.spec.ts | 18 ++++++------------ src/lib/enr/enr.node.spec.ts | 6 +++--- src/lib/enr/enr.spec.ts | 2 +- src/lib/enr/enr.ts | 6 ++---- src/lib/waku.node.spec.ts | 12 ++++++------ src/lib/waku.ts | 12 ++++++------ src/lib/waku_filter/index.ts | 4 ++-- src/lib/waku_relay/index.node.spec.ts | 6 +++--- src/lib/waku_relay/index.ts | 2 +- src/lib/waku_store/index.ts | 6 +++--- 12 files changed, 40 insertions(+), 48 deletions(-) diff --git a/examples/web-chat/src/command.ts b/examples/web-chat/src/command.ts index c1e5b98823..cd7b1beb41 100644 --- a/examples/web-chat/src/command.ts +++ b/examples/web-chat/src/command.ts @@ -26,7 +26,7 @@ function info(waku: Waku | undefined): string[] { if (!waku) { return ["Waku node is starting"]; } - return [`PeerId: ${waku.libp2p.peerId.toB58String()}`]; + return [`PeerId: ${waku.libp2p.peerId.toString()}`]; } function connect(peer: string | undefined, waku: Waku | undefined): string[] { @@ -64,7 +64,7 @@ async function peers(waku: Waku | undefined): Promise { peers.push(peer); } Array.from(peers).forEach((peer) => { - response.push(peer.id.toB58String() + ":"); + response.push(peer.id.toString() + ":"); let addresses = " addresses: ["; peer.addresses.forEach(({ multiaddr }) => { addresses += " " + multiaddr.toString() + ","; diff --git a/src/lib/discovery/dns.spec.ts b/src/lib/discovery/dns.spec.ts index 2db676f514..93c28cf10b 100644 --- a/src/lib/discovery/dns.spec.ts +++ b/src/lib/discovery/dns.spec.ts @@ -171,7 +171,7 @@ describe("DNS Node Discovery w/ capabilities", () => { }); expect(peers.length).to.eq(1); - expect(peers[0].peerId?.toB58String()).to.eq( + expect(peers[0].peerId?.toString()).to.eq( "16Uiu2HAmPsYLvfKafxgRsb6tioYyGnSvGXS2iuMigptHrqHPNPzx" ); }); @@ -186,7 +186,7 @@ describe("DNS Node Discovery w/ capabilities", () => { }); expect(peers.length).to.eq(1); - expect(peers[0].peerId?.toB58String()).to.eq( + expect(peers[0].peerId?.toString()).to.eq( "16Uiu2HAm2HyS6brcCspSbszG9i36re2bWBVjMe3tMdnFp1Hua34F" ); }); @@ -200,7 +200,7 @@ describe("DNS Node Discovery w/ capabilities", () => { }); expect(peers.length).to.eq(1); - expect(peers[0].peerId?.toB58String()).to.eq( + expect(peers[0].peerId?.toString()).to.eq( "16Uiu2HAkv3La3ECgQpdYeEJfrX36EWdhkUDv4C9wvXM8TFZ9dNgd" ); }); @@ -220,7 +220,7 @@ describe("DNS Node Discovery w/ capabilities", () => { }); expect(peers.length).to.eq(2); - const peerIds = peers.map((p) => p.peerId?.toB58String()); + const peerIds = peers.map((p) => p.peerId?.toString()); expect(peerIds).to.contain( "16Uiu2HAm2HyS6brcCspSbszG9i36re2bWBVjMe3tMdnFp1Hua34F" ); @@ -246,7 +246,7 @@ describe("DNS Node Discovery w/ capabilities", () => { }); expect(peers.length).to.eq(3); - const peerIds = peers.map((p) => p.peerId?.toB58String()); + const peerIds = peers.map((p) => p.peerId?.toString()); expect(peerIds).to.contain( "16Uiu2HAm2HyS6brcCspSbszG9i36re2bWBVjMe3tMdnFp1Hua34F" ); diff --git a/src/lib/discovery/fetch_nodes.spec.ts b/src/lib/discovery/fetch_nodes.spec.ts index c6040332a9..91adb96915 100644 --- a/src/lib/discovery/fetch_nodes.spec.ts +++ b/src/lib/discovery/fetch_nodes.spec.ts @@ -42,7 +42,7 @@ describe("Fetch nodes until capabilities are fulfilled", function () { ); expect(res.length).to.eq(1); - expect(res[0].peerId!.toB58String()).to.eq(relayNode.peerId?.toB58String()); + expect(res[0].peerId!.toString()).to.eq(relayNode.peerId?.toString()); }); it("1 Store, 2 fetches", async function () { @@ -65,7 +65,7 @@ describe("Fetch nodes until capabilities are fulfilled", function () { ); expect(res.length).to.eq(1); - expect(res[0].peerId!.toB58String()).to.eq(storeNode.peerId?.toB58String()); + expect(res[0].peerId!.toString()).to.eq(storeNode.peerId?.toString()); }); it("1 Store, 2 relays, 2 fetches", async function () { @@ -94,15 +94,9 @@ describe("Fetch nodes until capabilities are fulfilled", function () { ); expect(res.length).to.eq(3); - expect(res[0].peerId!.toB58String()).to.eq( - relayNode1.peerId?.toB58String() - ); - expect(res[1].peerId!.toB58String()).to.eq( - relayNode2.peerId?.toB58String() - ); - expect(res[2].peerId!.toB58String()).to.eq( - relayStoreNode.peerId?.toB58String() - ); + expect(res[0].peerId!.toString()).to.eq(relayNode1.peerId?.toString()); + expect(res[1].peerId!.toString()).to.eq(relayNode2.peerId?.toString()); + expect(res[2].peerId!.toString()).to.eq(relayStoreNode.peerId?.toString()); }); it("1 Relay, 1 Filter, gives up", async function () { @@ -117,6 +111,6 @@ describe("Fetch nodes until capabilities are fulfilled", function () { ); expect(res.length).to.eq(1); - expect(res[0].peerId!.toB58String()).to.eq(relayNode.peerId?.toB58String()); + expect(res[0].peerId!.toString()).to.eq(relayNode.peerId?.toString()); }); }); diff --git a/src/lib/enr/enr.node.spec.ts b/src/lib/enr/enr.node.spec.ts index b918fa22da..db1b43f94e 100644 --- a/src/lib/enr/enr.node.spec.ts +++ b/src/lib/enr/enr.node.spec.ts @@ -36,7 +36,7 @@ describe("ENR Interop: nwaku", function () { expect(nwakuInfo.enrUri).to.not.be.undefined; const dec = await ENR.decodeTxt(nwakuInfo.enrUri ?? ""); - expect(dec.peerId?.toB58String()).to.eq(nimPeerId.toB58String()); + expect(dec.peerId?.toString()).to.eq(nimPeerId.toString()); expect(dec.waku2).to.deep.eq({ relay: true, store: false, @@ -67,7 +67,7 @@ describe("ENR Interop: nwaku", function () { expect(nwakuInfo.enrUri).to.not.be.undefined; const dec = await ENR.decodeTxt(nwakuInfo.enrUri ?? ""); - expect(dec.peerId?.toB58String()).to.eq(nimPeerId.toB58String()); + expect(dec.peerId?.toString()).to.eq(nimPeerId.toString()); expect(dec.waku2).to.deep.eq({ relay: true, store: true, @@ -98,7 +98,7 @@ describe("ENR Interop: nwaku", function () { expect(nwakuInfo.enrUri).to.not.be.undefined; const dec = await ENR.decodeTxt(nwakuInfo.enrUri ?? ""); - expect(dec.peerId?.toB58String()).to.eq(nimPeerId.toB58String()); + expect(dec.peerId?.toString()).to.eq(nimPeerId.toString()); expect(dec.waku2).to.deep.eq({ relay: true, store: true, diff --git a/src/lib/enr/enr.spec.ts b/src/lib/enr/enr.spec.ts index c4ec51b474..c1775cdf13 100644 --- a/src/lib/enr/enr.spec.ts +++ b/src/lib/enr/enr.spec.ts @@ -102,7 +102,7 @@ describe("ENR", function () { expect(enr.ip).to.not.be.undefined; expect(enr.ip).to.be.equal("134.209.139.210"); expect(enr.publicKey).to.not.be.undefined; - expect(enr.peerId?.toB58String()).to.be.equal( + expect(enr.peerId?.toString()).to.be.equal( "16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ" ); }); diff --git a/src/lib/enr/enr.ts b/src/lib/enr/enr.ts index 519c4dbcd3..5e7e308405 100644 --- a/src/lib/enr/enr.ts +++ b/src/lib/enr/enr.ts @@ -422,9 +422,7 @@ export class ENR extends Map { if (this.peerId) { const locationMultiaddr = this.getLocationMultiaddr(protocol); if (locationMultiaddr) { - return locationMultiaddr.encapsulate( - `/p2p/${this.peerId.toB58String()}` - ); + return locationMultiaddr.encapsulate(`/p2p/${this.peerId.toString()}`); } } return; @@ -437,7 +435,7 @@ export class ENR extends Map { if (this.peerId && this.multiaddrs) { const peerId = this.peerId; return this.multiaddrs.map((ma) => { - return ma.encapsulate(`/p2p/${peerId.toB58String()}`); + return ma.encapsulate(`/p2p/${peerId.toString()}`); }); } return []; diff --git a/src/lib/waku.node.spec.ts b/src/lib/waku.node.spec.ts index 134235dc0e..ef0ec9afbd 100644 --- a/src/lib/waku.node.spec.ts +++ b/src/lib/waku.node.spec.ts @@ -69,7 +69,7 @@ describe("Waku Dial [node only]", function () { }); }); - expect(connectedPeerID.toB58String()).to.eq(multiAddrWithId.getPeerId()); + expect(connectedPeerID.toString()).to.eq(multiAddrWithId.getPeerId()); }); it("Passing a function", async function () { @@ -94,7 +94,7 @@ describe("Waku Dial [node only]", function () { }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); - expect(connectedPeerID.toB58String()).to.eq(multiAddrWithId.getPeerId()); + expect(connectedPeerID.toString()).to.eq(multiAddrWithId.getPeerId()); }); }); }); @@ -249,7 +249,7 @@ describe("Wait for remote peer / get peers", function () { const peers = []; for await (const peer of waku.store.peers) { - peers.push(peer.id.toB58String()); + peers.push(peer.id.toString()); } const nimPeerId = multiAddrWithId.getPeerId(); @@ -274,7 +274,7 @@ describe("Wait for remote peer / get peers", function () { const peers = []; for await (const peer of waku.store.peers) { - peers.push(peer.id.toB58String()); + peers.push(peer.id.toString()); } const nimPeerId = multiAddrWithId.getPeerId(); @@ -297,7 +297,7 @@ describe("Wait for remote peer / get peers", function () { const peers = []; for await (const peer of waku.lightPush.peers) { - peers.push(peer.id.toB58String()); + peers.push(peer.id.toString()); } const nimPeerId = multiAddrWithId.getPeerId(); @@ -320,7 +320,7 @@ describe("Wait for remote peer / get peers", function () { const peers = []; for await (const peer of waku.filter.peers) { - peers.push(peer.id.toB58String()); + peers.push(peer.id.toString()); } const nimPeerId = multiAddrWithId.getPeerId(); diff --git a/src/lib/waku.ts b/src/lib/waku.ts index fd1e09493e..21c465fb1e 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -346,7 +346,7 @@ export class Waku { if (!localMultiaddr || localMultiaddr.toString() === "") { throw "Not listening on localhost"; } - return localMultiaddr + "/p2p/" + this.libp2p.peerId.toB58String(); + return localMultiaddr + "/p2p/" + this.libp2p.peerId.toString(); } /** @@ -388,7 +388,7 @@ export class Waku { if (protocols.includes(Protocols.Store)) { const storePromise = (async (): Promise => { for await (const peer of this.store.peers) { - dbg("Store peer found", peer.id.toB58String()); + dbg("Store peer found", peer.id.toString()); break; } })(); @@ -398,7 +398,7 @@ export class Waku { if (protocols.includes(Protocols.LightPush)) { const lightPushPromise = (async (): Promise => { for await (const peer of this.lightPush.peers) { - dbg("Light Push peer found", peer.id.toB58String()); + dbg("Light Push peer found", peer.id.toString()); break; } })(); @@ -408,7 +408,7 @@ export class Waku { if (protocols.includes(Protocols.Filter)) { const filterPromise = (async (): Promise => { for await (const peer of this.filter.peers) { - dbg("Filter peer found", peer.id.toB58String()); + dbg("Filter peer found", peer.id.toString()); break; } })(); @@ -434,7 +434,7 @@ export class Waku { // Just in case a timer already exist for this peer this.stopKeepAlive(peerId); - const peerIdStr = peerId.toB58String(); + const peerIdStr = peerId.toString(); if (pingPeriodSecs !== 0) { const pingService = new PingService(this.libp2p); @@ -455,7 +455,7 @@ export class Waku { } private stopKeepAlive(peerId: PeerId): void { - const peerIdStr = peerId.toB58String(); + const peerIdStr = peerId.toString(); if (this.pingKeepAliveTimers[peerIdStr]) { clearInterval(this.pingKeepAliveTimers[peerIdStr]); diff --git a/src/lib/waku_filter/index.ts b/src/lib/waku_filter/index.ts index a2f12933d5..f176a249dd 100644 --- a/src/lib/waku_filter/index.ts +++ b/src/lib/waku_filter/index.ts @@ -87,7 +87,7 @@ export class WakuFilter { } catch (e) { log( "Error subscribing to peer ", - peer.id.toB58String(), + peer.id.toString(), "for content topics", contentTopics, ": ", @@ -200,7 +200,7 @@ export class WakuFilter { peer = await this.libp2p.peerStore.get(peerId); if (!peer) { throw new Error( - `Failed to retrieve connection details for provided peer in peer store: ${peerId.toB58String()}` + `Failed to retrieve connection details for provided peer in peer store: ${peerId.toString()}` ); } } else { diff --git a/src/lib/waku_relay/index.node.spec.ts b/src/lib/waku_relay/index.node.spec.ts index 764de39cb2..73ffee624b 100644 --- a/src/lib/waku_relay/index.node.spec.ts +++ b/src/lib/waku_relay/index.node.spec.ts @@ -70,8 +70,8 @@ describe("Waku Relay [node only]", () => { waku2.libp2p.pubsub.getSubscribers(DefaultPubSubTopic); log("Asserting mutual subscription"); - expect(subscribers1).to.contain(waku2.libp2p.peerId.toB58String()); - expect(subscribers2).to.contain(waku1.libp2p.peerId.toB58String()); + expect(subscribers1).to.contain(waku2.libp2p.peerId.toString()); + expect(subscribers2).to.contain(waku1.libp2p.peerId.toString()); }); it("Register correct protocols", async function () { @@ -338,7 +338,7 @@ describe("Waku Relay [node only]", () => { } const nimPeerId = await nwaku.getPeerId(); - expect(subscribers).to.contain(nimPeerId.toB58String()); + expect(subscribers).to.contain(nimPeerId.toString()); }); it("Publishes to nwaku", async function () { diff --git a/src/lib/waku_relay/index.ts b/src/lib/waku_relay/index.ts index 1011088903..239b9142fe 100644 --- a/src/lib/waku_relay/index.ts +++ b/src/lib/waku_relay/index.ts @@ -326,7 +326,7 @@ export class WakuRelay extends Gossipsub { */ async _publish(msg: InMessage): Promise { const msgIdStr = await this.getCanonicalMsgIdStr(msg); - if (msg.receivedFrom !== this.peerId.toB58String()) { + if (msg.receivedFrom !== this.peerId.toString()) { this.score.deliverMessage(msg, msgIdStr); this.gossipTracer.deliverMessage(msgIdStr); } diff --git a/src/lib/waku_store/index.ts b/src/lib/waku_store/index.ts index 3cad6bb492..8a0b59b43c 100644 --- a/src/lib/waku_store/index.ts +++ b/src/lib/waku_store/index.ts @@ -146,7 +146,7 @@ export class WakuStore { ); dbg("Querying history with the following options", { - peerId: options?.peerId?.toB58String(), + peerId: options?.peerId?.toString(), ...options, }); @@ -154,7 +154,7 @@ export class WakuStore { if (opts.peerId) { peer = await this.libp2p.peerStore.get(opts.peerId); if (!peer) - throw `Failed to retrieve connection details for provided peer in peer store: ${opts.peerId.toB58String()}`; + throw `Failed to retrieve connection details for provided peer in peer store: ${opts.peerId.toString()}`; } else { peer = await this.randomPeer; if (!peer) @@ -170,7 +170,7 @@ export class WakuStore { } dbg(`Use store codec ${storeCodec}`); if (!storeCodec) - throw `Peer does not register waku store protocol: ${peer.id.toB58String()}`; + throw `Peer does not register waku store protocol: ${peer.id.toString()}`; Object.assign(opts, { storeCodec }); const connection = this.libp2p.connectionManager.get(peer.id); From 98c93c828356fbfaa1fa4e1cd3084a939cd38594 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 20 Jun 2022 16:48:30 +1000 Subject: [PATCH 02/68] Upgrade libp2p, peer-id, multiaddr Use new packages and fix most compilation errors. Remaining error to be dealt with in waku.ts. --- examples/web-chat/src/command.ts | 2 +- package-lock.json | 3415 ++++++++++++++++--------- package.json | 10 +- src/lib/discovery/bootstrap.ts | 2 +- src/lib/discovery/fetch_nodes.spec.ts | 2 +- src/lib/discovery/predefined.ts | 2 +- src/lib/enr/enr.spec.ts | 2 +- src/lib/enr/enr.ts | 38 +- src/lib/enr/multiaddrs_codec.spec.ts | 2 +- src/lib/enr/multiaddrs_codec.ts | 2 +- src/lib/select_peer.ts | 28 +- src/lib/waku.node.spec.ts | 48 +- src/lib/waku.spec.ts | 11 +- src/lib/waku.ts | 47 +- src/lib/waku_filter/index.ts | 28 +- src/lib/waku_light_push/index.ts | 24 +- src/lib/waku_relay/index.node.spec.ts | 20 +- src/lib/waku_relay/index.ts | 2 +- src/lib/waku_store/index.ts | 31 +- src/test_utils/nwaku.ts | 7 +- 20 files changed, 2384 insertions(+), 1339 deletions(-) diff --git a/examples/web-chat/src/command.ts b/examples/web-chat/src/command.ts index cd7b1beb41..66858f5273 100644 --- a/examples/web-chat/src/command.ts +++ b/examples/web-chat/src/command.ts @@ -1,4 +1,4 @@ -import { multiaddr } from "multiaddr"; +import { multiaddr } from "@multiformats/multiaddr"; import PeerId from "peer-id"; import { Waku } from "js-waku"; diff --git a/package-lock.json b/package-lock.json index 943d02a50c..fecb7301e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,11 @@ "dependencies": { "@chainsafe/libp2p-noise": "^5.0.0", "@ethersproject/rlp": "^5.5.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-peer-store": "^1.0.0", + "@libp2p/interfaces": "^3.0.2", + "@libp2p/peer-id": "^1.1.10", + "@multiformats/multiaddr": "^10.2.0", "@noble/secp256k1": "^1.3.4", "debug": "^4.3.1", "dns-query": "^0.11.1", @@ -19,16 +24,13 @@ "it-length-prefixed": "^5.0.2", "it-pipe": "^1.1.0", "js-sha3": "^0.8.0", - "libp2p": "^0.36.2", + "libp2p": "^0.37.3", "libp2p-bootstrap": "^0.14.0", "libp2p-crypto": "^0.21.2", "libp2p-gossipsub": "0.13.0", - "libp2p-interfaces": "^4.0.6", "libp2p-mplex": "^0.10.4", "libp2p-websockets": "^0.16.1", - "multiaddr": "^10.0.1", "multiformats": "^9.6.5", - "peer-id": "^0.16.0", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", "uuid": "^8.3.2", @@ -98,6 +100,95 @@ "node": ">=16" } }, + "node_modules/@achingbrain/ip-address": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@achingbrain/ip-address/-/ip-address-8.1.0.tgz", + "integrity": "sha512-Zus4vMKVRDm+R1o0QJNhD0PD/8qRGO3Zx8YPsFG5lANt5utVtGg3iHVGBSAF80TfQmhi8rP+Kg/OigdxY0BXHw==", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "1.1.2" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@achingbrain/ip-address/node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + }, + "node_modules/@achingbrain/nat-port-mapper": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@achingbrain/nat-port-mapper/-/nat-port-mapper-1.0.7.tgz", + "integrity": "sha512-P8Z8iMZBQCsN7q3XoVoJAX3CGPUTbGTh1XBU8JytCW3hBmSk594l8YvdrtY5NVexVHSwLeiXnDsP4d10NJHaeg==", + "dependencies": { + "@achingbrain/ssdp": "^4.0.1", + "@libp2p/logger": "^2.0.0", + "default-gateway": "^6.0.2", + "err-code": "^3.0.1", + "it-first": "^1.0.7", + "p-defer": "^4.0.0", + "p-timeout": "^5.0.2", + "xml2js": "^0.4.23" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@achingbrain/nat-port-mapper/node_modules/@libp2p/logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.2", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@achingbrain/nat-port-mapper/node_modules/p-defer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@achingbrain/nat-port-mapper/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@achingbrain/ssdp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@achingbrain/ssdp/-/ssdp-4.0.1.tgz", + "integrity": "sha512-z/CkfFI0Ksrpo8E+lu2rKahlE1KJHUn8X8ihQj2Jg6CEL+oHYGCNfttOES0+VnV7htuog70c8bYNHYhlmmqxBQ==", + "dependencies": { + "event-iterator": "^2.0.0", + "freeport-promise": "^2.0.0", + "merge-options": "^3.0.4", + "uuid": "^8.3.2", + "xml2js": "^0.4.23" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", @@ -1090,6 +1181,28 @@ "node": ">=8" } }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@leichtgewicht/base64-codec": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@leichtgewicht/base64-codec/-/base64-codec-1.0.0.tgz", @@ -1127,10 +1240,733 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "node_modules/@libp2p/connection": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/connection/-/connection-2.0.4.tgz", + "integrity": "sha512-YGMa0ZTbKdyu4b58mLdVT3XKgfBGp/R5h2FTT/8sB3fHTkJ6Crl3Ad5a+cVuqsWfJhrHDncU3SJaqFH4fxhLmg==", + "dependencies": { + "@libp2p/interfaces": "^2.0.0", + "@libp2p/logger": "^1.1.0", + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/connection/node_modules/@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "dependencies": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/connection/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "node_modules/@libp2p/crypto": { + "version": "0.22.14", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-0.22.14.tgz", + "integrity": "sha512-5RyGh5ovfqrDD8Io3n5rvVnsTHBf1exIMZ/5eBw7Eoy21xkmzdF1Hy701SoSNmiCuTPXYmxT5WMy2VUDBUG6oQ==", + "dependencies": { + "@libp2p/interfaces": "^2.0.1", + "@noble/ed25519": "^1.6.0", + "@noble/secp256k1": "^1.5.4", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "multiformats": "^9.4.5", + "node-forge": "^1.1.0", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/crypto/node_modules/@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "dependencies": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/crypto/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "node_modules/@libp2p/interface-keys": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@libp2p/interface-keys/-/interface-keys-1.0.3.tgz", + "integrity": "sha512-K8/HlRl/swbVTWuGHNHF28EytszYfUhKgUHfv8CdbMk9ZA/bgO4uU+d9rcrg/Dhw3511U3aRz2bwl2psn6rJfg==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-peer-id": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-id/-/interface-peer-id-1.0.4.tgz", + "integrity": "sha512-VRnE0MqmS1kN43hyKCEdkhz0gciuDML7hpL3p8zDm0LnveNMLJsR+/VSUaugCi/muOzLaLk26WffKWbMYfnGfA==", + "dependencies": { + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-peer-info": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-info/-/interface-peer-info-1.0.2.tgz", + "integrity": "sha512-8dGBj8+6PdBDsMAASxX2sECnWhK7zAnv8iCFgYXY5Z6fbQwA+7iVAea9FdjgyLapdIzDarttPt3Gdou8tXZdGg==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0", + "@multiformats/multiaddr": "^10.2.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-peer-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-store/-/interface-peer-store-1.2.0.tgz", + "integrity": "sha512-4244DmDppLf6Av6gALoO7iMPVhBO6Hx3dbkUy7Vb3OfxS//Ix+uDUib2hypIK2Q2rKmn3dfzvDBt0GwlkSMJCg==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interface-peer-info": "^1.0.0", + "@libp2p/interface-record": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-record": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-record/-/interface-record-1.0.2.tgz", + "integrity": "sha512-bYNxKtsUOsNucHeAXCZbAQxFXwR7JvoOmodwEByriMvTWYRbd6d8rm8VHZ/17QgdRFlIwNnpIPuoyyLQ8Wn1rQ==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interfaces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-3.0.3.tgz", + "integrity": "sha512-8IIxw7TKpaYTtVfZN3jePLlm/E/VzqPpqerN+jhA+1s86akRSeyxVBYi3W9SWDSf0oIauHJSDE8KNxLceAfeag==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/logger": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-1.1.6.tgz", + "integrity": "sha512-ZKoRUt7cyHlbxHYDZ1Fn3A+ByqGABdmd4z07+1TfVvpEQSpn2IVcV0mt6ff5kUUtGuVeSrqK1/ZDzWqhgg56vg==", + "dependencies": { + "@libp2p/interfaces": "^2.0.0", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/logger/node_modules/@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "dependencies": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/logger/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "node_modules/@libp2p/multistream-select": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-1.0.6.tgz", + "integrity": "sha512-8veeiZDrh7aCvILjNGps4ZLKSKTdBxJZS4SZkuhbCKmq7eX6aJoYoQ5G5MBxEFiBKtgwTKHaSroH3jfvizwDoA==", + "dependencies": { + "@libp2p/interfaces": "^2.0.0", + "@libp2p/logger": "^1.1.0", + "abortable-iterator": "^4.0.2", + "err-code": "^3.0.1", + "it-first": "^1.0.6", + "it-handshake": "^3.0.1", + "it-length-prefixed": "^7.0.1", + "it-pipe": "^2.0.3", + "it-pushable": "^2.0.1", + "it-reader": "^5.0.0", + "it-stream-types": "^1.0.4", + "p-defer": "^4.0.0", + "uint8arraylist": "^1.5.1", + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/multistream-select/node_modules/@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "dependencies": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/multistream-select/node_modules/abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "dependencies": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/@libp2p/multistream-select/node_modules/get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, + "node_modules/@libp2p/multistream-select/node_modules/it-handshake": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-3.0.1.tgz", + "integrity": "sha512-Rx9ESanlfnC0aMw2LtLJ9YNlCNgnZU7wOHPzPSZTUAjbdZx54kllGR5ndIuoJqF2EtNIsmTiWEncKTgwHNJSSg==", + "dependencies": { + "it-map": "^1.0.6", + "it-pushable": "^2.0.1", + "it-reader": "^5.0.0", + "it-stream-types": "^1.0.4", + "p-defer": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/multistream-select/node_modules/it-length-prefixed": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", + "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", + "dependencies": { + "err-code": "^3.0.1", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/multistream-select/node_modules/it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "dependencies": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/@libp2p/multistream-select/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "node_modules/@libp2p/multistream-select/node_modules/it-reader": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-5.0.1.tgz", + "integrity": "sha512-Vj9TliHgCsIE21oqWDhrE1E5QALZw1n9QiaZg2EiWPFKSvCSm7lGDycy1OYs3LYhgvmTQDKJestlzVSHJ/YsJw==", + "dependencies": { + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0" + } + }, + "node_modules/@libp2p/multistream-select/node_modules/p-defer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@libp2p/peer-collections": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-1.0.3.tgz", + "integrity": "sha512-xrnFlZ2CpYiUQ0fGE0WqfBONiE2rjkjWHXnS6gH7CudlD0JMSftbzI+naBXRunfZal7CNEtHN7+keVX+ingPgA==", + "dependencies": { + "@libp2p/interfaces": "^2.0.0", + "@libp2p/peer-id": "^1.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/peer-collections/node_modules/@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "dependencies": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/peer-collections/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "node_modules/@libp2p/peer-id": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-1.1.14.tgz", + "integrity": "sha512-8Ch/kQGyoDl3m0TYz/uuHRbJ3TRoG7XI9ZTFHd1P21KrpF3YvCeK5PCWDsP7IICc+Q39n0IS9zLVhGySiS7FXQ==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0", + "err-code": "^3.0.1", + "multiformats": "^9.6.3", + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/peer-id-factory": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id-factory/-/peer-id-factory-1.0.16.tgz", + "integrity": "sha512-DWiJX2OnvDGaVN2kg7NcqL2tNAp8LerT2Lj0ImuXuh0Q1wxI8Wt1PbymoRmE5kQiYG6qyu1iAb7Q9BRerf+New==", + "dependencies": { + "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-keys": "^1.0.2", + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/peer-id": "^1.0.0", + "multiformats": "^9.6.3", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/peer-id-factory/node_modules/@libp2p/crypto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", + "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", + "dependencies": { + "@libp2p/interface-keys": "^1.0.2", + "@noble/ed25519": "^1.6.0", + "@noble/secp256k1": "^1.5.4", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "multiformats": "^9.4.5", + "node-forge": "^1.1.0", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/peer-record": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-1.0.12.tgz", + "integrity": "sha512-1b4aeU4sduRBUH4RKDtYBHKOEXwohrlOoBrrNPKb1WFweLMnG3oznhGusMvKQ8YuXSOTpbNPHrbJ/iJnrBbVUQ==", + "dependencies": { + "@libp2p/crypto": "^0.22.8", + "@libp2p/interfaces": "^2.0.0", + "@libp2p/logger": "^1.1.0", + "@libp2p/peer-id": "^1.1.0", + "@libp2p/utils": "^1.0.9", + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-all": "^1.0.6", + "it-filter": "^1.0.3", + "it-foreach": "^0.1.1", + "it-map": "^1.0.6", + "it-pipe": "^2.0.3", + "multiformats": "^9.6.3", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/peer-record/node_modules/@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "dependencies": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/peer-record/node_modules/it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "dependencies": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/@libp2p/peer-record/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "node_modules/@libp2p/peer-store": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-1.0.17.tgz", + "integrity": "sha512-1uvwjJ2dRQyQnms+vBY3CgWpZe+0EYSoCNo7UUE6dhJHIA3q1Syl4kZWukA081m1eFzmMLG2VjsrzUQAfmy+Sw==", + "dependencies": { + "@libp2p/interfaces": "^2.0.0", + "@libp2p/logger": "^1.1.0", + "@libp2p/peer-id": "^1.1.0", + "@libp2p/peer-record": "^1.0.0", + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-all": "^1.0.6", + "it-filter": "^1.0.3", + "it-foreach": "^0.1.1", + "it-map": "^1.0.6", + "it-pipe": "^2.0.3", + "mortice": "^3.0.0", + "multiformats": "^9.6.3", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/peer-store/node_modules/@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "dependencies": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/peer-store/node_modules/it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "dependencies": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/@libp2p/peer-store/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "node_modules/@libp2p/tracked-map": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@libp2p/tracked-map/-/tracked-map-1.0.8.tgz", + "integrity": "sha512-tN56iEdSbDuUhDApQV0k93aIQu/vACN8fNHsaWZrFpvwPaXmLb//jn3m34pwnSyaTPjUSendP25+JDzg/2U/mw==", + "dependencies": { + "@libp2p/interfaces": "^2.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/tracked-map/node_modules/@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "dependencies": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/tracked-map/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "node_modules/@libp2p/utils": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-1.0.10.tgz", + "integrity": "sha512-jlVLfac1IoBlgXL8V+XZYxNw0SOAkKweiLhXWolUbKOgRtMDquJzbwG1n8y9GtdiFKPlkiBwOB7l9xighcOR6w==", + "dependencies": { + "@achingbrain/ip-address": "^8.1.0", + "@libp2p/logger": "^1.0.1", + "@multiformats/multiaddr": "^10.1.1", + "abortable-iterator": "^4.0.2", + "err-code": "^3.0.1", + "is-loopback-addr": "^2.0.1", + "it-stream-types": "^1.0.4", + "private-ip": "^2.1.1", + "ts-mocha": "^9.0.2", + "ts-node": "^10.7.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/utils/node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@libp2p/utils/node_modules/abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "dependencies": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/@libp2p/utils/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/@libp2p/utils/node_modules/get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, + "node_modules/@libp2p/utils/node_modules/is-loopback-addr": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", + "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" + }, + "node_modules/@libp2p/utils/node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/@multiformats/mafmt": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-11.0.2.tgz", + "integrity": "sha512-KesMM4fSEpMz1kZPzlvdwYNYrq5iH38S5EDKLu5qsGG4NT94UaruTjase9osaDW+CcDfshK9uZUD9lzpXJGreA==", + "dependencies": { + "@multiformats/multiaddr": "^10.1.1" + } + }, + "node_modules/@multiformats/multiaddr": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-10.3.3.tgz", + "integrity": "sha512-+LX9RovG7DJsANb+U6VchV/tApcdJzeafbi5+MPUam90oL91BbEh6ozNZOz4Qf5ZEeilexc12oomatmODJh1/w==", + "dependencies": { + "dns-over-http-resolver": "^2.1.0", + "err-code": "^3.0.1", + "is-ip": "^4.0.0", + "multiformats": "^9.4.5", + "uint8arrays": "^3.0.0", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@multiformats/multiaddr/node_modules/dns-over-http-resolver": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-2.1.0.tgz", + "integrity": "sha512-eb8RGy6k54JdD7Rjw8g65y1MyA4z3m3IIYh7uazkgZuKIdFn8gYt8dydMm3op+2UshDdk9EexrXcDluKNY/CDg==", + "dependencies": { + "debug": "^4.3.1", + "native-fetch": "^4.0.2", + "receptacle": "^1.3.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@multiformats/multiaddr/node_modules/ip-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@multiformats/multiaddr/node_modules/is-ip": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-4.0.0.tgz", + "integrity": "sha512-4B4XA2HEIm/PY+OSpeMBXr8pGWBYbXuHgjMAqrwbLO3CPTCAd9ArEJzBUKGZtk9viY6+aSfadGnWyjY3ydYZkw==", + "dependencies": { + "ip-regex": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@multiformats/multiaddr/node_modules/native-fetch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-4.0.2.tgz", + "integrity": "sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg==", + "peerDependencies": { + "undici": "*" + } + }, "node_modules/@noble/ed25519": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.5.1.tgz", - "integrity": "sha512-VX0TyIhKghm/NoTno/k71oCQO55f36yiSwuNOqEHu9BvxQuzel0tsvcsU2KjX/iN6pCkN53Bvfq1+gWNiwXDGQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.6.1.tgz", + "integrity": "sha512-Gptpue6qPmg7p1E5LBO5GDtXw5WMc2DVtUmu4EQequOcoCvum1dT9sY6s9M8aSJWq9YopCN4jmTOAvqMdw3q7w==", "funding": [ { "type": "individual", @@ -1139,9 +1975,15 @@ ] }, "node_modules/@noble/secp256k1": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.3.4.tgz", - "integrity": "sha512-ZVRouDO5mbdCiDg4zCd3ZZABduRtpy4tCnB33Gh9upHe9tRzpiqbRSN1VTjrj/2g8u2c6MBi0YLNnNQpBYOiWg==" + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", + "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -1546,26 +2388,22 @@ "node_modules/@tsconfig/node10": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" }, "node_modules/@tsconfig/node12": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==" }, "node_modules/@tsconfig/node14": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" }, "node_modules/@tsconfig/node16": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" }, "node_modules/@types/app-root-path": { "version": "1.2.4", @@ -1641,7 +2479,7 @@ "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true + "devOptional": true }, "node_modules/@types/long": { "version": "4.0.1", @@ -2085,13 +2923,7 @@ "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "node_modules/@vascosantos/moving-average": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vascosantos/moving-average/-/moving-average-1.1.0.tgz", - "integrity": "sha512-MVEJ4vWAPNbrGLjz7ITnHYg+YXZ6ijAqtH5/cHwSoCpbvuJ98aLXwFfPKAUfZpJMQR5uXB58UJajbY130IRF/w==" + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", @@ -2318,7 +3150,6 @@ "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -2370,7 +3201,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -2391,6 +3221,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -2403,6 +3234,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2427,7 +3259,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, "engines": { "node": ">=6" } @@ -2463,7 +3294,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -2472,7 +3302,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2492,7 +3321,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2531,8 +3359,7 @@ "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, "node_modules/argparse": { "version": "1.0.10", @@ -2607,27 +3434,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "engines": { - "node": ">=0.8" - } - }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -2658,20 +3468,8 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, "node_modules/balanced-match": { "version": "1.0.2", @@ -2715,27 +3513,10 @@ "node": "^4.5.0 || >= 5.9" } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", - "engines": { - "node": "*" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, "engines": { "node": ">=8" } @@ -2851,7 +3632,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -2868,8 +3648,7 @@ "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, "node_modules/browserslist": { "version": "4.16.7", @@ -2929,8 +3708,7 @@ "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "node_modules/builtin-modules": { "version": "3.3.0", @@ -3056,11 +3834,6 @@ "url": "https://opencollective.com/browserslist" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, "node_modules/chai": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", @@ -3083,7 +3856,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3108,7 +3880,6 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "funding": [ { "type": "individual", @@ -3161,6 +3932,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, "engines": { "node": ">=6" } @@ -3225,7 +3997,6 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -3236,7 +4007,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -3245,7 +4015,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3273,7 +4042,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3284,8 +4052,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colorette": { "version": "1.2.2", @@ -3306,6 +4073,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -3432,7 +4200,8 @@ "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "node_modules/cors": { "version": "2.8.5", @@ -3466,8 +4235,7 @@ "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "node_modules/cross-fetch": { "version": "3.1.5", @@ -3800,17 +4568,6 @@ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", "dev": true }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/data-urls": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz", @@ -3996,6 +4753,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, "engines": { "node": ">=0.4.0" } @@ -4033,7 +4791,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, "engines": { "node": ">=0.3.1" } @@ -4129,20 +4886,6 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ecc-jsbn/node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -4175,8 +4918,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -4378,19 +5120,10 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "node_modules/es6-promisify": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-7.0.0.tgz", - "integrity": "sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==", - "engines": { - "node": ">=6" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -4405,7 +5138,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "engines": { "node": ">=10" }, @@ -5027,7 +5759,8 @@ "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "node_modules/extract-zip": { "version": "2.0.1", @@ -5064,14 +5797,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "engines": [ - "node >=0.6.0" - ] - }, "node_modules/fast-check": { "version": "2.23.2", "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.23.2.tgz", @@ -5091,7 +5816,8 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "node_modules/fast-diff": { "version": "1.2.0", @@ -5123,7 +5849,8 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -5197,7 +5924,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5280,7 +6006,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, "bin": { "flat": "cli.js" } @@ -5337,25 +6062,13 @@ "node": ">=8.0.0" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "node_modules/freeport-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-promise/-/freeport-promise-2.0.0.tgz", + "integrity": "sha512-dwWpT1DdQcwrhmRwnDnPM/ZFny+FtzU+k50qF2eid3KxaQDsMiBrwo1i0G3qSugkN5db6Cb0zgfc68QeTOpEFg==", "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, "node_modules/fromentries": { @@ -5387,14 +6100,12 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -5438,7 +6149,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -5519,14 +6229,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/gh-pages": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz", @@ -5628,7 +6330,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5648,7 +6349,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -5728,32 +6428,10 @@ "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, "engines": { "node": ">=4.x" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -5788,7 +6466,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -5863,7 +6540,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, "bin": { "he": "bin/he" } @@ -5925,20 +6601,6 @@ "node": ">= 6" } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -6077,6 +6739,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, "engines": { "node": ">=8" } @@ -6085,7 +6748,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -6165,6 +6827,14 @@ "node": ">=8" } }, + "node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "engines": { + "node": ">= 10" + } + }, "node_modules/ipfs-utils": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-9.0.5.tgz", @@ -6205,7 +6875,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -6285,7 +6954,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -6306,7 +6974,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -6352,7 +7019,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -6479,13 +7145,13 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, "engines": { "node": ">=10" }, @@ -6570,11 +7236,6 @@ "whatwg-fetch": "^3.4.1" } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, "node_modules/istanbul-lib-coverage": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", @@ -6828,6 +7489,11 @@ "it-all": "^1.0.6" } }, + "node_modules/it-stream-types": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/it-stream-types/-/it-stream-types-1.0.4.tgz", + "integrity": "sha512-0F3CqTIcIHwtnmIgqd03a7sw8BegAmE32N2w7anIGdALea4oAN4ltqPgDMZ7zn4XPLZifXEZlBXSzgg64L1Ebw==" + }, "node_modules/it-take": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/it-take/-/it-take-1.0.2.tgz", @@ -7023,15 +7689,11 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -7039,11 +7701,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, "node_modules/json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", @@ -7074,20 +7731,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/karma": { "version": "6.3.16", "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.16.tgz", @@ -7226,67 +7869,65 @@ } }, "node_modules/libp2p": { - "version": "0.36.2", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.36.2.tgz", - "integrity": "sha512-UpNYBMQVivMu56zoibdGitopv39uBBAybIBOEGWmFy/I2NnTVGUutLPrxo47AuN2kntYgo/TNJfW+PpswUgSaw==", + "version": "0.37.3", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.37.3.tgz", + "integrity": "sha512-G+0tWT6jZr05XE9bG8Kw1SqFrkt1X3bM9TDDXkqWqHvUVjBHWGNDysOvTp7p3jxoSj4J/Z2w9wGbdDsz1kfPlw==", "dependencies": { - "@vascosantos/moving-average": "^1.1.0", - "abortable-iterator": "^3.0.0", - "aggregate-error": "^3.1.0", + "@achingbrain/nat-port-mapper": "^1.0.3", + "@libp2p/connection": "^2.0.2", + "@libp2p/crypto": "^0.22.11", + "@libp2p/interfaces": "^2.0.2", + "@libp2p/logger": "^1.1.4", + "@libp2p/multistream-select": "^1.0.4", + "@libp2p/peer-collections": "^1.0.2", + "@libp2p/peer-id": "^1.1.10", + "@libp2p/peer-id-factory": "^1.0.9", + "@libp2p/peer-record": "^1.0.8", + "@libp2p/peer-store": "^1.0.10", + "@libp2p/tracked-map": "^1.0.5", + "@libp2p/utils": "^1.0.10", + "@multiformats/mafmt": "^11.0.2", + "@multiformats/multiaddr": "^10.1.8", + "abortable-iterator": "^4.0.2", "any-signal": "^3.0.0", - "bignumber.js": "^9.0.1", - "class-is": "^1.1.0", "datastore-core": "^7.0.0", - "debug": "^4.3.1", - "err-code": "^3.0.0", - "es6-promisify": "^7.0.0", + "err-code": "^3.0.1", "events": "^3.3.0", "hashlru": "^2.3.0", - "interface-datastore": "^6.0.2", - "it-all": "^1.0.4", - "it-buffer": "^0.1.2", - "it-drain": "^1.0.3", - "it-filter": "^1.0.1", - "it-first": "^1.0.4", + "interface-datastore": "^6.1.0", + "it-all": "^1.0.6", + "it-drain": "^1.0.5", + "it-filter": "^1.0.3", + "it-first": "^1.0.6", "it-foreach": "^0.1.1", - "it-handshake": "^2.0.0", - "it-length-prefixed": "^5.0.2", - "it-map": "^1.0.4", - "it-merge": "^1.0.0", - "it-pipe": "^1.1.0", + "it-handshake": "^3.0.1", + "it-length-prefixed": "^7.0.1", + "it-map": "^1.0.6", + "it-merge": "^1.0.3", + "it-pair": "^2.0.2", + "it-pipe": "^2.0.3", "it-sort": "^1.0.1", - "it-take": "^1.0.0", - "libp2p-crypto": "^0.21.2", - "libp2p-interfaces": "^4.0.0", - "libp2p-utils": "^0.4.0", - "mafmt": "^10.0.0", + "it-stream-types": "^1.0.4", "merge-options": "^3.0.4", - "mortice": "^2.0.1", - "multiaddr": "^10.0.0", - "multiformats": "^9.0.0", - "multistream-select": "^3.0.0", + "multiformats": "^9.6.3", "mutable-proxy": "^1.0.0", - "nat-api": "^0.3.1", "node-forge": "^1.2.1", - "p-any": "^3.0.0", "p-fifo": "^1.0.0", - "p-retry": "^4.4.0", - "p-settle": "^4.1.1", - "peer-id": "^0.16.0", - "private-ip": "^2.1.0", - "protobufjs": "^6.10.2", + "p-retry": "^5.0.0", + "p-settle": "^5.0.0", + "private-ip": "^2.3.3", + "protons-runtime": "^1.0.4", "retimer": "^3.0.0", "sanitize-filename": "^1.6.3", "set-delayed-interval": "^1.0.0", - "streaming-iterables": "^6.0.0", "timeout-abort-controller": "^3.0.0", "uint8arrays": "^3.0.0", - "varint": "^6.0.0", "wherearewe": "^1.0.0", "xsalsa20": "^1.1.0" }, "engines": { - "node": ">=15.0.0" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, "node_modules/libp2p-bootstrap": { @@ -7404,12 +8045,110 @@ "p-timeout": "^4.1.0" } }, - "node_modules/libp2p/node_modules/streaming-iterables": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/streaming-iterables/-/streaming-iterables-6.0.0.tgz", - "integrity": "sha512-GYbJh0ife8PvryWSyFifY1m1uj6zO12d9duuP6xltiOolUz44eKasp5gbFhRbFbLy50ik6hcKn4Pbxl9AkxB+Q==", + "node_modules/libp2p/node_modules/@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "dependencies": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + }, "engines": { - "node": ">=10" + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/libp2p/node_modules/abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "dependencies": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/libp2p/node_modules/get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, + "node_modules/libp2p/node_modules/it-handshake": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-3.0.1.tgz", + "integrity": "sha512-Rx9ESanlfnC0aMw2LtLJ9YNlCNgnZU7wOHPzPSZTUAjbdZx54kllGR5ndIuoJqF2EtNIsmTiWEncKTgwHNJSSg==", + "dependencies": { + "it-map": "^1.0.6", + "it-pushable": "^2.0.1", + "it-reader": "^5.0.0", + "it-stream-types": "^1.0.4", + "p-defer": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/libp2p/node_modules/it-length-prefixed": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", + "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", + "dependencies": { + "err-code": "^3.0.1", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/libp2p/node_modules/it-pair": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-2.0.2.tgz", + "integrity": "sha512-QGgUwGtzE4mI8yPZawL+9wq49SBmhQdjKW+ChKBm4PUwRNdkgSoyPlu280iNyS0JscBG3pvytJ8JNVPSEBQNjg==", + "dependencies": { + "it-stream-types": "^1.0.3", + "p-defer": "^4.0.0" + } + }, + "node_modules/libp2p/node_modules/it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "dependencies": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/libp2p/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "node_modules/libp2p/node_modules/it-reader": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-5.0.1.tgz", + "integrity": "sha512-Vj9TliHgCsIE21oqWDhrE1E5QALZw1n9QiaZg2EiWPFKSvCSm7lGDycy1OYs3LYhgvmTQDKJestlzVSHJ/YsJw==", + "dependencies": { + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0" + } + }, + "node_modules/libp2p/node_modules/p-defer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lilconfig": { @@ -7685,7 +8424,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -7873,8 +8611,7 @@ "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "node_modules/map-obj": { "version": "4.3.0", @@ -8058,6 +8795,7 @@ "version": "1.48.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -8066,6 +8804,7 @@ "version": "2.1.31", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dev": true, "dependencies": { "mime-db": "1.48.0" }, @@ -8104,8 +8843,7 @@ "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/minimist-options": { "version": "4.1.0", @@ -8134,7 +8872,6 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, "dependencies": { "minimist": "^1.2.5" }, @@ -8152,7 +8889,6 @@ "version": "9.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", - "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", @@ -8194,14 +8930,12 @@ "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/mocha/node_modules/debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -8217,14 +8951,12 @@ "node_modules/mocha/node_modules/debug/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -8240,7 +8972,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -8252,7 +8983,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -8266,14 +8996,12 @@ "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/mocha/node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -8288,7 +9016,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -8297,7 +9024,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -8309,14 +9035,44 @@ } }, "node_modules/mortice": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mortice/-/mortice-2.0.1.tgz", - "integrity": "sha512-9gsXmjq+5LZmXDIoyC/crf2i/7CUwDGSBEwSEsr1i/WfKmJ6DVt38B5kg6BE/WF/1/yfGJYiB1Wyiu423iI3nQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mortice/-/mortice-3.0.0.tgz", + "integrity": "sha512-g4rgq//2PWn4m52G6TpCSGmtWabJM8LKCZTQY4W7z0foiaQkqw+FG9a6pwIqUcTkCgBQoet8G/24V6adVMpnHw==", "dependencies": { "nanoid": "^3.1.20", - "observable-webworkers": "^1.0.0", - "p-queue": "^6.0.0", - "promise-timeout": "^1.3.0" + "observable-webworkers": "^2.0.1", + "p-queue": "^7.2.0", + "p-timeout": "^5.0.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/mortice/node_modules/p-queue": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.2.0.tgz", + "integrity": "sha512-Kvv7p13M46lTYLQ/PsZdaj/1Vj6u/8oiIJgyQyx4oVkOfHdd7M2EZvXigDvcsSzRwanCzQirV5bJPQFoSQt5MA==", + "dependencies": { + "eventemitter3": "^4.0.7", + "p-timeout": "^5.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mortice/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ms": { @@ -8350,24 +9106,6 @@ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.5.tgz", "integrity": "sha512-vMwf/FUO+qAPvl3vlSZEgEVFY/AxeZq5yg761ScF3CZsXgmTi/HGkicUiNN0CI4PW8FiY2P0OLklOcmQjdQJhw==" }, - "node_modules/multistream-select": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/multistream-select/-/multistream-select-3.0.2.tgz", - "integrity": "sha512-ICGA8DAviZj6Xo1NkaRV3J38M+tFDoWiGtO1ksluyMnskAsdGjAzocg806OzpQPivNGWWboX3CrFT2Tk4UdYXA==", - "dependencies": { - "abortable-iterator": "^3.0.0", - "bl": "^5.0.0", - "debug": "^4.1.1", - "err-code": "^3.0.1", - "it-first": "^1.0.6", - "it-handshake": "^2.0.0", - "it-length-prefixed": "^5.0.0", - "it-pipe": "^1.0.1", - "it-reader": "^3.0.0", - "p-defer": "^3.0.0", - "uint8arrays": "^3.0.0" - } - }, "node_modules/mutable-proxy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mutable-proxy/-/mutable-proxy-1.0.0.tgz", @@ -8397,27 +9135,6 @@ "picocolors": "^1.0.0" } }, - "node_modules/nat-api": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/nat-api/-/nat-api-0.3.1.tgz", - "integrity": "sha512-5cyLugEkXnKSKSvVjKjxxPMLDnkwY3boZLbATWwiGJ4T/3UvIpiQmzb2RqtxxEFcVo/7PwsHPGN0MosopONO8Q==", - "dependencies": { - "async": "^3.2.0", - "debug": "^4.2.0", - "default-gateway": "^6.0.2", - "request": "^2.88.2", - "unordered-array-remove": "^1.0.2", - "xml2js": "^0.1.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/nat-api/node_modules/async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" - }, "node_modules/native-fetch": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-3.0.0.tgz", @@ -8521,7 +9238,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -8897,14 +9613,6 @@ "node": ">=6" } }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -8968,9 +9676,13 @@ } }, "node_modules/observable-webworkers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/observable-webworkers/-/observable-webworkers-1.0.0.tgz", - "integrity": "sha512-+cECwCR8IEh8UY5nefQVLO9Cydqpk1izO+o7BABmKjXfJZyEOzBWY3ss5jbOPM6KmEa9aQExvAtTW6tVTOsNAQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/observable-webworkers/-/observable-webworkers-2.0.1.tgz", + "integrity": "sha512-JI1vB0u3pZjoQKOK1ROWzp0ygxSi7Yb0iR+7UNsw4/Zn4cQ0P3R7XL38zac/Dy2tEA7Lg88/wIJTjF8vYXZ0uw==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } }, "node_modules/on-finished": { "version": "2.3.0", @@ -8988,7 +9700,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "dependencies": { "wrappy": "1" } @@ -9024,29 +9735,6 @@ "node": ">= 0.8.0" } }, - "node_modules/p-any": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-any/-/p-any-3.0.0.tgz", - "integrity": "sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w==", - "dependencies": { - "p-cancelable": "^2.0.0", - "p-some": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "engines": { - "node": ">=8" - } - }, "node_modules/p-defer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", @@ -9076,7 +9764,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9159,64 +9846,66 @@ } }, "node_modules/p-reflect": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz", - "integrity": "sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-3.0.0.tgz", + "integrity": "sha512-rOgYyrvUxnJdSYKGSK7UnO7RxFSnT/IJYFPiosuQ2/AtRWIryIrv8lecWqJXWbKnMcUjJvxiHDMp80m0Yj4eLA==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-5.1.1.tgz", + "integrity": "sha512-i69WkEU5ZAL8mrmdmVviWwU+DN+IUF8f4sSJThoJ3z5A7Nn5iuO5ROX3Boye0u+uYQLOSfgFl7SuFZCjlAVbQA==", "dependencies": { - "@types/retry": "^0.12.0", + "@types/retry": "0.12.1", "retry": "^0.13.1" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-settle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-4.1.1.tgz", - "integrity": "sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-5.0.0.tgz", + "integrity": "sha512-P+cL1wECSDqI49JAiHlgG0HlqqL0CBsMP3f8vrVx6Yy8pMngmJqn8UjzAHr5CPkcDIzeBxugDLDMWTK8fqrFGw==", "dependencies": { - "p-limit": "^2.2.2", - "p-reflect": "^2.1.0" + "p-limit": "^4.0.0", + "p-reflect": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-settle/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-some": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-some/-/p-some-5.0.0.tgz", - "integrity": "sha512-Js5XZxo6vHjB9NOYAzWDYAIyyiPvva0DWESAIWIK7uhSpGsyg5FwUPxipU/SOQx5x9EqhOh545d1jo6cVkitig==", - "dependencies": { - "aggregate-error": "^3.0.0", - "p-cancelable": "^2.0.0" - }, + "node_modules/p-settle/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9234,6 +9923,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, "engines": { "node": ">=6" } @@ -9311,7 +10001,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -9369,11 +10058,6 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -9384,7 +10068,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -9564,11 +10247,13 @@ } }, "node_modules/private-ip": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/private-ip/-/private-ip-2.2.1.tgz", - "integrity": "sha512-jN1WT/br/VNW9xEcwHr6DjtOKxQ5qOIqmh7o+co2TWgq56pZJw99iO3UT1tWdfgsQiyK9FqG4ji3ykwpjFqITA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/private-ip/-/private-ip-2.3.3.tgz", + "integrity": "sha512-5zyFfekIVUOTVbL92hc8LJOtE/gyGHeREHkJ2yTyByP8Q2YZVoBqLg3EfYLeF0oVvGqtaEX2t2Qovja0/gStXw==", "dependencies": { "ip-regex": "^4.3.0", + "ipaddr.js": "^2.0.1", + "is-ip": "^3.1.0", "netmask": "^2.0.2" } }, @@ -9602,11 +10287,6 @@ "node": ">=0.4.0" } }, - "node_modules/promise-timeout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/promise-timeout/-/promise-timeout-1.3.0.tgz", - "integrity": "sha512-5yANTE0tmi5++POym6OgtFmwfDvOXABD9oj/jLQr5GPEyuNEb7jH4wbbANJceJid49jwhi1RddxnhnEAb/doqg==" - }, "node_modules/protobufjs": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", @@ -9671,7 +10351,8 @@ "node_modules/psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true }, "node_modules/pump": { "version": "3.0.0", @@ -9687,6 +10368,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, "engines": { "node": ">=6" } @@ -9839,14 +10521,6 @@ "node": ">=0.9" } }, - "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "engines": { - "node": ">=0.6" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -9883,7 +10557,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -10148,7 +10821,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -10237,51 +10909,10 @@ "node": ">=0.10" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -10532,7 +11163,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, "dependencies": { "randombytes": "^2.1.0" } @@ -10742,7 +11372,6 @@ "version": "0.5.20", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -10752,7 +11381,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -10818,35 +11446,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sshpk/node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -11035,7 +11634,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11079,7 +11677,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "engines": { "node": ">=8" }, @@ -11112,7 +11709,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -11389,7 +11985,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -11406,18 +12001,6 @@ "node": ">=0.6" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/tr46": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", @@ -11490,6 +12073,63 @@ "webpack": "^5.0.0" } }, + "node_modules/ts-mocha": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-9.0.2.tgz", + "integrity": "sha512-WyQjvnzwrrubl0JT7EC1yWmNpcsU3fOuBFfdps30zbmFBgKniSaSOyZMZx+Wq7kytUs5CY+pEbSYEbGfIKnXTw==", + "dependencies": { + "ts-node": "7.0.1" + }, + "bin": { + "ts-mocha": "bin/ts-mocha" + }, + "engines": { + "node": ">= 6.X.X" + }, + "optionalDependencies": { + "tsconfig-paths": "^3.5.0" + }, + "peerDependencies": { + "mocha": "^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X" + } + }, + "node_modules/ts-mocha/node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/ts-mocha/node_modules/ts-node": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", + "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", + "dependencies": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + }, + "bin": { + "ts-node": "dist/bin.js" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ts-mocha/node_modules/yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/ts-node": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", @@ -11544,7 +12184,7 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, + "devOptional": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.1", @@ -11556,7 +12196,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, + "devOptional": true, "dependencies": { "minimist": "^1.2.0" }, @@ -11568,7 +12208,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, + "devOptional": true, "engines": { "node": ">=4" } @@ -11600,22 +12240,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11706,7 +12330,6 @@ "version": "4.5.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -11803,6 +12426,15 @@ "ieee754": "^1.1.13" } }, + "node_modules/undici": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.8.0.tgz", + "integrity": "sha512-1F7Vtcez5w/LwH2G2tGnFIihuWUlc58YidwLiCv+jR2Z50x0tNXpRRw7eOIJ+GvqCqIkg9SB7NWAJ/T9TLfv8Q==", + "peer": true, + "engines": { + "node": ">=12.18" + } + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -11824,11 +12456,6 @@ "node": ">= 10.0.0" } }, - "node_modules/unordered-array-remove": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unordered-array-remove/-/unordered-array-remove-1.0.2.tgz", - "integrity": "sha1-xUbo+I4xegzyZEyX7LV9umbSUO8=" - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -11842,6 +12469,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -11899,6 +12527,11 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -11923,19 +12556,6 @@ "node": ">= 0.8" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "node_modules/void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", @@ -12239,14 +12859,12 @@ "node_modules/workerpool": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -12263,7 +12881,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -12272,7 +12889,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12285,8 +12901,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -12339,14 +12954,23 @@ } }, "node_modules/xml2js": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.1.14.tgz", - "integrity": "sha1-UnTmf1pkxfkpdM2FE54DMq3GuQw=", + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "dependencies": { - "sax": ">=0.1.1" + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" }, "engines": { - "node": "*" + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" } }, "node_modules/xmlchars": { @@ -12364,7 +12988,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "engines": { "node": ">=10" } @@ -12388,7 +13011,6 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -12406,7 +13028,6 @@ "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, "engines": { "node": ">=10" } @@ -12415,7 +13036,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -12430,7 +13050,6 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, "engines": { "node": ">=10" }, @@ -12442,7 +13061,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -12454,7 +13072,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -12463,7 +13080,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12487,7 +13103,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, "engines": { "node": ">=6" } @@ -12496,7 +13111,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "engines": { "node": ">=10" }, @@ -12506,6 +13120,72 @@ } }, "dependencies": { + "@achingbrain/ip-address": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@achingbrain/ip-address/-/ip-address-8.1.0.tgz", + "integrity": "sha512-Zus4vMKVRDm+R1o0QJNhD0PD/8qRGO3Zx8YPsFG5lANt5utVtGg3iHVGBSAF80TfQmhi8rP+Kg/OigdxY0BXHw==", + "requires": { + "jsbn": "1.1.0", + "sprintf-js": "1.1.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + } + } + }, + "@achingbrain/nat-port-mapper": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@achingbrain/nat-port-mapper/-/nat-port-mapper-1.0.7.tgz", + "integrity": "sha512-P8Z8iMZBQCsN7q3XoVoJAX3CGPUTbGTh1XBU8JytCW3hBmSk594l8YvdrtY5NVexVHSwLeiXnDsP4d10NJHaeg==", + "requires": { + "@achingbrain/ssdp": "^4.0.1", + "@libp2p/logger": "^2.0.0", + "default-gateway": "^6.0.2", + "err-code": "^3.0.1", + "it-first": "^1.0.7", + "p-defer": "^4.0.0", + "p-timeout": "^5.0.2", + "xml2js": "^0.4.23" + }, + "dependencies": { + "@libp2p/logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.2", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + } + }, + "p-defer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==" + }, + "p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==" + } + } + }, + "@achingbrain/ssdp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@achingbrain/ssdp/-/ssdp-4.0.1.tgz", + "integrity": "sha512-z/CkfFI0Ksrpo8E+lu2rKahlE1KJHUn8X8ihQj2Jg6CEL+oHYGCNfttOES0+VnV7htuog70c8bYNHYhlmmqxBQ==", + "requires": { + "event-iterator": "^2.0.0", + "freeport-promise": "^2.0.0", + "merge-options": "^3.0.4", + "uuid": "^8.3.2", + "xml2js": "^0.4.23" + } + }, "@babel/code-frame": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", @@ -13319,6 +13999,25 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@leichtgewicht/base64-codec": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@leichtgewicht/base64-codec/-/base64-codec-1.0.0.tgz", @@ -13350,15 +14049,592 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "@libp2p/connection": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/connection/-/connection-2.0.4.tgz", + "integrity": "sha512-YGMa0ZTbKdyu4b58mLdVT3XKgfBGp/R5h2FTT/8sB3fHTkJ6Crl3Ad5a+cVuqsWfJhrHDncU3SJaqFH4fxhLmg==", + "requires": { + "@libp2p/interfaces": "^2.0.0", + "@libp2p/logger": "^1.1.0", + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1" + }, + "dependencies": { + "@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "requires": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + } + }, + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + } + } + }, + "@libp2p/crypto": { + "version": "0.22.14", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-0.22.14.tgz", + "integrity": "sha512-5RyGh5ovfqrDD8Io3n5rvVnsTHBf1exIMZ/5eBw7Eoy21xkmzdF1Hy701SoSNmiCuTPXYmxT5WMy2VUDBUG6oQ==", + "requires": { + "@libp2p/interfaces": "^2.0.1", + "@noble/ed25519": "^1.6.0", + "@noble/secp256k1": "^1.5.4", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "multiformats": "^9.4.5", + "node-forge": "^1.1.0", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + }, + "dependencies": { + "@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "requires": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + } + }, + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + } + } + }, + "@libp2p/interface-keys": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@libp2p/interface-keys/-/interface-keys-1.0.3.tgz", + "integrity": "sha512-K8/HlRl/swbVTWuGHNHF28EytszYfUhKgUHfv8CdbMk9ZA/bgO4uU+d9rcrg/Dhw3511U3aRz2bwl2psn6rJfg==" + }, + "@libp2p/interface-peer-id": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-id/-/interface-peer-id-1.0.4.tgz", + "integrity": "sha512-VRnE0MqmS1kN43hyKCEdkhz0gciuDML7hpL3p8zDm0LnveNMLJsR+/VSUaugCi/muOzLaLk26WffKWbMYfnGfA==", + "requires": { + "multiformats": "^9.6.3" + } + }, + "@libp2p/interface-peer-info": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-info/-/interface-peer-info-1.0.2.tgz", + "integrity": "sha512-8dGBj8+6PdBDsMAASxX2sECnWhK7zAnv8iCFgYXY5Z6fbQwA+7iVAea9FdjgyLapdIzDarttPt3Gdou8tXZdGg==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "@multiformats/multiaddr": "^10.2.0" + } + }, + "@libp2p/interface-peer-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-store/-/interface-peer-store-1.2.0.tgz", + "integrity": "sha512-4244DmDppLf6Av6gALoO7iMPVhBO6Hx3dbkUy7Vb3OfxS//Ix+uDUib2hypIK2Q2rKmn3dfzvDBt0GwlkSMJCg==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interface-peer-info": "^1.0.0", + "@libp2p/interface-record": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0" + } + }, + "@libp2p/interface-record": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-record/-/interface-record-1.0.2.tgz", + "integrity": "sha512-bYNxKtsUOsNucHeAXCZbAQxFXwR7JvoOmodwEByriMvTWYRbd6d8rm8VHZ/17QgdRFlIwNnpIPuoyyLQ8Wn1rQ==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0" + } + }, + "@libp2p/interfaces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-3.0.3.tgz", + "integrity": "sha512-8IIxw7TKpaYTtVfZN3jePLlm/E/VzqPpqerN+jhA+1s86akRSeyxVBYi3W9SWDSf0oIauHJSDE8KNxLceAfeag==" + }, + "@libp2p/logger": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-1.1.6.tgz", + "integrity": "sha512-ZKoRUt7cyHlbxHYDZ1Fn3A+ByqGABdmd4z07+1TfVvpEQSpn2IVcV0mt6ff5kUUtGuVeSrqK1/ZDzWqhgg56vg==", + "requires": { + "@libp2p/interfaces": "^2.0.0", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + }, + "dependencies": { + "@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "requires": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + } + }, + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + } + } + }, + "@libp2p/multistream-select": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-1.0.6.tgz", + "integrity": "sha512-8veeiZDrh7aCvILjNGps4ZLKSKTdBxJZS4SZkuhbCKmq7eX6aJoYoQ5G5MBxEFiBKtgwTKHaSroH3jfvizwDoA==", + "requires": { + "@libp2p/interfaces": "^2.0.0", + "@libp2p/logger": "^1.1.0", + "abortable-iterator": "^4.0.2", + "err-code": "^3.0.1", + "it-first": "^1.0.6", + "it-handshake": "^3.0.1", + "it-length-prefixed": "^7.0.1", + "it-pipe": "^2.0.3", + "it-pushable": "^2.0.1", + "it-reader": "^5.0.0", + "it-stream-types": "^1.0.4", + "p-defer": "^4.0.0", + "uint8arraylist": "^1.5.1", + "uint8arrays": "^3.0.0" + }, + "dependencies": { + "@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "requires": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + } + }, + "abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "requires": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, + "it-handshake": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-3.0.1.tgz", + "integrity": "sha512-Rx9ESanlfnC0aMw2LtLJ9YNlCNgnZU7wOHPzPSZTUAjbdZx54kllGR5ndIuoJqF2EtNIsmTiWEncKTgwHNJSSg==", + "requires": { + "it-map": "^1.0.6", + "it-pushable": "^2.0.1", + "it-reader": "^5.0.0", + "it-stream-types": "^1.0.4", + "p-defer": "^4.0.0" + } + }, + "it-length-prefixed": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", + "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", + "requires": { + "err-code": "^3.0.1", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0", + "varint": "^6.0.0" + } + }, + "it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "requires": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "it-reader": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-5.0.1.tgz", + "integrity": "sha512-Vj9TliHgCsIE21oqWDhrE1E5QALZw1n9QiaZg2EiWPFKSvCSm7lGDycy1OYs3LYhgvmTQDKJestlzVSHJ/YsJw==", + "requires": { + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0" + } + }, + "p-defer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==" + } + } + }, + "@libp2p/peer-collections": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-1.0.3.tgz", + "integrity": "sha512-xrnFlZ2CpYiUQ0fGE0WqfBONiE2rjkjWHXnS6gH7CudlD0JMSftbzI+naBXRunfZal7CNEtHN7+keVX+ingPgA==", + "requires": { + "@libp2p/interfaces": "^2.0.0", + "@libp2p/peer-id": "^1.1.0" + }, + "dependencies": { + "@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "requires": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + } + }, + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + } + } + }, + "@libp2p/peer-id": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-1.1.14.tgz", + "integrity": "sha512-8Ch/kQGyoDl3m0TYz/uuHRbJ3TRoG7XI9ZTFHd1P21KrpF3YvCeK5PCWDsP7IICc+Q39n0IS9zLVhGySiS7FXQ==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "err-code": "^3.0.1", + "multiformats": "^9.6.3", + "uint8arrays": "^3.0.0" + } + }, + "@libp2p/peer-id-factory": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id-factory/-/peer-id-factory-1.0.16.tgz", + "integrity": "sha512-DWiJX2OnvDGaVN2kg7NcqL2tNAp8LerT2Lj0ImuXuh0Q1wxI8Wt1PbymoRmE5kQiYG6qyu1iAb7Q9BRerf+New==", + "requires": { + "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-keys": "^1.0.2", + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/peer-id": "^1.0.0", + "multiformats": "^9.6.3", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + }, + "dependencies": { + "@libp2p/crypto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", + "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", + "requires": { + "@libp2p/interface-keys": "^1.0.2", + "@noble/ed25519": "^1.6.0", + "@noble/secp256k1": "^1.5.4", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "multiformats": "^9.4.5", + "node-forge": "^1.1.0", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + } + } + } + }, + "@libp2p/peer-record": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-1.0.12.tgz", + "integrity": "sha512-1b4aeU4sduRBUH4RKDtYBHKOEXwohrlOoBrrNPKb1WFweLMnG3oznhGusMvKQ8YuXSOTpbNPHrbJ/iJnrBbVUQ==", + "requires": { + "@libp2p/crypto": "^0.22.8", + "@libp2p/interfaces": "^2.0.0", + "@libp2p/logger": "^1.1.0", + "@libp2p/peer-id": "^1.1.0", + "@libp2p/utils": "^1.0.9", + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-all": "^1.0.6", + "it-filter": "^1.0.3", + "it-foreach": "^0.1.1", + "it-map": "^1.0.6", + "it-pipe": "^2.0.3", + "multiformats": "^9.6.3", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0", + "varint": "^6.0.0" + }, + "dependencies": { + "@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "requires": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + } + }, + "it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "requires": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + } + } + }, + "@libp2p/peer-store": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-1.0.17.tgz", + "integrity": "sha512-1uvwjJ2dRQyQnms+vBY3CgWpZe+0EYSoCNo7UUE6dhJHIA3q1Syl4kZWukA081m1eFzmMLG2VjsrzUQAfmy+Sw==", + "requires": { + "@libp2p/interfaces": "^2.0.0", + "@libp2p/logger": "^1.1.0", + "@libp2p/peer-id": "^1.1.0", + "@libp2p/peer-record": "^1.0.0", + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-all": "^1.0.6", + "it-filter": "^1.0.3", + "it-foreach": "^0.1.1", + "it-map": "^1.0.6", + "it-pipe": "^2.0.3", + "mortice": "^3.0.0", + "multiformats": "^9.6.3", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + }, + "dependencies": { + "@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "requires": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + } + }, + "it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "requires": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + } + } + }, + "@libp2p/tracked-map": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@libp2p/tracked-map/-/tracked-map-1.0.8.tgz", + "integrity": "sha512-tN56iEdSbDuUhDApQV0k93aIQu/vACN8fNHsaWZrFpvwPaXmLb//jn3m34pwnSyaTPjUSendP25+JDzg/2U/mw==", + "requires": { + "@libp2p/interfaces": "^2.0.0" + }, + "dependencies": { + "@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "requires": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + } + }, + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + } + } + }, + "@libp2p/utils": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-1.0.10.tgz", + "integrity": "sha512-jlVLfac1IoBlgXL8V+XZYxNw0SOAkKweiLhXWolUbKOgRtMDquJzbwG1n8y9GtdiFKPlkiBwOB7l9xighcOR6w==", + "requires": { + "@achingbrain/ip-address": "^8.1.0", + "@libp2p/logger": "^1.0.1", + "@multiformats/multiaddr": "^10.1.1", + "abortable-iterator": "^4.0.2", + "err-code": "^3.0.1", + "is-loopback-addr": "^2.0.1", + "it-stream-types": "^1.0.4", + "private-ip": "^2.1.1", + "ts-mocha": "^9.0.2", + "ts-node": "^10.7.0" + }, + "dependencies": { + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "requires": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, + "is-loopback-addr": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", + "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + } + } + }, + "@multiformats/mafmt": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-11.0.2.tgz", + "integrity": "sha512-KesMM4fSEpMz1kZPzlvdwYNYrq5iH38S5EDKLu5qsGG4NT94UaruTjase9osaDW+CcDfshK9uZUD9lzpXJGreA==", + "requires": { + "@multiformats/multiaddr": "^10.1.1" + } + }, + "@multiformats/multiaddr": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-10.3.3.tgz", + "integrity": "sha512-+LX9RovG7DJsANb+U6VchV/tApcdJzeafbi5+MPUam90oL91BbEh6ozNZOz4Qf5ZEeilexc12oomatmODJh1/w==", + "requires": { + "dns-over-http-resolver": "^2.1.0", + "err-code": "^3.0.1", + "is-ip": "^4.0.0", + "multiformats": "^9.4.5", + "uint8arrays": "^3.0.0", + "varint": "^6.0.0" + }, + "dependencies": { + "dns-over-http-resolver": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-2.1.0.tgz", + "integrity": "sha512-eb8RGy6k54JdD7Rjw8g65y1MyA4z3m3IIYh7uazkgZuKIdFn8gYt8dydMm3op+2UshDdk9EexrXcDluKNY/CDg==", + "requires": { + "debug": "^4.3.1", + "native-fetch": "^4.0.2", + "receptacle": "^1.3.2" + } + }, + "ip-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==" + }, + "is-ip": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-4.0.0.tgz", + "integrity": "sha512-4B4XA2HEIm/PY+OSpeMBXr8pGWBYbXuHgjMAqrwbLO3CPTCAd9ArEJzBUKGZtk9viY6+aSfadGnWyjY3ydYZkw==", + "requires": { + "ip-regex": "^5.0.0" + } + }, + "native-fetch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-4.0.2.tgz", + "integrity": "sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg==", + "requires": {} + } + } + }, "@noble/ed25519": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.5.1.tgz", - "integrity": "sha512-VX0TyIhKghm/NoTno/k71oCQO55f36yiSwuNOqEHu9BvxQuzel0tsvcsU2KjX/iN6pCkN53Bvfq1+gWNiwXDGQ==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.6.1.tgz", + "integrity": "sha512-Gptpue6qPmg7p1E5LBO5GDtXw5WMc2DVtUmu4EQequOcoCvum1dT9sY6s9M8aSJWq9YopCN4jmTOAvqMdw3q7w==" }, "@noble/secp256k1": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.3.4.tgz", - "integrity": "sha512-ZVRouDO5mbdCiDg4zCd3ZZABduRtpy4tCnB33Gh9upHe9tRzpiqbRSN1VTjrj/2g8u2c6MBi0YLNnNQpBYOiWg==" + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", + "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==" }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -13709,26 +14985,22 @@ "@tsconfig/node10": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" }, "@tsconfig/node12": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==" }, "@tsconfig/node14": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" }, "@tsconfig/node16": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" }, "@types/app-root-path": { "version": "1.2.4", @@ -13804,7 +15076,7 @@ "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true + "devOptional": true }, "@types/long": { "version": "4.0.1", @@ -14099,13 +15371,7 @@ "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "@vascosantos/moving-average": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vascosantos/moving-average/-/moving-average-1.1.0.tgz", - "integrity": "sha512-MVEJ4vWAPNbrGLjz7ITnHYg+YXZ6ijAqtH5/cHwSoCpbvuJ98aLXwFfPKAUfZpJMQR5uXB58UJajbY130IRF/w==" + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" }, "@webassemblyjs/ast": { "version": "1.11.1", @@ -14315,8 +15581,7 @@ "acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" }, "acorn-globals": { "version": "6.0.0", @@ -14352,8 +15617,7 @@ "acorn-walk": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", - "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", - "dev": true + "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==" }, "agent-base": { "version": "6.0.2", @@ -14368,6 +15632,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -14377,6 +15642,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14394,8 +15660,7 @@ "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" }, "ansi-escapes": { "version": "4.3.2", @@ -14417,14 +15682,12 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -14438,7 +15701,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -14468,8 +15730,7 @@ "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, "argparse": { "version": "1.0.10", @@ -14525,21 +15786,7 @@ "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" }, "assertion-error": { "version": "1.1.0", @@ -14565,17 +15812,8 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, "balanced-match": { "version": "1.0.2", @@ -14599,24 +15837,10 @@ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" - }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "bl": { "version": "5.0.0", @@ -14716,7 +15940,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -14730,8 +15953,7 @@ "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, "browserslist": { "version": "4.16.7", @@ -14764,8 +15986,7 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "builtin-modules": { "version": "3.3.0", @@ -14850,11 +16071,6 @@ "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, "chai": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", @@ -14874,7 +16090,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14890,7 +16105,6 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -14928,7 +16142,8 @@ "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true }, "clear-module": { "version": "4.1.2", @@ -14974,7 +16189,6 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -14984,14 +16198,12 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -15015,7 +16227,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -15023,8 +16234,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colorette": { "version": "1.2.2", @@ -15042,6 +16252,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -15149,7 +16360,8 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "cors": { "version": "2.8.5", @@ -15177,8 +16389,7 @@ "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "cross-fetch": { "version": "3.1.5", @@ -15431,14 +16642,6 @@ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", "dev": true }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "data-urls": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz", @@ -15579,7 +16782,8 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true }, "denque": { "version": "1.5.0", @@ -15607,8 +16811,7 @@ "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" }, "dir-glob": { "version": "3.0.1", @@ -15686,22 +16889,6 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - } - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -15731,8 +16918,7 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -15889,16 +17075,10 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "es6-promisify": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-7.0.0.tgz", - "integrity": "sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==" - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -15909,8 +17089,7 @@ "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "escodegen": { "version": "2.0.0", @@ -16370,7 +17549,8 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "extract-zip": { "version": "2.0.1", @@ -16395,11 +17575,6 @@ } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, "fast-check": { "version": "2.23.2", "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.23.2.tgz", @@ -16412,7 +17587,8 @@ "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "fast-diff": { "version": "1.2.0", @@ -16441,7 +17617,8 @@ "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -16503,7 +17680,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -16569,8 +17745,7 @@ "flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" }, "flat-cache": { "version": "3.0.4", @@ -16604,20 +17779,10 @@ "signal-exit": "^3.0.2" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } + "freeport-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-promise/-/freeport-promise-2.0.0.tgz", + "integrity": "sha512-dwWpT1DdQcwrhmRwnDnPM/ZFny+FtzU+k50qF2eid3KxaQDsMiBrwo1i0G3qSugkN5db6Cb0zgfc68QeTOpEFg==" }, "fromentries": { "version": "1.3.2", @@ -16634,14 +17799,12 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "optional": true }, "function-bind": { @@ -16671,8 +17834,7 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-func-name": { "version": "2.0.0", @@ -16723,14 +17885,6 @@ "get-intrinsic": "^1.1.1" } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "gh-pages": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz", @@ -16812,7 +17966,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -16826,7 +17979,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -16886,22 +18038,7 @@ "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" }, "hard-rejection": { "version": "2.1.0", @@ -16927,8 +18064,7 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-own-prop": { "version": "2.0.0", @@ -16977,8 +18113,7 @@ "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, "hi-base32": { "version": "0.5.1", @@ -17028,16 +18163,6 @@ "debug": "4" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -17121,13 +18246,13 @@ "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -17197,6 +18322,11 @@ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==" }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" + }, "ipfs-utils": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-9.0.5.tgz", @@ -17234,7 +18364,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -17286,8 +18415,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "4.0.0", @@ -17299,7 +18427,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -17332,8 +18459,7 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { "version": "1.0.5", @@ -17418,13 +18544,13 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, "is-weakref": { "version": "1.0.2", @@ -17482,11 +18608,6 @@ "whatwg-fetch": "^3.4.1" } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, "istanbul-lib-coverage": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", @@ -17715,6 +18836,11 @@ "it-all": "^1.0.6" } }, + "it-stream-types": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/it-stream-types/-/it-stream-types-1.0.4.tgz", + "integrity": "sha512-0F3CqTIcIHwtnmIgqd03a7sw8BegAmE32N2w7anIGdALea4oAN4ltqPgDMZ7zn4XPLZifXEZlBXSzgg64L1Ebw==" + }, "it-take": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/it-take/-/it-take-1.0.2.tgz", @@ -17867,15 +18993,11 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -17883,11 +19005,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, "json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", @@ -17910,17 +19027,6 @@ "universalify": "^2.0.0" } }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, "karma": { "version": "6.3.16", "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.16.tgz", @@ -18038,70 +19144,150 @@ } }, "libp2p": { - "version": "0.36.2", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.36.2.tgz", - "integrity": "sha512-UpNYBMQVivMu56zoibdGitopv39uBBAybIBOEGWmFy/I2NnTVGUutLPrxo47AuN2kntYgo/TNJfW+PpswUgSaw==", + "version": "0.37.3", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.37.3.tgz", + "integrity": "sha512-G+0tWT6jZr05XE9bG8Kw1SqFrkt1X3bM9TDDXkqWqHvUVjBHWGNDysOvTp7p3jxoSj4J/Z2w9wGbdDsz1kfPlw==", "requires": { - "@vascosantos/moving-average": "^1.1.0", - "abortable-iterator": "^3.0.0", - "aggregate-error": "^3.1.0", + "@achingbrain/nat-port-mapper": "^1.0.3", + "@libp2p/connection": "^2.0.2", + "@libp2p/crypto": "^0.22.11", + "@libp2p/interfaces": "^2.0.2", + "@libp2p/logger": "^1.1.4", + "@libp2p/multistream-select": "^1.0.4", + "@libp2p/peer-collections": "^1.0.2", + "@libp2p/peer-id": "^1.1.10", + "@libp2p/peer-id-factory": "^1.0.9", + "@libp2p/peer-record": "^1.0.8", + "@libp2p/peer-store": "^1.0.10", + "@libp2p/tracked-map": "^1.0.5", + "@libp2p/utils": "^1.0.10", + "@multiformats/mafmt": "^11.0.2", + "@multiformats/multiaddr": "^10.1.8", + "abortable-iterator": "^4.0.2", "any-signal": "^3.0.0", - "bignumber.js": "^9.0.1", - "class-is": "^1.1.0", "datastore-core": "^7.0.0", - "debug": "^4.3.1", - "err-code": "^3.0.0", - "es6-promisify": "^7.0.0", + "err-code": "^3.0.1", "events": "^3.3.0", "hashlru": "^2.3.0", - "interface-datastore": "^6.0.2", - "it-all": "^1.0.4", - "it-buffer": "^0.1.2", - "it-drain": "^1.0.3", - "it-filter": "^1.0.1", - "it-first": "^1.0.4", + "interface-datastore": "^6.1.0", + "it-all": "^1.0.6", + "it-drain": "^1.0.5", + "it-filter": "^1.0.3", + "it-first": "^1.0.6", "it-foreach": "^0.1.1", - "it-handshake": "^2.0.0", - "it-length-prefixed": "^5.0.2", - "it-map": "^1.0.4", - "it-merge": "^1.0.0", - "it-pipe": "^1.1.0", + "it-handshake": "^3.0.1", + "it-length-prefixed": "^7.0.1", + "it-map": "^1.0.6", + "it-merge": "^1.0.3", + "it-pair": "^2.0.2", + "it-pipe": "^2.0.3", "it-sort": "^1.0.1", - "it-take": "^1.0.0", - "libp2p-crypto": "^0.21.2", - "libp2p-interfaces": "^4.0.0", - "libp2p-utils": "^0.4.0", - "mafmt": "^10.0.0", + "it-stream-types": "^1.0.4", "merge-options": "^3.0.4", - "mortice": "^2.0.1", - "multiaddr": "^10.0.0", - "multiformats": "^9.0.0", - "multistream-select": "^3.0.0", + "multiformats": "^9.6.3", "mutable-proxy": "^1.0.0", - "nat-api": "^0.3.1", "node-forge": "^1.2.1", - "p-any": "^3.0.0", "p-fifo": "^1.0.0", - "p-retry": "^4.4.0", - "p-settle": "^4.1.1", - "peer-id": "^0.16.0", - "private-ip": "^2.1.0", - "protobufjs": "^6.10.2", + "p-retry": "^5.0.0", + "p-settle": "^5.0.0", + "private-ip": "^2.3.3", + "protons-runtime": "^1.0.4", "retimer": "^3.0.0", "sanitize-filename": "^1.6.3", "set-delayed-interval": "^1.0.0", - "streaming-iterables": "^6.0.0", "timeout-abort-controller": "^3.0.0", "uint8arrays": "^3.0.0", - "varint": "^6.0.0", "wherearewe": "^1.0.0", "xsalsa20": "^1.1.0" }, "dependencies": { - "streaming-iterables": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/streaming-iterables/-/streaming-iterables-6.0.0.tgz", - "integrity": "sha512-GYbJh0ife8PvryWSyFifY1m1uj6zO12d9duuP6xltiOolUz44eKasp5gbFhRbFbLy50ik6hcKn4Pbxl9AkxB+Q==" + "@libp2p/interfaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", + "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "requires": { + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-pushable": "^2.0.1", + "it-stream-types": "^1.0.4", + "multiformats": "^9.6.3" + } + }, + "abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "requires": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, + "it-handshake": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-3.0.1.tgz", + "integrity": "sha512-Rx9ESanlfnC0aMw2LtLJ9YNlCNgnZU7wOHPzPSZTUAjbdZx54kllGR5ndIuoJqF2EtNIsmTiWEncKTgwHNJSSg==", + "requires": { + "it-map": "^1.0.6", + "it-pushable": "^2.0.1", + "it-reader": "^5.0.0", + "it-stream-types": "^1.0.4", + "p-defer": "^4.0.0" + } + }, + "it-length-prefixed": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", + "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", + "requires": { + "err-code": "^3.0.1", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0", + "varint": "^6.0.0" + } + }, + "it-pair": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-2.0.2.tgz", + "integrity": "sha512-QGgUwGtzE4mI8yPZawL+9wq49SBmhQdjKW+ChKBm4PUwRNdkgSoyPlu280iNyS0JscBG3pvytJ8JNVPSEBQNjg==", + "requires": { + "it-stream-types": "^1.0.3", + "p-defer": "^4.0.0" + } + }, + "it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "requires": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "it-reader": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-5.0.1.tgz", + "integrity": "sha512-Vj9TliHgCsIE21oqWDhrE1E5QALZw1n9QiaZg2EiWPFKSvCSm7lGDycy1OYs3LYhgvmTQDKJestlzVSHJ/YsJw==", + "requires": { + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0" + } + }, + "p-defer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==" } } }, @@ -18419,7 +19605,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -18566,8 +19751,7 @@ "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "map-obj": { "version": "4.3.0", @@ -18692,12 +19876,14 @@ "mime-db": { "version": "1.48.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "dev": true }, "mime-types": { "version": "2.1.31", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dev": true, "requires": { "mime-db": "1.48.0" } @@ -18724,8 +19910,7 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minimist-options": { "version": "4.1.0", @@ -18750,7 +19935,6 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, "requires": { "minimist": "^1.2.5" } @@ -18765,7 +19949,6 @@ "version": "9.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", - "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", @@ -18796,14 +19979,12 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, "requires": { "ms": "2.1.2" }, @@ -18811,8 +19992,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -18820,7 +20000,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -18830,7 +20009,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "requires": { "argparse": "^2.0.1" } @@ -18839,7 +20017,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "requires": { "p-locate": "^5.0.0" } @@ -18847,14 +20024,12 @@ "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "requires": { "p-limit": "^3.0.2" } @@ -18862,14 +20037,12 @@ "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -18877,14 +20050,30 @@ } }, "mortice": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mortice/-/mortice-2.0.1.tgz", - "integrity": "sha512-9gsXmjq+5LZmXDIoyC/crf2i/7CUwDGSBEwSEsr1i/WfKmJ6DVt38B5kg6BE/WF/1/yfGJYiB1Wyiu423iI3nQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mortice/-/mortice-3.0.0.tgz", + "integrity": "sha512-g4rgq//2PWn4m52G6TpCSGmtWabJM8LKCZTQY4W7z0foiaQkqw+FG9a6pwIqUcTkCgBQoet8G/24V6adVMpnHw==", "requires": { "nanoid": "^3.1.20", - "observable-webworkers": "^1.0.0", - "p-queue": "^6.0.0", - "promise-timeout": "^1.3.0" + "observable-webworkers": "^2.0.1", + "p-queue": "^7.2.0", + "p-timeout": "^5.0.2" + }, + "dependencies": { + "p-queue": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.2.0.tgz", + "integrity": "sha512-Kvv7p13M46lTYLQ/PsZdaj/1Vj6u/8oiIJgyQyx4oVkOfHdd7M2EZvXigDvcsSzRwanCzQirV5bJPQFoSQt5MA==", + "requires": { + "eventemitter3": "^4.0.7", + "p-timeout": "^5.0.2" + } + }, + "p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==" + } } }, "ms": { @@ -18918,24 +20107,6 @@ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.5.tgz", "integrity": "sha512-vMwf/FUO+qAPvl3vlSZEgEVFY/AxeZq5yg761ScF3CZsXgmTi/HGkicUiNN0CI4PW8FiY2P0OLklOcmQjdQJhw==" }, - "multistream-select": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/multistream-select/-/multistream-select-3.0.2.tgz", - "integrity": "sha512-ICGA8DAviZj6Xo1NkaRV3J38M+tFDoWiGtO1ksluyMnskAsdGjAzocg806OzpQPivNGWWboX3CrFT2Tk4UdYXA==", - "requires": { - "abortable-iterator": "^3.0.0", - "bl": "^5.0.0", - "debug": "^4.1.1", - "err-code": "^3.0.1", - "it-first": "^1.0.6", - "it-handshake": "^2.0.0", - "it-length-prefixed": "^5.0.0", - "it-pipe": "^1.0.1", - "it-reader": "^3.0.0", - "p-defer": "^3.0.0", - "uint8arrays": "^3.0.0" - } - }, "mutable-proxy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mutable-proxy/-/mutable-proxy-1.0.0.tgz", @@ -18955,26 +20126,6 @@ "picocolors": "^1.0.0" } }, - "nat-api": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/nat-api/-/nat-api-0.3.1.tgz", - "integrity": "sha512-5cyLugEkXnKSKSvVjKjxxPMLDnkwY3boZLbATWwiGJ4T/3UvIpiQmzb2RqtxxEFcVo/7PwsHPGN0MosopONO8Q==", - "requires": { - "async": "^3.2.0", - "debug": "^4.2.0", - "default-gateway": "^6.0.2", - "request": "^2.88.2", - "unordered-array-remove": "^1.0.2", - "xml2js": "^0.1.0" - }, - "dependencies": { - "async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" - } - } - }, "native-fetch": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-3.0.0.tgz", @@ -19058,8 +20209,7 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "npm-run-all": { "version": "4.1.5", @@ -19353,11 +20503,6 @@ } } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -19400,9 +20545,9 @@ } }, "observable-webworkers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/observable-webworkers/-/observable-webworkers-1.0.0.tgz", - "integrity": "sha512-+cECwCR8IEh8UY5nefQVLO9Cydqpk1izO+o7BABmKjXfJZyEOzBWY3ss5jbOPM6KmEa9aQExvAtTW6tVTOsNAQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/observable-webworkers/-/observable-webworkers-2.0.1.tgz", + "integrity": "sha512-JI1vB0u3pZjoQKOK1ROWzp0ygxSi7Yb0iR+7UNsw4/Zn4cQ0P3R7XL38zac/Dy2tEA7Lg88/wIJTjF8vYXZ0uw==" }, "on-finished": { "version": "2.3.0", @@ -19417,7 +20562,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -19444,20 +20588,6 @@ "word-wrap": "^1.2.3" } }, - "p-any": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-any/-/p-any-3.0.0.tgz", - "integrity": "sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w==", - "requires": { - "p-cancelable": "^2.0.0", - "p-some": "^5.0.0" - } - }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" - }, "p-defer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", @@ -19481,7 +20611,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "requires": { "yocto-queue": "^0.1.0" } @@ -19541,47 +20670,43 @@ } }, "p-reflect": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz", - "integrity": "sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-3.0.0.tgz", + "integrity": "sha512-rOgYyrvUxnJdSYKGSK7UnO7RxFSnT/IJYFPiosuQ2/AtRWIryIrv8lecWqJXWbKnMcUjJvxiHDMp80m0Yj4eLA==" }, "p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-5.1.1.tgz", + "integrity": "sha512-i69WkEU5ZAL8mrmdmVviWwU+DN+IUF8f4sSJThoJ3z5A7Nn5iuO5ROX3Boye0u+uYQLOSfgFl7SuFZCjlAVbQA==", "requires": { - "@types/retry": "^0.12.0", + "@types/retry": "0.12.1", "retry": "^0.13.1" } }, "p-settle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-4.1.1.tgz", - "integrity": "sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-5.0.0.tgz", + "integrity": "sha512-P+cL1wECSDqI49JAiHlgG0HlqqL0CBsMP3f8vrVx6Yy8pMngmJqn8UjzAHr5CPkcDIzeBxugDLDMWTK8fqrFGw==", "requires": { - "p-limit": "^2.2.2", - "p-reflect": "^2.1.0" + "p-limit": "^4.0.0", + "p-reflect": "^3.0.0" }, "dependencies": { "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^1.0.0" } + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" } } }, - "p-some": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-some/-/p-some-5.0.0.tgz", - "integrity": "sha512-Js5XZxo6vHjB9NOYAzWDYAIyyiPvva0DWESAIWIK7uhSpGsyg5FwUPxipU/SOQx5x9EqhOh545d1jo6cVkitig==", - "requires": { - "aggregate-error": "^3.0.0", - "p-cancelable": "^2.0.0" - } - }, "p-timeout": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz", @@ -19590,7 +20715,8 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, "package-hash": { "version": "4.0.0", @@ -19646,8 +20772,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "3.1.1", @@ -19690,11 +20815,6 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -19704,8 +20824,7 @@ "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" }, "pidtree": { "version": "0.3.1", @@ -19832,11 +20951,13 @@ } }, "private-ip": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/private-ip/-/private-ip-2.2.1.tgz", - "integrity": "sha512-jN1WT/br/VNW9xEcwHr6DjtOKxQ5qOIqmh7o+co2TWgq56pZJw99iO3UT1tWdfgsQiyK9FqG4ji3ykwpjFqITA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/private-ip/-/private-ip-2.3.3.tgz", + "integrity": "sha512-5zyFfekIVUOTVbL92hc8LJOtE/gyGHeREHkJ2yTyByP8Q2YZVoBqLg3EfYLeF0oVvGqtaEX2t2Qovja0/gStXw==", "requires": { "ip-regex": "^4.3.0", + "ipaddr.js": "^2.0.1", + "is-ip": "^3.1.0", "netmask": "^2.0.2" } }, @@ -19861,11 +20982,6 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise-timeout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/promise-timeout/-/promise-timeout-1.3.0.tgz", - "integrity": "sha512-5yANTE0tmi5++POym6OgtFmwfDvOXABD9oj/jLQr5GPEyuNEb7jH4wbbANJceJid49jwhi1RddxnhnEAb/doqg==" - }, "protobufjs": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", @@ -19914,7 +21030,8 @@ "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true }, "pump": { "version": "3.0.0", @@ -19929,7 +21046,8 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, "puppeteer": { "version": "13.5.1", @@ -20025,11 +21143,6 @@ "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -20046,7 +21159,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -20245,7 +21357,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -20306,45 +21417,10 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-main-filename": { "version": "2.0.0", @@ -20525,7 +21601,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, "requires": { "randombytes": "^2.1.0" } @@ -20691,7 +21766,6 @@ "version": "0.5.20", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -20700,8 +21774,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -20763,29 +21836,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - } - } - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -20924,7 +21974,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -20952,8 +22001,7 @@ "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "strip-outer": { "version": "1.0.1", @@ -20976,7 +22024,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -21185,7 +22232,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "requires": { "is-number": "^7.0.0" } @@ -21196,15 +22242,6 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, "tr46": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", @@ -21257,6 +22294,42 @@ "semver": "^7.3.4" } }, + "ts-mocha": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-9.0.2.tgz", + "integrity": "sha512-WyQjvnzwrrubl0JT7EC1yWmNpcsU3fOuBFfdps30zbmFBgKniSaSOyZMZx+Wq7kytUs5CY+pEbSYEbGfIKnXTw==", + "requires": { + "ts-node": "7.0.1", + "tsconfig-paths": "^3.5.0" + }, + "dependencies": { + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + }, + "ts-node": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", + "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", + "requires": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + } + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==" + } + } + }, "ts-node": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", @@ -21289,7 +22362,7 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, + "devOptional": true, "requires": { "@types/json5": "^0.0.29", "json5": "^1.0.1", @@ -21301,7 +22374,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, + "devOptional": true, "requires": { "minimist": "^1.2.0" } @@ -21310,7 +22383,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "devOptional": true } } }, @@ -21337,19 +22410,6 @@ } } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -21413,8 +22473,7 @@ "typescript": { "version": "4.5.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" }, "ua-parser-js": { "version": "0.7.31", @@ -21472,6 +22531,12 @@ } } }, + "undici": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.8.0.tgz", + "integrity": "sha512-1F7Vtcez5w/LwH2G2tGnFIihuWUlc58YidwLiCv+jR2Z50x0tNXpRRw7eOIJ+GvqCqIkg9SB7NWAJ/T9TLfv8Q==", + "peer": true + }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -21487,11 +22552,6 @@ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, - "unordered-array-remove": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unordered-array-remove/-/unordered-array-remove-1.0.2.tgz", - "integrity": "sha1-xUbo+I4xegzyZEyX7LV9umbSUO8=" - }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -21502,6 +22562,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -21553,6 +22614,11 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -21574,16 +22640,6 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", @@ -21808,14 +22864,12 @@ "workerpool": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -21825,14 +22879,12 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -21844,8 +22896,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { "version": "3.0.3", @@ -21878,13 +22929,19 @@ "dev": true }, "xml2js": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.1.14.tgz", - "integrity": "sha1-UnTmf1pkxfkpdM2FE54DMq3GuQw=", + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "requires": { - "sax": ">=0.1.1" + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" } }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", @@ -21899,8 +22956,7 @@ "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "4.0.0", @@ -21918,7 +22974,6 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -21932,14 +22987,12 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -21951,14 +23004,12 @@ "yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" }, "yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, "requires": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -21969,14 +23020,12 @@ "camelcase": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" }, "decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" } } }, @@ -21993,14 +23042,12 @@ "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/package.json b/package.json index 88dc178657..d79081621e 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,11 @@ "dependencies": { "@chainsafe/libp2p-noise": "^5.0.0", "@ethersproject/rlp": "^5.5.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-peer-store": "^1.0.0", + "@libp2p/interfaces": "^3.0.2", + "@libp2p/peer-id": "^1.1.10", + "@multiformats/multiaddr": "^10.2.0", "@noble/secp256k1": "^1.3.4", "debug": "^4.3.1", "dns-query": "^0.11.1", @@ -76,16 +81,13 @@ "it-length-prefixed": "^5.0.2", "it-pipe": "^1.1.0", "js-sha3": "^0.8.0", - "libp2p": "^0.36.2", + "libp2p": "^0.37.3", "libp2p-bootstrap": "^0.14.0", "libp2p-crypto": "^0.21.2", "libp2p-gossipsub": "0.13.0", - "libp2p-interfaces": "^4.0.6", "libp2p-mplex": "^0.10.4", "libp2p-websockets": "^0.16.1", - "multiaddr": "^10.0.1", "multiformats": "^9.6.5", - "peer-id": "^0.16.0", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", "uuid": "^8.3.2", diff --git a/src/lib/discovery/bootstrap.ts b/src/lib/discovery/bootstrap.ts index 15eae9aeb9..c4d84e48aa 100644 --- a/src/lib/discovery/bootstrap.ts +++ b/src/lib/discovery/bootstrap.ts @@ -1,5 +1,5 @@ +import { Multiaddr } from "@multiformats/multiaddr"; import debug from "debug"; -import { Multiaddr } from "multiaddr"; import { DnsNodeDiscovery, NodeCapabilityCount } from "./dns"; import { getPredefinedBootstrapNodes } from "./predefined"; diff --git a/src/lib/discovery/fetch_nodes.spec.ts b/src/lib/discovery/fetch_nodes.spec.ts index 91adb96915..367159dcbf 100644 --- a/src/lib/discovery/fetch_nodes.spec.ts +++ b/src/lib/discovery/fetch_nodes.spec.ts @@ -1,5 +1,5 @@ +import { Multiaddr } from "@multiformats/multiaddr"; import { expect } from "chai"; -import { Multiaddr } from "multiaddr"; import PeerId from "peer-id"; import { ENR, Waku2 } from "../enr"; diff --git a/src/lib/discovery/predefined.ts b/src/lib/discovery/predefined.ts index 1e90db8f96..04b662f59d 100644 --- a/src/lib/discovery/predefined.ts +++ b/src/lib/discovery/predefined.ts @@ -1,4 +1,4 @@ -import { Multiaddr } from "multiaddr"; +import { Multiaddr } from "@multiformats/multiaddr"; import { getPseudoRandomSubset } from "./random_subset"; diff --git a/src/lib/enr/enr.spec.ts b/src/lib/enr/enr.spec.ts index c1775cdf13..0aa40b7cbb 100644 --- a/src/lib/enr/enr.spec.ts +++ b/src/lib/enr/enr.spec.ts @@ -1,5 +1,5 @@ +import { Multiaddr } from "@multiformats/multiaddr"; import { assert, expect } from "chai"; -import { Multiaddr } from "multiaddr"; import PeerId from "peer-id"; import { getPublicKey } from "../crypto"; diff --git a/src/lib/enr/enr.ts b/src/lib/enr/enr.ts index 5e7e308405..77d19e338a 100644 --- a/src/lib/enr/enr.ts +++ b/src/lib/enr/enr.ts @@ -1,9 +1,11 @@ import * as RLP from "@ethersproject/rlp"; +import { Multiaddr } from "@multiformats/multiaddr"; +import { + convertToBytes, + convertToString, +} from "@multiformats/multiaddr/src/convert"; +import { names } from "@multiformats/multiaddr/src/protocols-table"; import debug from "debug"; -import { Multiaddr, protocols } from "multiaddr"; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore: No types available -import muConvert from "multiaddr/src/convert"; import PeerId from "peer-id"; import { fromString } from "uint8arrays/from-string"; import { toString } from "uint8arrays/to-string"; @@ -190,7 +192,7 @@ export class ENR extends Map { get ip(): string | undefined { const raw = this.get("ip"); if (raw) { - return muConvert.toString(protocols.names.ip4.code, raw) as string; + return convertToString(names.ip4.code, raw) as string; } else { return undefined; } @@ -198,7 +200,7 @@ export class ENR extends Map { set ip(ip: string | undefined) { if (ip) { - this.set("ip", muConvert.toBytes(protocols.names.ip4.code, ip)); + this.set("ip", convertToBytes(names.ip4.code, ip)); } else { this.delete("ip"); } @@ -207,7 +209,7 @@ export class ENR extends Map { get tcp(): number | undefined { const raw = this.get("tcp"); if (raw) { - return Number(muConvert.toString(protocols.names.tcp.code, raw)); + return Number(convertToString(names.tcp.code, raw)); } else { return undefined; } @@ -217,14 +219,14 @@ export class ENR extends Map { if (port === undefined) { this.delete("tcp"); } else { - this.set("tcp", muConvert.toBytes(protocols.names.tcp.code, port)); + this.set("tcp", convertToBytes(names.tcp.code, port.toString(10))); } } get udp(): number | undefined { const raw = this.get("udp"); if (raw) { - return Number(muConvert.toString(protocols.names.udp.code, raw)); + return Number(convertToString(names.udp.code, raw)); } else { return undefined; } @@ -234,14 +236,14 @@ export class ENR extends Map { if (port === undefined) { this.delete("udp"); } else { - this.set("udp", muConvert.toBytes(protocols.names.udp.code, port)); + this.set("udp", convertToBytes(names.udp.code, port.toString(10))); } } get ip6(): string | undefined { const raw = this.get("ip6"); if (raw) { - return muConvert.toString(protocols.names.ip6.code, raw) as string; + return convertToString(names.ip6.code, raw) as string; } else { return undefined; } @@ -249,7 +251,7 @@ export class ENR extends Map { set ip6(ip: string | undefined) { if (ip) { - this.set("ip6", muConvert.toBytes(protocols.names.ip6.code, ip)); + this.set("ip6", convertToBytes(names.ip6.code, ip)); } else { this.delete("ip6"); } @@ -258,7 +260,7 @@ export class ENR extends Map { get tcp6(): number | undefined { const raw = this.get("tcp6"); if (raw) { - return Number(muConvert.toString(protocols.names.tcp.code, raw)); + return Number(convertToString(names.tcp.code, raw)); } else { return undefined; } @@ -268,14 +270,14 @@ export class ENR extends Map { if (port === undefined) { this.delete("tcp6"); } else { - this.set("tcp6", muConvert.toBytes(protocols.names.tcp.code, port)); + this.set("tcp6", convertToBytes(names.tcp.code, port.toString(10))); } } get udp6(): number | undefined { const raw = this.get("udp6"); if (raw) { - return Number(muConvert.toString(protocols.names.udp.code, raw)); + return Number(convertToString(names.udp.code, raw)); } else { return undefined; } @@ -285,7 +287,7 @@ export class ENR extends Map { if (port === undefined) { this.delete("udp6"); } else { - this.set("udp6", muConvert.toBytes(protocols.names.udp.code, port)); + this.set("udp6", convertToBytes(names.udp.code, port.toString(10))); } } @@ -371,9 +373,9 @@ export class ENR extends Map { // N bytes for the ip address // 1 or 2 bytes for the protocol as buffer (tcp or udp) // 2 bytes for the port - const ipMa = protocols.names[isIpv6 ? "ip6" : "ip4"]; + const ipMa = names[isIpv6 ? "ip6" : "ip4"]; const ipByteLen = ipMa.size / 8; - const protoMa = protocols.names[protoName]; + const protoMa = names[protoName]; const protoBuf = varintEncode(protoMa.code); const maBuf = new Uint8Array(3 + ipByteLen + protoBuf.length); maBuf[0] = ipMa.code; diff --git a/src/lib/enr/multiaddrs_codec.spec.ts b/src/lib/enr/multiaddrs_codec.spec.ts index 443047122b..16cdad56f9 100644 --- a/src/lib/enr/multiaddrs_codec.spec.ts +++ b/src/lib/enr/multiaddrs_codec.spec.ts @@ -1,5 +1,5 @@ +import { Multiaddr } from "@multiformats/multiaddr"; import { expect } from "chai"; -import { Multiaddr } from "multiaddr"; import { decodeMultiaddrs, encodeMultiaddrs } from "./multiaddrs_codec"; diff --git a/src/lib/enr/multiaddrs_codec.ts b/src/lib/enr/multiaddrs_codec.ts index c4e44a7047..c23df779ca 100644 --- a/src/lib/enr/multiaddrs_codec.ts +++ b/src/lib/enr/multiaddrs_codec.ts @@ -1,4 +1,4 @@ -import { Multiaddr } from "multiaddr"; +import { Multiaddr } from "@multiformats/multiaddr"; import { MULTIADDR_LENGTH_SIZE } from "./constants"; diff --git a/src/lib/select_peer.ts b/src/lib/select_peer.ts index bf6f764308..13bde3627a 100644 --- a/src/lib/select_peer.ts +++ b/src/lib/select_peer.ts @@ -1,18 +1,13 @@ -import Libp2p from "libp2p"; -import { Peer } from "libp2p/src/peer-store"; +import { Peer } from "@libp2p/interface-peer-store"; +import { Libp2p } from "libp2p"; /** * Returns a pseudo-random peer that supports the given protocol. * Useful for protocols such as store and light push */ export async function selectRandomPeer( - peersIter: AsyncIterable + peers: Peer[] ): Promise { - const peers = []; - for await (const peer of peersIter) { - peers.push(peer); - } - if (peers.length === 0) return; const index = Math.round(Math.random() * (peers.length - 1)); @@ -22,21 +17,18 @@ export async function selectRandomPeer( /** * Returns the list of peers that supports the given protocol. */ -export async function* getPeersForProtocol( +export async function getPeersForProtocol( libp2p: Libp2p, protocols: string[] -): AsyncIterable { - for await (const peer of libp2p.peerStore.getPeers()) { - let peerFound = false; +): Promise { + const peers: Peer[] = []; + await libp2p.peerStore.forEach((peer) => { for (let i = 0; i < protocols.length; i++) { if (peer.protocols.includes(protocols[i])) { - peerFound = true; + peers.push(peer); break; } } - if (!peerFound) { - continue; - } - yield peer; - } + }); + return peers; } diff --git a/src/lib/waku.node.spec.ts b/src/lib/waku.node.spec.ts index ef0ec9afbd..9d42293ef8 100644 --- a/src/lib/waku.node.spec.ts +++ b/src/lib/waku.node.spec.ts @@ -1,5 +1,5 @@ +import type { PeerId } from "@libp2p/interface-peer-id"; import { expect } from "chai"; -import PeerId from "peer-id"; import { makeLogFileName, @@ -64,9 +64,12 @@ describe("Waku Dial [node only]", function () { }); const connectedPeerID: PeerId = await new Promise((resolve) => { - waku.libp2p.connectionManager.on("peer:connect", (connection) => { - resolve(connection.remotePeer); - }); + waku.libp2p.connectionManager.addEventListener( + "peer:connect", + (evt) => { + resolve(evt.detail.remotePeer); + } + ); }); expect(connectedPeerID.toString()).to.eq(multiAddrWithId.getPeerId()); @@ -88,9 +91,12 @@ describe("Waku Dial [node only]", function () { }); const connectedPeerID: PeerId = await new Promise((resolve) => { - waku.libp2p.connectionManager.on("peer:connect", (connection) => { - resolve(connection.remotePeer); - }); + waku.libp2p.connectionManager.addEventListener( + "peer:connect", + (evt) => { + resolve(evt.detail.remotePeer); + } + ); }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); @@ -118,7 +124,10 @@ describe("Decryption Keys", () => { }), ]); - waku1.addPeerToAddressBook(waku2.libp2p.peerId, waku2.libp2p.multiaddrs); + waku1.addPeerToAddressBook( + waku2.libp2p.peerId, + waku2.libp2p.getMultiaddrs() + ); await Promise.all([ waku1.waitForRemotePeer([Protocols.Relay]), @@ -247,11 +256,7 @@ describe("Wait for remote peer / get peers", function () { await delay(1000); await waku.waitForRemotePeer([Protocols.Store]); - const peers = []; - for await (const peer of waku.store.peers) { - peers.push(peer.id.toString()); - } - + const peers = (await waku.store.peers()).map((peer) => peer.id.toString()); const nimPeerId = multiAddrWithId.getPeerId(); expect(nimPeerId).to.not.be.undefined; @@ -272,10 +277,7 @@ describe("Wait for remote peer / get peers", function () { await waku.dial(multiAddrWithId); await waitPromise; - const peers = []; - for await (const peer of waku.store.peers) { - peers.push(peer.id.toString()); - } + const peers = (await waku.store.peers()).map((peer) => peer.id.toString()); const nimPeerId = multiAddrWithId.getPeerId(); @@ -295,10 +297,9 @@ describe("Wait for remote peer / get peers", function () { await waku.dial(multiAddrWithId); await waku.waitForRemotePeer([Protocols.LightPush]); - const peers = []; - for await (const peer of waku.lightPush.peers) { - peers.push(peer.id.toString()); - } + const peers = (await waku.lightPush.peers()).map((peer) => + peer.id.toString() + ); const nimPeerId = multiAddrWithId.getPeerId(); @@ -318,10 +319,7 @@ describe("Wait for remote peer / get peers", function () { await waku.dial(multiAddrWithId); await waku.waitForRemotePeer([Protocols.Filter]); - const peers = []; - for await (const peer of waku.filter.peers) { - peers.push(peer.id.toString()); - } + const peers = (await waku.filter.peers()).map((peer) => peer.id.toString()); const nimPeerId = multiAddrWithId.getPeerId(); diff --git a/src/lib/waku.spec.ts b/src/lib/waku.spec.ts index e72bb9db66..2da9423cd0 100644 --- a/src/lib/waku.spec.ts +++ b/src/lib/waku.spec.ts @@ -1,5 +1,5 @@ +import type { PeerId } from "@libp2p/interface-peer-id"; import { expect } from "chai"; -import PeerId from "peer-id"; import { Waku } from "./waku"; @@ -27,9 +27,12 @@ describe("Waku Dial", function () { }); const connectedPeerID: PeerId = await new Promise((resolve) => { - waku.libp2p.connectionManager.on("peer:connect", (connection) => { - resolve(connection.remotePeer); - }); + waku.libp2p.connectionManager.addEventListener( + "peer:connect", + (evt) => { + resolve(evt.detail.remotePeer); + } + ); }); expect(connectedPeerID).to.not.be.undefined; diff --git a/src/lib/waku.ts b/src/lib/waku.ts index 21c465fb1e..f73d66751f 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -1,6 +1,8 @@ import { Noise } from "@chainsafe/libp2p-noise"; +import type { PeerId } from "@libp2p/interface-peer-id"; +import { Multiaddr, multiaddr } from "@multiformats/multiaddr"; import debug from "debug"; -import Libp2p, { Connection, Libp2pModules, Libp2pOptions } from "libp2p"; +import { createLibp2p, Libp2p, Libp2pOptions } from "libp2p"; import Libp2pBootstrap from "libp2p-bootstrap"; import { MuxedStream } from "libp2p-interfaces/dist/src/stream-muxer/types"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment @@ -13,8 +15,6 @@ import Websockets from "libp2p-websockets"; // @ts-ignore: No types available import filters from "libp2p-websockets/src/filters"; import PingService from "libp2p/src/ping"; -import { Multiaddr, multiaddr } from "multiaddr"; -import PeerId from "peer-id"; import { Bootstrap, BootstrapOptions } from "./discovery"; import { FilterCodec, WakuFilter } from "./waku_filter"; @@ -74,9 +74,7 @@ export interface CreateOptions { * allowing its omission and letting Waku set good defaults. * Notes that some values are overridden by {@link Waku} to ensure it implements the Waku protocol. */ - libp2p?: Omit & { - modules?: Partial; - }; + libp2p?: Partial; /** * Byte array used as key for the noise protocol used for connection encryption * by [`Libp2p.create`](https://github.com/libp2p/js-libp2p/blob/master/doc/API.md#create) @@ -129,7 +127,8 @@ export class Waku { const relayKeepAlive = options.relayKeepAlive || DefaultRelayKeepAliveValueSecs; - libp2p.connectionManager.on("peer:connect", (connection: Connection) => { + libp2p.connectionManager.addEventListener("peer:connect", (evt) => { + const { detail: connection } = evt; this.startKeepAlive(connection.remotePeer, pingKeepAlive, relayKeepAlive); }); @@ -144,7 +143,8 @@ export class Waku { * >this event will **only** be triggered when the last connection is closed. * @see https://github.com/libp2p/js-libp2p/blob/bad9e8c0ff58d60a78314077720c82ae331cc55b/doc/API.md?plain=1#L2100 */ - libp2p.connectionManager.on("peer:disconnect", (connection: Connection) => { + libp2p.connectionManager.addEventListener("peer:disconnect", (evt) => { + const { detail: connection } = evt; this.stopKeepAlive(connection.remotePeer); }); @@ -158,11 +158,10 @@ export class Waku { */ static async create(options?: CreateOptions): Promise { // Get an object in case options or libp2p are undefined - const libp2pOpts = Object.assign({}, options?.libp2p); // Default for Websocket filter is `all`: // Returns all TCP and DNS based addresses, both with ws or wss. - libp2pOpts.config = Object.assign( + const libp2pOpts: Partial | undefined = Object.assign( { transport: { [websocketsTransportKey]: { @@ -170,34 +169,20 @@ export class Waku { }, }, }, - options?.libp2p?.config + options?.libp2p ); + // TODO: Pass self-emit? // Pass pubsub topic to relay - if (options?.pubSubTopic) { - libp2pOpts.config.pubsub = Object.assign( - { pubSubTopic: options.pubSubTopic }, - libp2pOpts.config.pubsub - ); - } - - libp2pOpts.modules = Object.assign({}, options?.libp2p?.modules); + libp2pOpts.pubsub = new WakuRelay({ pubSubTopic: options?.pubSubTopic }); // Default transport for libp2p is Websockets - libp2pOpts.modules = Object.assign( - { - transport: [Websockets], - }, - options?.libp2p?.modules - ); + libp2pOpts.transports = options?.libp2p?.transports ?? [Websockets]; // streamMuxer, connection encryption and pubsub are overridden // as those are the only ones currently supported by Waku nodes. - libp2pOpts.modules = Object.assign(libp2pOpts.modules, { - streamMuxer: [Mplex], - connEncryption: [new Noise(options?.staticNoiseKey)], - pubsub: WakuRelay, - }); + libp2pOpts.streamMuxers = [Mplex]; + libp2pOpts.connectionEncryption = [new Noise(options?.staticNoiseKey)]; if (options?.bootstrap) { const bootstrap = new Bootstrap(options?.bootstrap); @@ -225,7 +210,7 @@ export class Waku { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: modules property is correctly set thanks to voodoo - const libp2p = await Libp2p.create(libp2pOpts); + const libp2p = await createLibp2p(libp2pOpts); const wakuStore = new WakuStore(libp2p, { pubSubTopic: options?.pubSubTopic, diff --git a/src/lib/waku_filter/index.ts b/src/lib/waku_filter/index.ts index f176a249dd..46c323986d 100644 --- a/src/lib/waku_filter/index.ts +++ b/src/lib/waku_filter/index.ts @@ -1,8 +1,9 @@ +import type { PeerId } from "@libp2p/interface-peer-id"; +import type { Peer } from "@libp2p/interface-peer-store"; import debug from "debug"; import lp from "it-length-prefixed"; import { pipe } from "it-pipe"; -import Libp2p, { MuxedStream } from "libp2p"; -import { Peer, PeerId } from "libp2p/src/peer-store"; +import { Libp2p } from "libp2p"; import { WakuMessage as WakuMessageProto } from "../../proto/message"; import { DefaultPubSubTopic } from "../constants"; @@ -104,10 +105,11 @@ export class WakuFilter { }; } - private async onRequest({ stream }: Libp2p.HandlerProps): Promise { + // `any` can be removed at the next libp2p release >0.37.3 + private onRequest({ stream }: any): void { log("Receiving message push"); try { - await pipe( + pipe( stream.source, lp.decode(), async (source: AsyncIterable) => { @@ -184,13 +186,15 @@ export class WakuFilter { } } - private async newStream(peer: Peer): Promise { - const connection = this.libp2p.connectionManager.get(peer.id); - if (!connection) { + // Should be able to remove any at next libp2p release >0.37.3 + private async newStream(peer: Peer): Promise { + const connections = this.libp2p.connectionManager.getConnections(peer.id); + if (!connections) { throw new Error("Failed to get a connection to the peer"); } - const { stream } = await connection.newStream(FilterCodec); + // TODO: Appropriate connection selection + const { stream } = await connections[0].newStream(FilterCodec); return stream; } @@ -204,7 +208,7 @@ export class WakuFilter { ); } } else { - peer = await this.randomPeer; + peer = await this.randomPeer(); if (!peer) { throw new Error( "Failed to find known peer that registers waku filter protocol" @@ -238,11 +242,11 @@ export class WakuFilter { this.decryptionKeys.delete(hexToBytes(key)); } - get peers(): AsyncIterable { + async peers(): Promise { return getPeersForProtocol(this.libp2p, [FilterCodec]); } - get randomPeer(): Promise { - return selectRandomPeer(this.peers); + async randomPeer(): Promise { + return selectRandomPeer(await this.peers()); } } diff --git a/src/lib/waku_light_push/index.ts b/src/lib/waku_light_push/index.ts index dd2c0cce14..56bbb9b975 100644 --- a/src/lib/waku_light_push/index.ts +++ b/src/lib/waku_light_push/index.ts @@ -1,9 +1,9 @@ +import type { PeerId } from "@libp2p/interface-peer-id"; +import type { Peer } from "@libp2p/interface-peer-store"; import concat from "it-concat"; import lp from "it-length-prefixed"; import { pipe } from "it-pipe"; -import Libp2p from "libp2p"; -import { Peer } from "libp2p/src/peer-store"; -import PeerId from "peer-id"; +import { Libp2p } from "libp2p"; import { PushResponse } from "../../proto/light_push"; import { DefaultPubSubTopic } from "../constants"; @@ -55,16 +55,17 @@ export class WakuLightPush { peer = await this.libp2p.peerStore.get(opts.peerId); if (!peer) throw "Peer is unknown"; } else { - peer = await this.randomPeer; + peer = await this.randomPeer(); } if (!peer) throw "No peer available"; if (!peer.protocols.includes(LightPushCodec)) throw "Peer does not register waku light push protocol"; - const connection = this.libp2p.connectionManager.get(peer.id); - if (!connection) throw "Failed to get a connection to the peer"; + const connections = this.libp2p.connectionManager.getConnections(peer.id); + if (!connections) throw "Failed to get a connection to the peer"; - const { stream } = await connection.newStream(LightPushCodec); + // TODO: Appropriate connection management + const { stream } = await connections[0].newStream(LightPushCodec); try { const pubSubTopic = opts?.pubSubTopic ? opts.pubSubTopic @@ -97,9 +98,10 @@ export class WakuLightPush { /** * Returns known peers from the address book (`libp2p.peerStore`) that support - * light push protocol. Waku may or may not be currently connected to these peers. + * light push protocol. Waku may or may not be currently connected to these + * peers. */ - get peers(): AsyncIterable { + async peers(): Promise { return getPeersForProtocol(this.libp2p, [LightPushCodec]); } @@ -108,7 +110,7 @@ export class WakuLightPush { * book (`libp2p.peerStore`). Waku may or may not be currently connected to * this peer. */ - get randomPeer(): Promise { - return selectRandomPeer(this.peers); + async randomPeer(): Promise { + return selectRandomPeer(await this.peers()); } } diff --git a/src/lib/waku_relay/index.node.spec.ts b/src/lib/waku_relay/index.node.spec.ts index 73ffee624b..e5f6e0ff66 100644 --- a/src/lib/waku_relay/index.node.spec.ts +++ b/src/lib/waku_relay/index.node.spec.ts @@ -1,3 +1,4 @@ +import { PeerId } from "@libp2p/interface-peer-id"; import { expect } from "chai"; import debug from "debug"; @@ -45,7 +46,10 @@ describe("Waku Relay [node only]", () => { }), ]); log("Instances started, adding waku2 to waku1's address book"); - waku1.addPeerToAddressBook(waku2.libp2p.peerId, waku2.libp2p.multiaddrs); + waku1.addPeerToAddressBook( + waku2.libp2p.peerId, + waku2.libp2p.getMultiaddrs() + ); log("Wait for mutual pubsub subscription"); await Promise.all([ @@ -75,7 +79,7 @@ describe("Waku Relay [node only]", () => { }); it("Register correct protocols", async function () { - const protocols = Array.from(waku1.libp2p.upgrader.protocols.keys()); + const protocols = waku1.libp2p.registrar.getProtocols(); expect(protocols).to.contain("/vac/waku/relay/2.0.0"); expect(protocols.findIndex((value) => value.match(/sub/))).to.eq(-1); @@ -268,8 +272,14 @@ describe("Waku Relay [node only]", () => { }), ]); - waku1.addPeerToAddressBook(waku2.libp2p.peerId, waku2.libp2p.multiaddrs); - waku3.addPeerToAddressBook(waku2.libp2p.peerId, waku2.libp2p.multiaddrs); + waku1.addPeerToAddressBook( + waku2.libp2p.peerId, + waku2.libp2p.getMultiaddrs() + ); + waku3.addPeerToAddressBook( + waku2.libp2p.peerId, + waku2.libp2p.getMultiaddrs() + ); await Promise.all([ waku1.waitForRemotePeer([Protocols.Relay]), @@ -330,7 +340,7 @@ describe("Waku Relay [node only]", () => { }); it("nwaku subscribes", async function () { - let subscribers: string[] = []; + let subscribers: PeerId[] = []; while (subscribers.length === 0) { await delay(200); diff --git a/src/lib/waku_relay/index.ts b/src/lib/waku_relay/index.ts index 239b9142fe..003c46721e 100644 --- a/src/lib/waku_relay/index.ts +++ b/src/lib/waku_relay/index.ts @@ -1,5 +1,5 @@ import debug from "debug"; -import Libp2p from "libp2p"; +import { Libp2p } from "libp2p"; import Gossipsub from "libp2p-gossipsub"; import { AddrInfo, MessageIdFunction } from "libp2p-gossipsub/src/interfaces"; import { MessageCache } from "libp2p-gossipsub/src/message-cache"; diff --git a/src/lib/waku_store/index.ts b/src/lib/waku_store/index.ts index 8a0b59b43c..3319970c32 100644 --- a/src/lib/waku_store/index.ts +++ b/src/lib/waku_store/index.ts @@ -1,13 +1,12 @@ +import type { PeerId } from "@libp2p/interface-peer-id"; +import { Peer } from "@libp2p/interface-peer-store"; import debug from "debug"; import concat from "it-concat"; import lp from "it-length-prefixed"; import { pipe } from "it-pipe"; -import Libp2p from "libp2p"; -import { Peer } from "libp2p/src/peer-store"; -import PeerId from "peer-id"; +import { Libp2p } from "libp2p"; import * as protoV2Beta4 from "../../proto/store_v2beta4"; -import { HistoryResponse } from "../../proto/store_v2beta4"; import { DefaultPubSubTopic, StoreCodecs } from "../constants"; import { getPeersForProtocol, selectRandomPeer } from "../select_peer"; import { hexToBytes } from "../utils"; @@ -15,8 +14,6 @@ import { DecryptionMethod, WakuMessage } from "../waku_message"; import { HistoryRPC, PageDirection } from "./history_rpc"; -import Error = HistoryResponse.Error; - const dbg = debug("waku:store"); export const DefaultPageSize = 10; @@ -156,7 +153,7 @@ export class WakuStore { if (!peer) throw `Failed to retrieve connection details for provided peer in peer store: ${opts.peerId.toString()}`; } else { - peer = await this.randomPeer; + peer = await this.randomPeer(); if (!peer) throw "Failed to find known peer that registers waku store protocol"; } @@ -173,8 +170,9 @@ export class WakuStore { throw `Peer does not register waku store protocol: ${peer.id.toString()}`; Object.assign(opts, { storeCodec }); - const connection = this.libp2p.connectionManager.get(peer.id); - if (!connection) throw "Failed to get a connection to the peer"; + const connections = this.libp2p.connectionManager.getConnections(peer.id); + if (!connections || !connections.length) + throw "Failed to get a connection to the peer"; const decryptionKeys = Array.from(this.decryptionKeys).map( ([key, { method, contentTopics }]) => { @@ -201,10 +199,11 @@ export class WakuStore { const messages: WakuMessage[] = []; let cursor = undefined; while (true) { - const { stream } = await connection.newStream(storeCodec); + // TODO: Some connection selection logic? + const { stream } = await connections[0].newStream(storeCodec); const queryOpts = Object.assign(opts, { cursor }); const historyRpcQuery = HistoryRPC.createQuery(queryOpts); - dbg("Querying store peer", connection.remoteAddr.toString()); + dbg("Querying store peer", connections[0].remoteAddr.toString()); const res = await pipe( [historyRpcQuery.encode()], @@ -221,8 +220,8 @@ export class WakuStore { const response = reply.response as protoV2Beta4.HistoryResponse; - if (response.error && response.error !== Error.ERROR_NONE_UNSPECIFIED) { - throw "History response contains an Error: " + response.error; + if (response.error) { + throw "History response contains an Error" + response.error; } if (!response.messages || !response.messages.length) { @@ -301,7 +300,7 @@ export class WakuStore { * Returns known peers from the address book (`libp2p.peerStore`) that support * store protocol. Waku may or may not be currently connected to these peers. */ - get peers(): AsyncIterable { + async peers(): Promise { const codecs = []; for (const codec of Object.values(StoreCodecs)) { codecs.push(codec); @@ -315,7 +314,7 @@ export class WakuStore { * book (`libp2p.peerStore`). Waku may or may not be currently connected to * this peer. */ - get randomPeer(): Promise { - return selectRandomPeer(this.peers); + async randomPeer(): Promise { + return selectRandomPeer(await this.peers()); } } diff --git a/src/test_utils/nwaku.ts b/src/test_utils/nwaku.ts index 89365fe8c7..8633a3fc45 100644 --- a/src/test_utils/nwaku.ts +++ b/src/test_utils/nwaku.ts @@ -5,10 +5,11 @@ import { ChildProcess, spawn } from "child_process"; +import type { PeerId } from "@libp2p/interface-peer-id"; +import { peerIdFromString } from "@libp2p/peer-id"; +import { Multiaddr, multiaddr } from "@multiformats/multiaddr"; import appRoot from "app-root-path"; import debug from "debug"; -import { Multiaddr, multiaddr } from "multiaddr"; -import PeerId from "peer-id"; import portfinder from "portfinder"; import { DefaultPubSubTopic } from "../lib/constants"; @@ -343,7 +344,7 @@ export class Nwaku { if (!this.multiaddrWithId) throw "Nwaku did not return a ws multiaddr"; const peerIdStr = this.multiaddrWithId.getPeerId(); if (!peerIdStr) throw "Nwaku multiaddr does not contain peerId"; - this.peerId = PeerId.createFromB58String(peerIdStr); + this.peerId = peerIdFromString(peerIdStr); return { peerId: this.peerId, multiaddrWithId: this.multiaddrWithId }; } From 8e5318dc4a79fbd5947429400eb8feeea9157267 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Tue, 21 Jun 2022 13:23:42 +1000 Subject: [PATCH 03/68] Upgrade libp2p-gossipsub --- package-lock.json | 1095 +++++++++++++++++++++---- package.json | 5 +- src/lib/discovery/random_subset.ts | 2 +- src/lib/waku.node.spec.ts | 5 +- src/lib/waku.ts | 23 +- src/lib/waku_relay/get_relay_peers.ts | 48 -- src/lib/waku_relay/index.ts | 431 ++-------- src/lib/waku_relay/relay_heartbeat.ts | 379 --------- 8 files changed, 1033 insertions(+), 955 deletions(-) delete mode 100644 src/lib/waku_relay/get_relay_peers.ts delete mode 100644 src/lib/waku_relay/relay_heartbeat.ts diff --git a/package-lock.json b/package-lock.json index fecb7301e0..d789cc754e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.24.0", "license": "MIT OR Apache-2.0", "dependencies": { + "@chainsafe/libp2p-gossipsub": "^2.0.0", "@chainsafe/libp2p-noise": "^5.0.0", "@ethersproject/rlp": "^5.5.0", "@libp2p/interface-peer-id": "^1.0.2", @@ -17,7 +18,7 @@ "@libp2p/peer-id": "^1.1.10", "@multiformats/multiaddr": "^10.2.0", "@noble/secp256k1": "^1.3.4", - "debug": "^4.3.1", + "debug": "^4.3.4", "dns-query": "^0.11.1", "hi-base32": "^0.5.1", "it-concat": "^2.0.0", @@ -27,7 +28,6 @@ "libp2p": "^0.37.3", "libp2p-bootstrap": "^0.14.0", "libp2p-crypto": "^0.21.2", - "libp2p-gossipsub": "0.13.0", "libp2p-mplex": "^0.10.4", "libp2p-websockets": "^0.16.1", "multiformats": "^9.6.5", @@ -44,6 +44,7 @@ "@size-limit/preset-big-lib": "^7.0.8", "@types/app-root-path": "^1.2.4", "@types/chai": "^4.2.15", + "@types/debug": "^4.1.7", "@types/mocha": "^9.1.0", "@types/node": "^17.0.6", "@types/secp256k1": "^4.0.2", @@ -640,6 +641,151 @@ "node": ">=6.9.0" } }, + "node_modules/@chainsafe/libp2p-gossipsub": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-2.0.0.tgz", + "integrity": "sha512-9tnxXdYbYEA7s4OuC/Ff5XHiKAPsfjSPdbcsdRrIanri0WI7rrwrj7xpOB60IvFIDmGRb2qQjs9qPQcy//670g==", + "dependencies": { + "@libp2p/components": "^1.0.0", + "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-keys": "^1.0.2", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-pubsub": "^1.0.1", + "@libp2p/interface-registrar": "^1.0.0", + "@libp2p/interfaces": "^3.0.2", + "@libp2p/logger": "^2.0.0", + "@libp2p/peer-id": "^1.1.13", + "@libp2p/peer-record": "^2.0.0", + "@libp2p/pubsub": "^2.0.0", + "@libp2p/topology": "^2.0.0", + "denque": "^1.5.0", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.2", + "it-pipe": "^2.0.3", + "multiformats": "^9.6.4", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + } + }, + "node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/crypto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", + "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", + "dependencies": { + "@libp2p/interface-keys": "^1.0.2", + "@noble/ed25519": "^1.6.0", + "@noble/secp256k1": "^1.5.4", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "multiformats": "^9.4.5", + "node-forge": "^1.1.0", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.2", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/peer-record": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-2.0.2.tgz", + "integrity": "sha512-JkH9fBpBpGQYqDMJP3+LNtXLyjNCf0fVcBkdjyfPTSwUXTPJ5NxsluJAH+MZkkrJG9YJG22NgrZO5784GSLAaA==", + "dependencies": { + "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-record": "^1.0.1", + "@libp2p/logger": "^2.0.0", + "@libp2p/peer-id": "^1.1.13", + "@libp2p/utils": "^2.0.0", + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-all": "^1.0.6", + "it-filter": "^1.0.3", + "it-foreach": "^0.1.1", + "it-map": "^1.0.6", + "it-pipe": "^2.0.3", + "multiformats": "^9.6.3", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-2.0.1.tgz", + "integrity": "sha512-R0r9fkskuTmm5jMrlRXWpTdYJeDYcNQ1KdfSEmoVlCs5AlTeWn31+cdaHQihSEbkpEKtVCExfsZkwa3f7C1l8A==", + "dependencies": { + "@achingbrain/ip-address": "^8.1.0", + "@libp2p/interface-connection": "^1.0.1", + "@libp2p/interface-peer-store": "^1.0.0", + "@libp2p/logger": "^2.0.0", + "@multiformats/multiaddr": "^10.1.1", + "abortable-iterator": "^4.0.2", + "err-code": "^3.0.1", + "is-loopback-addr": "^2.0.1", + "it-stream-types": "^1.0.4", + "private-ip": "^2.1.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@chainsafe/libp2p-gossipsub/node_modules/abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "dependencies": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/@chainsafe/libp2p-gossipsub/node_modules/get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, + "node_modules/@chainsafe/libp2p-gossipsub/node_modules/is-loopback-addr": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", + "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" + }, + "node_modules/@chainsafe/libp2p-gossipsub/node_modules/it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "dependencies": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/@chainsafe/libp2p-gossipsub/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, "node_modules/@chainsafe/libp2p-noise": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-5.0.3.tgz", @@ -1240,6 +1386,32 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "node_modules/@libp2p/components": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/components/-/components-1.0.0.tgz", + "integrity": "sha512-FksZm+bboEWAqHmw6GBRn+ppQEUwyt7TDTEn4J6nsA8OAXRi4R0bQc9KrdTrzomdaWjBTyAtA4hA1DYxQmmEmg==", + "dependencies": { + "@libp2p/interface-address-manager": "^1.0.1", + "@libp2p/interface-connection": "^1.0.0", + "@libp2p/interface-connection-manager": "^1.0.0", + "@libp2p/interface-content-routing": "^1.0.0", + "@libp2p/interface-dht": "^1.0.0", + "@libp2p/interface-metrics": "^1.0.2", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-peer-routing": "^1.0.0", + "@libp2p/interface-peer-store": "^1.0.0", + "@libp2p/interface-pubsub": "^1.0.0", + "@libp2p/interface-registrar": "^1.0.0", + "@libp2p/interface-transport": "^1.0.0", + "@libp2p/interfaces": "^3.0.2", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@libp2p/connection": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@libp2p/connection/-/connection-2.0.4.tgz", @@ -1319,6 +1491,93 @@ "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" }, + "node_modules/@libp2p/interface-address-manager": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-address-manager/-/interface-address-manager-1.0.2.tgz", + "integrity": "sha512-YUZzuY3yySXaeYd/LXkEDV/aKp6eJBsropXypwqeP3ErmEvkN06nbShQQAyNvRnloecYVAeLt2IZW2N9ImlRFg==", + "dependencies": { + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-connection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-1.0.1.tgz", + "integrity": "sha512-4MP+RvqR5xu6EWgrebLo34HWm/X+hGXtzsCKmNfmLN9bpaYhEobzL4Rm3RYi/0ICrgAZmoU8n+x8widiuwERew==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-connection-manager": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection-manager/-/interface-connection-manager-1.0.2.tgz", + "integrity": "sha512-92gM7sZhVidD+vsQbc+LbI4MMvxgRjFy9kUrrsOosbtCt0nl68rIeRFKRpfX92/4QY40tL41VXT69ijCUskEwg==", + "dependencies": { + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-connection-manager/node_modules/@libp2p/interface-connection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", + "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-content-routing": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-content-routing/-/interface-content-routing-1.0.2.tgz", + "integrity": "sha512-Ue1X8XrZ4ymTMQk/GWom/EKfPB5Lu7zy33ohjSix26Da/HbBvkXBdnYGDj485vxSOZGZRqeBhh21nCVjD/yLyg==", + "dependencies": { + "@libp2p/interface-peer-info": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-dht": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-dht/-/interface-dht-1.0.1.tgz", + "integrity": "sha512-EToxQznHUnD9frWoHwq8DUaOa7RZ2qoo6beb1aWdQrEJsEdUBi62FHh9qrLkrL+E4W3rkl2+WrhSP6/iHxZZwQ==", + "dependencies": { + "@libp2p/interface-peer-discovery": "^1.0.0", + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interface-peer-info": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@libp2p/interface-keys": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@libp2p/interface-keys/-/interface-keys-1.0.3.tgz", @@ -1328,6 +1587,32 @@ "npm": ">=7.0.0" } }, + "node_modules/@libp2p/interface-metrics": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@libp2p/interface-metrics/-/interface-metrics-1.0.3.tgz", + "integrity": "sha512-kPSQY/dJqeJ92YeldismoIAxWn0z13kOz0UJY7M5QE7KcW5tJAYDNzDw6sIKKbbWN7bU6KJydnYBSRzhXpLlDw==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0", + "it-stream-types": "^1.0.4" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-peer-discovery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-discovery/-/interface-peer-discovery-1.0.1.tgz", + "integrity": "sha512-ZqBhpX7fR3ROYQaGYV47YhyTJJzFDzyyEIsQ7NnDuG3KhcQb2PtocnN0sy1Ozm784M0oYveM/HjfuNxxcOwdYg==", + "dependencies": { + "@libp2p/interface-peer-info": "^1.0.0", + "@libp2p/interfaces": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@libp2p/interface-peer-id": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-id/-/interface-peer-id-1.0.4.tgz", @@ -1353,6 +1638,20 @@ "npm": ">=7.0.0" } }, + "node_modules/@libp2p/interface-peer-routing": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-routing/-/interface-peer-routing-1.0.1.tgz", + "integrity": "sha512-MKx2g0mIUI6qNuLv3xApKXR2ZrO9CUTT9ZPL0gvRlhpFCXovEkdWJ1h8KnmkR7tGPxKHt2bsCCJ8gqUaFeNstA==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interface-peer-info": "^1.0.0", + "@libp2p/interfaces": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@libp2p/interface-peer-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-store/-/interface-peer-store-1.2.0.tgz", @@ -1369,6 +1668,41 @@ "npm": ">=7.0.0" } }, + "node_modules/@libp2p/interface-pubsub": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interface-pubsub/-/interface-pubsub-1.0.4.tgz", + "integrity": "sha512-BSkt0h4fbBBHcr3LCF7fTtAoCdQBjKbTGxCa4tIJpI3m5suxC5h6OrLC2rmrexOxR9aZRkr9da4VShRyOfRLag==", + "dependencies": { + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "it-pushable": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-pubsub/node_modules/@libp2p/interface-connection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", + "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-pubsub/node_modules/it-pushable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", + "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" + }, "node_modules/@libp2p/interface-record": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@libp2p/interface-record/-/interface-record-1.0.2.tgz", @@ -1381,6 +1715,49 @@ "npm": ">=7.0.0" } }, + "node_modules/@libp2p/interface-registrar": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface-registrar/-/interface-registrar-1.1.0.tgz", + "integrity": "sha512-1Uoyn3KAecklXhsit7ANrc0FP8+mh8pVXB7c8LwGpVwKHK4IPAAfB+beUZSrHHEabp16T87FokaVYRLrGYUqRQ==", + "dependencies": { + "@libp2p/interface-connection": "^1.0.0", + "@libp2p/interface-peer-id": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-transport": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-transport/-/interface-transport-1.0.2.tgz", + "integrity": "sha512-alOdxYfYQp/v2rMGc5V7GSfRUSJc4C38HfqI3CLEfSD9DJ3NFid804MvbOS/v4mP4yWtHyN/tfR5fmH8mmGqPw==", + "dependencies": { + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-transport/node_modules/@libp2p/interface-connection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", + "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@libp2p/interfaces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-3.0.3.tgz", @@ -1756,6 +2133,146 @@ "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" }, + "node_modules/@libp2p/pubsub": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/pubsub/-/pubsub-2.0.0.tgz", + "integrity": "sha512-J10G3KMqKfnGnig1sLnLntcCVOu3wU9YqkKLFz10DqqsOFTFVXcYvvWFzCh1AAmo8jvrGBc0fBFLmT/B/fYfeA==", + "dependencies": { + "@libp2p/components": "^1.0.0", + "@libp2p/crypto": "^1.0.0", + "@libp2p/interfaces": "^3.0.2", + "@libp2p/logger": "^1.1.0", + "@libp2p/peer-collections": "^1.0.0", + "@libp2p/peer-id": "^1.1.0", + "@libp2p/topology": "^2.0.0", + "@multiformats/multiaddr": "^10.2.0", + "abortable-iterator": "^4.0.2", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "it-length-prefixed": "^7.0.1", + "it-pipe": "^2.0.3", + "it-pushable": "^3.0.0", + "multiformats": "^9.6.3", + "p-queue": "^7.2.0", + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/pubsub/node_modules/@libp2p/crypto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", + "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", + "dependencies": { + "@libp2p/interface-keys": "^1.0.2", + "@noble/ed25519": "^1.6.0", + "@noble/secp256k1": "^1.5.4", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "multiformats": "^9.4.5", + "node-forge": "^1.1.0", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/pubsub/node_modules/abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "dependencies": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/@libp2p/pubsub/node_modules/get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, + "node_modules/@libp2p/pubsub/node_modules/it-length-prefixed": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", + "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", + "dependencies": { + "err-code": "^3.0.1", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/pubsub/node_modules/it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "dependencies": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/@libp2p/pubsub/node_modules/it-pipe/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "node_modules/@libp2p/pubsub/node_modules/it-pushable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", + "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" + }, + "node_modules/@libp2p/pubsub/node_modules/p-queue": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.2.0.tgz", + "integrity": "sha512-Kvv7p13M46lTYLQ/PsZdaj/1Vj6u/8oiIJgyQyx4oVkOfHdd7M2EZvXigDvcsSzRwanCzQirV5bJPQFoSQt5MA==", + "dependencies": { + "eventemitter3": "^4.0.7", + "p-timeout": "^5.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@libp2p/pubsub/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@libp2p/topology": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/topology/-/topology-2.0.0.tgz", + "integrity": "sha512-BV6kIsDdChrjETwJsuvPf64BTScGgQEltJqZJGeEC6h12SnEX7Hh6bVPZqdIPSHzr97HpzXxP/f+fBEaLl/Ivg==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-registrar": "^1.0.0", + "@libp2p/logger": "^1.1.6", + "@multiformats/multiaddr": "^10.2.0", + "err-code": "^3.0.1", + "it-all": "^1.0.6" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@libp2p/tracked-map": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@libp2p/tracked-map/-/tracked-map-1.0.8.tgz", @@ -2439,6 +2956,7 @@ "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, "dependencies": { "@types/ms": "*" } @@ -2506,7 +3024,8 @@ "node_modules/@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true }, "node_modules/@types/node": { "version": "17.0.6", @@ -7198,9 +7717,9 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "node_modules/iso-random-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-2.0.0.tgz", - "integrity": "sha512-lGuIu104KfBV9ubYTSaE3GeAr6I69iggXxBHbTBc5u/XKlwlWl0LCytnkIZissaKqvxablwRD9B3ktVnmIUnEg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-2.0.2.tgz", + "integrity": "sha512-yJvs+Nnelic1L2vH2JzWvvPQFA4r7kSTnpST/+LkAQjSz0hos2oqLD+qIVi9Qk38Hoe7mNDt3j0S27R58MVjLQ==", "dependencies": { "events": "^3.3.0", "readable-stream": "^3.4.0" @@ -7962,42 +8481,6 @@ "node": ">=12.0.0" } }, - "node_modules/libp2p-gossipsub": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/libp2p-gossipsub/-/libp2p-gossipsub-0.13.0.tgz", - "integrity": "sha512-xy2jRZGmJpjy++Di6f1admtjve8Fx0z5l8NISTQS282egwbRMmTPE6/UeYktb6hNGAgtSTIwXdHjXmMOiTarFA==", - "dependencies": { - "@types/debug": "^4.1.7", - "debug": "^4.3.1", - "denque": "^1.5.0", - "err-code": "^3.0.1", - "it-pipe": "^1.1.0", - "libp2p-interfaces": "^4.0.4", - "peer-id": "^0.16.0", - "protobufjs": "^6.11.2", - "uint8arrays": "^3.0.0" - } - }, - "node_modules/libp2p-interfaces": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/libp2p-interfaces/-/libp2p-interfaces-4.0.6.tgz", - "integrity": "sha512-3KjzNEIWhi+VoOamLvgKKUE/xqwxSw/JYqsBnfMhAWVRvRtosROtVT03wci2XbuuowCYw+/hEX1xKJIR1w5n0A==", - "dependencies": { - "abortable-iterator": "^3.0.0", - "debug": "^4.3.1", - "err-code": "^3.0.1", - "it-length-prefixed": "^5.0.2", - "it-pipe": "^1.1.0", - "it-pushable": "^1.4.2", - "libp2p-crypto": "^0.21.0", - "multiaddr": "^10.0.0", - "multiformats": "^9.1.2", - "p-queue": "^6.6.2", - "peer-id": "^0.16.0", - "protobufjs": "^6.10.2", - "uint8arrays": "^3.0.0" - } - }, "node_modules/libp2p-mplex": { "version": "0.10.7", "resolved": "https://registry.npmjs.org/libp2p-mplex/-/libp2p-mplex-0.10.7.tgz", @@ -9752,14 +10235,6 @@ "p-defer": "^3.0.0" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "engines": { - "node": ">=4" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -9819,32 +10294,6 @@ "node": ">=8" } }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue/node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/p-reflect": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-3.0.0.tgz", @@ -13538,6 +13987,137 @@ "to-fast-properties": "^2.0.0" } }, + "@chainsafe/libp2p-gossipsub": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-2.0.0.tgz", + "integrity": "sha512-9tnxXdYbYEA7s4OuC/Ff5XHiKAPsfjSPdbcsdRrIanri0WI7rrwrj7xpOB60IvFIDmGRb2qQjs9qPQcy//670g==", + "requires": { + "@libp2p/components": "^1.0.0", + "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-keys": "^1.0.2", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-pubsub": "^1.0.1", + "@libp2p/interface-registrar": "^1.0.0", + "@libp2p/interfaces": "^3.0.2", + "@libp2p/logger": "^2.0.0", + "@libp2p/peer-id": "^1.1.13", + "@libp2p/peer-record": "^2.0.0", + "@libp2p/pubsub": "^2.0.0", + "@libp2p/topology": "^2.0.0", + "denque": "^1.5.0", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.2", + "it-pipe": "^2.0.3", + "multiformats": "^9.6.4", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + }, + "dependencies": { + "@libp2p/crypto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", + "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", + "requires": { + "@libp2p/interface-keys": "^1.0.2", + "@noble/ed25519": "^1.6.0", + "@noble/secp256k1": "^1.5.4", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "multiformats": "^9.4.5", + "node-forge": "^1.1.0", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + } + }, + "@libp2p/logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.2", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + } + }, + "@libp2p/peer-record": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-2.0.2.tgz", + "integrity": "sha512-JkH9fBpBpGQYqDMJP3+LNtXLyjNCf0fVcBkdjyfPTSwUXTPJ5NxsluJAH+MZkkrJG9YJG22NgrZO5784GSLAaA==", + "requires": { + "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-record": "^1.0.1", + "@libp2p/logger": "^2.0.0", + "@libp2p/peer-id": "^1.1.13", + "@libp2p/utils": "^2.0.0", + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-all": "^1.0.6", + "it-filter": "^1.0.3", + "it-foreach": "^0.1.1", + "it-map": "^1.0.6", + "it-pipe": "^2.0.3", + "multiformats": "^9.6.3", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0", + "varint": "^6.0.0" + } + }, + "@libp2p/utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-2.0.1.tgz", + "integrity": "sha512-R0r9fkskuTmm5jMrlRXWpTdYJeDYcNQ1KdfSEmoVlCs5AlTeWn31+cdaHQihSEbkpEKtVCExfsZkwa3f7C1l8A==", + "requires": { + "@achingbrain/ip-address": "^8.1.0", + "@libp2p/interface-connection": "^1.0.1", + "@libp2p/interface-peer-store": "^1.0.0", + "@libp2p/logger": "^2.0.0", + "@multiformats/multiaddr": "^10.1.1", + "abortable-iterator": "^4.0.2", + "err-code": "^3.0.1", + "is-loopback-addr": "^2.0.1", + "it-stream-types": "^1.0.4", + "private-ip": "^2.1.1" + } + }, + "abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "requires": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, + "is-loopback-addr": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", + "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" + }, + "it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "requires": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + } + } + }, "@chainsafe/libp2p-noise": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-5.0.3.tgz", @@ -14049,6 +14629,28 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "@libp2p/components": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/components/-/components-1.0.0.tgz", + "integrity": "sha512-FksZm+bboEWAqHmw6GBRn+ppQEUwyt7TDTEn4J6nsA8OAXRi4R0bQc9KrdTrzomdaWjBTyAtA4hA1DYxQmmEmg==", + "requires": { + "@libp2p/interface-address-manager": "^1.0.1", + "@libp2p/interface-connection": "^1.0.0", + "@libp2p/interface-connection-manager": "^1.0.0", + "@libp2p/interface-content-routing": "^1.0.0", + "@libp2p/interface-dht": "^1.0.0", + "@libp2p/interface-metrics": "^1.0.2", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-peer-routing": "^1.0.0", + "@libp2p/interface-peer-store": "^1.0.0", + "@libp2p/interface-pubsub": "^1.0.0", + "@libp2p/interface-registrar": "^1.0.0", + "@libp2p/interface-transport": "^1.0.0", + "@libp2p/interfaces": "^3.0.2", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0" + } + }, "@libp2p/connection": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@libp2p/connection/-/connection-2.0.4.tgz", @@ -14116,11 +14718,94 @@ } } }, + "@libp2p/interface-address-manager": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-address-manager/-/interface-address-manager-1.0.2.tgz", + "integrity": "sha512-YUZzuY3yySXaeYd/LXkEDV/aKp6eJBsropXypwqeP3ErmEvkN06nbShQQAyNvRnloecYVAeLt2IZW2N9ImlRFg==", + "requires": { + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0" + } + }, + "@libp2p/interface-connection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-1.0.1.tgz", + "integrity": "sha512-4MP+RvqR5xu6EWgrebLo34HWm/X+hGXtzsCKmNfmLN9bpaYhEobzL4Rm3RYi/0ICrgAZmoU8n+x8widiuwERew==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + } + }, + "@libp2p/interface-connection-manager": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection-manager/-/interface-connection-manager-1.0.2.tgz", + "integrity": "sha512-92gM7sZhVidD+vsQbc+LbI4MMvxgRjFy9kUrrsOosbtCt0nl68rIeRFKRpfX92/4QY40tL41VXT69ijCUskEwg==", + "requires": { + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0" + }, + "dependencies": { + "@libp2p/interface-connection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", + "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + } + } + } + }, + "@libp2p/interface-content-routing": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-content-routing/-/interface-content-routing-1.0.2.tgz", + "integrity": "sha512-Ue1X8XrZ4ymTMQk/GWom/EKfPB5Lu7zy33ohjSix26Da/HbBvkXBdnYGDj485vxSOZGZRqeBhh21nCVjD/yLyg==", + "requires": { + "@libp2p/interface-peer-info": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "multiformats": "^9.6.3" + } + }, + "@libp2p/interface-dht": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-dht/-/interface-dht-1.0.1.tgz", + "integrity": "sha512-EToxQznHUnD9frWoHwq8DUaOa7RZ2qoo6beb1aWdQrEJsEdUBi62FHh9qrLkrL+E4W3rkl2+WrhSP6/iHxZZwQ==", + "requires": { + "@libp2p/interface-peer-discovery": "^1.0.0", + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interface-peer-info": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "multiformats": "^9.6.3" + } + }, "@libp2p/interface-keys": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@libp2p/interface-keys/-/interface-keys-1.0.3.tgz", "integrity": "sha512-K8/HlRl/swbVTWuGHNHF28EytszYfUhKgUHfv8CdbMk9ZA/bgO4uU+d9rcrg/Dhw3511U3aRz2bwl2psn6rJfg==" }, + "@libp2p/interface-metrics": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@libp2p/interface-metrics/-/interface-metrics-1.0.3.tgz", + "integrity": "sha512-kPSQY/dJqeJ92YeldismoIAxWn0z13kOz0UJY7M5QE7KcW5tJAYDNzDw6sIKKbbWN7bU6KJydnYBSRzhXpLlDw==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "it-stream-types": "^1.0.4" + } + }, + "@libp2p/interface-peer-discovery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-discovery/-/interface-peer-discovery-1.0.1.tgz", + "integrity": "sha512-ZqBhpX7fR3ROYQaGYV47YhyTJJzFDzyyEIsQ7NnDuG3KhcQb2PtocnN0sy1Ozm784M0oYveM/HjfuNxxcOwdYg==", + "requires": { + "@libp2p/interface-peer-info": "^1.0.0", + "@libp2p/interfaces": "^3.0.0" + } + }, "@libp2p/interface-peer-id": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-id/-/interface-peer-id-1.0.4.tgz", @@ -14138,6 +14823,16 @@ "@multiformats/multiaddr": "^10.2.0" } }, + "@libp2p/interface-peer-routing": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-routing/-/interface-peer-routing-1.0.1.tgz", + "integrity": "sha512-MKx2g0mIUI6qNuLv3xApKXR2ZrO9CUTT9ZPL0gvRlhpFCXovEkdWJ1h8KnmkR7tGPxKHt2bsCCJ8gqUaFeNstA==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interface-peer-info": "^1.0.0", + "@libp2p/interfaces": "^3.0.0" + } + }, "@libp2p/interface-peer-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-store/-/interface-peer-store-1.2.0.tgz", @@ -14150,6 +14845,35 @@ "@multiformats/multiaddr": "^10.2.0" } }, + "@libp2p/interface-pubsub": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interface-pubsub/-/interface-pubsub-1.0.4.tgz", + "integrity": "sha512-BSkt0h4fbBBHcr3LCF7fTtAoCdQBjKbTGxCa4tIJpI3m5suxC5h6OrLC2rmrexOxR9aZRkr9da4VShRyOfRLag==", + "requires": { + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "it-pushable": "^3.0.0" + }, + "dependencies": { + "@libp2p/interface-connection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", + "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + } + }, + "it-pushable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", + "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" + } + } + }, "@libp2p/interface-record": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@libp2p/interface-record/-/interface-record-1.0.2.tgz", @@ -14158,6 +14882,39 @@ "@libp2p/interface-peer-id": "^1.0.0" } }, + "@libp2p/interface-registrar": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface-registrar/-/interface-registrar-1.1.0.tgz", + "integrity": "sha512-1Uoyn3KAecklXhsit7ANrc0FP8+mh8pVXB7c8LwGpVwKHK4IPAAfB+beUZSrHHEabp16T87FokaVYRLrGYUqRQ==", + "requires": { + "@libp2p/interface-connection": "^1.0.0", + "@libp2p/interface-peer-id": "^1.0.0" + } + }, + "@libp2p/interface-transport": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-transport/-/interface-transport-1.0.2.tgz", + "integrity": "sha512-alOdxYfYQp/v2rMGc5V7GSfRUSJc4C38HfqI3CLEfSD9DJ3NFid804MvbOS/v4mP4yWtHyN/tfR5fmH8mmGqPw==", + "requires": { + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + }, + "dependencies": { + "@libp2p/interface-connection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", + "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + } + } + } + }, "@libp2p/interfaces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-3.0.3.tgz", @@ -14475,6 +15232,122 @@ } } }, + "@libp2p/pubsub": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/pubsub/-/pubsub-2.0.0.tgz", + "integrity": "sha512-J10G3KMqKfnGnig1sLnLntcCVOu3wU9YqkKLFz10DqqsOFTFVXcYvvWFzCh1AAmo8jvrGBc0fBFLmT/B/fYfeA==", + "requires": { + "@libp2p/components": "^1.0.0", + "@libp2p/crypto": "^1.0.0", + "@libp2p/interfaces": "^3.0.2", + "@libp2p/logger": "^1.1.0", + "@libp2p/peer-collections": "^1.0.0", + "@libp2p/peer-id": "^1.1.0", + "@libp2p/topology": "^2.0.0", + "@multiformats/multiaddr": "^10.2.0", + "abortable-iterator": "^4.0.2", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "it-length-prefixed": "^7.0.1", + "it-pipe": "^2.0.3", + "it-pushable": "^3.0.0", + "multiformats": "^9.6.3", + "p-queue": "^7.2.0", + "uint8arrays": "^3.0.0" + }, + "dependencies": { + "@libp2p/crypto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", + "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", + "requires": { + "@libp2p/interface-keys": "^1.0.2", + "@noble/ed25519": "^1.6.0", + "@noble/secp256k1": "^1.5.4", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "multiformats": "^9.4.5", + "node-forge": "^1.1.0", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + } + }, + "abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "requires": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, + "it-length-prefixed": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", + "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", + "requires": { + "err-code": "^3.0.1", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0", + "varint": "^6.0.0" + } + }, + "it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "requires": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + }, + "dependencies": { + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + } + } + }, + "it-pushable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", + "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" + }, + "p-queue": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.2.0.tgz", + "integrity": "sha512-Kvv7p13M46lTYLQ/PsZdaj/1Vj6u/8oiIJgyQyx4oVkOfHdd7M2EZvXigDvcsSzRwanCzQirV5bJPQFoSQt5MA==", + "requires": { + "eventemitter3": "^4.0.7", + "p-timeout": "^5.0.2" + } + }, + "p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==" + } + } + }, + "@libp2p/topology": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/topology/-/topology-2.0.0.tgz", + "integrity": "sha512-BV6kIsDdChrjETwJsuvPf64BTScGgQEltJqZJGeEC6h12SnEX7Hh6bVPZqdIPSHzr97HpzXxP/f+fBEaLl/Ivg==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-registrar": "^1.0.0", + "@libp2p/logger": "^1.1.6", + "@multiformats/multiaddr": "^10.2.0", + "err-code": "^3.0.1", + "it-all": "^1.0.6" + } + }, "@libp2p/tracked-map": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@libp2p/tracked-map/-/tracked-map-1.0.8.tgz", @@ -15036,6 +15909,7 @@ "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, "requires": { "@types/ms": "*" } @@ -15103,7 +15977,8 @@ "@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true }, "@types/node": { "version": "17.0.6", @@ -18579,9 +19454,9 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "iso-random-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-2.0.0.tgz", - "integrity": "sha512-lGuIu104KfBV9ubYTSaE3GeAr6I69iggXxBHbTBc5u/XKlwlWl0LCytnkIZissaKqvxablwRD9B3ktVnmIUnEg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-2.0.2.tgz", + "integrity": "sha512-yJvs+Nnelic1L2vH2JzWvvPQFA4r7kSTnpST/+LkAQjSz0hos2oqLD+qIVi9Qk38Hoe7mNDt3j0S27R58MVjLQ==", "requires": { "events": "^3.3.0", "readable-stream": "^3.4.0" @@ -19317,42 +20192,6 @@ "uint8arrays": "^3.0.0" } }, - "libp2p-gossipsub": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/libp2p-gossipsub/-/libp2p-gossipsub-0.13.0.tgz", - "integrity": "sha512-xy2jRZGmJpjy++Di6f1admtjve8Fx0z5l8NISTQS282egwbRMmTPE6/UeYktb6hNGAgtSTIwXdHjXmMOiTarFA==", - "requires": { - "@types/debug": "^4.1.7", - "debug": "^4.3.1", - "denque": "^1.5.0", - "err-code": "^3.0.1", - "it-pipe": "^1.1.0", - "libp2p-interfaces": "^4.0.4", - "peer-id": "^0.16.0", - "protobufjs": "^6.11.2", - "uint8arrays": "^3.0.0" - } - }, - "libp2p-interfaces": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/libp2p-interfaces/-/libp2p-interfaces-4.0.6.tgz", - "integrity": "sha512-3KjzNEIWhi+VoOamLvgKKUE/xqwxSw/JYqsBnfMhAWVRvRtosROtVT03wci2XbuuowCYw+/hEX1xKJIR1w5n0A==", - "requires": { - "abortable-iterator": "^3.0.0", - "debug": "^4.3.1", - "err-code": "^3.0.1", - "it-length-prefixed": "^5.0.2", - "it-pipe": "^1.1.0", - "it-pushable": "^1.4.2", - "libp2p-crypto": "^0.21.0", - "multiaddr": "^10.0.0", - "multiformats": "^9.1.2", - "p-queue": "^6.6.2", - "peer-id": "^0.16.0", - "protobufjs": "^6.10.2", - "uint8arrays": "^3.0.0" - } - }, "libp2p-mplex": { "version": "0.10.7", "resolved": "https://registry.npmjs.org/libp2p-mplex/-/libp2p-mplex-0.10.7.tgz", @@ -20602,11 +21441,6 @@ "p-defer": "^3.0.0" } }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -20650,25 +21484,6 @@ "aggregate-error": "^3.0.0" } }, - "p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "dependencies": { - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "requires": { - "p-finally": "^1.0.0" - } - } - } - }, "p-reflect": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-3.0.0.tgz", diff --git a/package.json b/package.json index d79081621e..fa3e9cb2d4 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "node": ">=16" }, "dependencies": { + "@chainsafe/libp2p-gossipsub": "^2.0.0", "@chainsafe/libp2p-noise": "^5.0.0", "@ethersproject/rlp": "^5.5.0", "@libp2p/interface-peer-id": "^1.0.2", @@ -74,7 +75,7 @@ "@libp2p/peer-id": "^1.1.10", "@multiformats/multiaddr": "^10.2.0", "@noble/secp256k1": "^1.3.4", - "debug": "^4.3.1", + "debug": "^4.3.4", "dns-query": "^0.11.1", "hi-base32": "^0.5.1", "it-concat": "^2.0.0", @@ -84,7 +85,6 @@ "libp2p": "^0.37.3", "libp2p-bootstrap": "^0.14.0", "libp2p-crypto": "^0.21.2", - "libp2p-gossipsub": "0.13.0", "libp2p-mplex": "^0.10.4", "libp2p-websockets": "^0.16.1", "multiformats": "^9.6.5", @@ -101,6 +101,7 @@ "@size-limit/preset-big-lib": "^7.0.8", "@types/app-root-path": "^1.2.4", "@types/chai": "^4.2.15", + "@types/debug": "^4.1.7", "@types/mocha": "^9.1.0", "@types/node": "^17.0.6", "@types/secp256k1": "^4.0.2", diff --git a/src/lib/discovery/random_subset.ts b/src/lib/discovery/random_subset.ts index be038946a4..27899cfd09 100644 --- a/src/lib/discovery/random_subset.ts +++ b/src/lib/discovery/random_subset.ts @@ -1,4 +1,4 @@ -import { shuffle } from "libp2p-gossipsub/src/utils/index"; +import { shuffle } from "@chainsafe/libp2p-gossipsub/utils/shuffle"; export function getPseudoRandomSubset( values: T[], diff --git a/src/lib/waku.node.spec.ts b/src/lib/waku.node.spec.ts index 9d42293ef8..2d38464638 100644 --- a/src/lib/waku.node.spec.ts +++ b/src/lib/waku.node.spec.ts @@ -201,7 +201,7 @@ describe("Wait for remote peer / get peers", function () { const nimPeerId = multiAddrWithId.getPeerId(); expect(nimPeerId).to.not.be.undefined; - expect(peers.has(nimPeerId as string)).to.be.true; + expect(peers).to.includes(nimPeerId); }); it("Relay - dialed after", async function () { @@ -219,11 +219,12 @@ describe("Wait for remote peer / get peers", function () { await waku.dial(multiAddrWithId); await waitPromise; + // TODO: Should getMeshPeers be used instead? const peers = waku.relay.getPeers(); const nimPeerId = multiAddrWithId.getPeerId(); expect(nimPeerId).to.not.be.undefined; - expect(peers.has(nimPeerId as string)).to.be.true; + expect(peers).includes(nimPeerId); }); it("Relay - times out", function (done) { diff --git a/src/lib/waku.ts b/src/lib/waku.ts index f73d66751f..91298f3ecf 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -128,8 +128,7 @@ export class Waku { options.relayKeepAlive || DefaultRelayKeepAliveValueSecs; libp2p.connectionManager.addEventListener("peer:connect", (evt) => { - const { detail: connection } = evt; - this.startKeepAlive(connection.remotePeer, pingKeepAlive, relayKeepAlive); + this.startKeepAlive(evt.detail.remotePeer, pingKeepAlive, relayKeepAlive); }); /** @@ -144,8 +143,7 @@ export class Waku { * @see https://github.com/libp2p/js-libp2p/blob/bad9e8c0ff58d60a78314077720c82ae331cc55b/doc/API.md?plain=1#L2100 */ libp2p.connectionManager.addEventListener("peer:disconnect", (evt) => { - const { detail: connection } = evt; - this.stopKeepAlive(connection.remotePeer); + this.stopKeepAlive(evt.detail.remotePeer); }); options?.decryptionKeys?.forEach((key) => { @@ -372,10 +370,21 @@ export class Waku { if (protocols.includes(Protocols.Store)) { const storePromise = (async (): Promise => { - for await (const peer of this.store.peers) { - dbg("Store peer found", peer.id.toString()); - break; + const peers = await this.store.peers(); + + if (peers.length) { + dbg("Store peer found: ", peers[0].id.toString()); + return; } + + await new Promise((resolve) => { + this.libp2p.peerStore.addEventListener("change:protocols", (evt) => { + if (evt.detail.protocols.includes(LightPushCodec)) { + dbg("Resolving for", LightPushCodec, evt.detail.protocols); + resolve(); + } + }); + }); })(); promises.push(storePromise); } diff --git a/src/lib/waku_relay/get_relay_peers.ts b/src/lib/waku_relay/get_relay_peers.ts deleted file mode 100644 index df03553dab..0000000000 --- a/src/lib/waku_relay/get_relay_peers.ts +++ /dev/null @@ -1,48 +0,0 @@ -import Gossipsub from "libp2p-gossipsub"; -import { shuffle } from "libp2p-gossipsub/src/utils"; - -import { RelayCodecs } from "./constants"; - -/** - * Given a topic, returns up to count peers subscribed to that topic - * that pass an optional filter function - * - * @param {Gossipsub} router - * @param {String} topic - * @param {Number} count - * @param {Function} [filter] a function to filter acceptable peers - * @returns {Set} - * - */ -export function getRelayPeers( - router: Gossipsub, - topic: string, - count: number, - filter: (id: string) => boolean = (): boolean => true -): Set { - const peersInTopic = router.topics.get(topic); - if (!peersInTopic) { - return new Set(); - } - - // Adds all peers using our protocol - // that also pass the filter function - let peers: string[] = []; - peersInTopic.forEach((id: string) => { - const peerStreams = router.peers.get(id); - if (!peerStreams) { - return; - } - if (RelayCodecs.includes(peerStreams.protocol) && filter(id)) { - peers.push(id); - } - }); - - // Pseudo-randomly shuffles peers - peers = shuffle(peers); - if (count > 0 && peers.length > count) { - peers = peers.slice(0, count); - } - - return new Set(peers); -} diff --git a/src/lib/waku_relay/index.ts b/src/lib/waku_relay/index.ts index 003c46721e..40cb020537 100644 --- a/src/lib/waku_relay/index.ts +++ b/src/lib/waku_relay/index.ts @@ -1,17 +1,10 @@ -import debug from "debug"; -import { Libp2p } from "libp2p"; -import Gossipsub from "libp2p-gossipsub"; -import { AddrInfo, MessageIdFunction } from "libp2p-gossipsub/src/interfaces"; -import { MessageCache } from "libp2p-gossipsub/src/message-cache"; -import { RPC } from "libp2p-gossipsub/src/message/rpc"; import { - PeerScoreParams, - PeerScoreThresholds, -} from "libp2p-gossipsub/src/score"; -import { createGossipRpc, shuffle } from "libp2p-gossipsub/src/utils"; -import { InMessage } from "libp2p-interfaces/src/pubsub"; -import { SignaturePolicy } from "libp2p-interfaces/src/pubsub/signature-policy"; -import PeerId from "peer-id"; + GossipSub, + GossipsubMessage, + GossipsubOpts, +} from "@chainsafe/libp2p-gossipsub"; +import { SignaturePolicy } from "@chainsafe/libp2p-gossipsub/types"; +import debug from "debug"; import { DefaultPubSubTopic } from "../constants"; import { hexToBytes } from "../utils"; @@ -19,35 +12,9 @@ import { CreateOptions } from "../waku"; import { DecryptionMethod, WakuMessage } from "../waku_message"; import * as constants from "./constants"; -import { getRelayPeers } from "./get_relay_peers"; -import { RelayHeartbeat } from "./relay_heartbeat"; const dbg = debug("waku:relay"); -/** - * See constructor libp2p-gossipsub [API](https://github.com/ChainSafe/js-libp2p-gossipsub#api). - */ -export interface GossipOptions { - emitSelf: boolean; - gossipIncoming: boolean; - fallbackToFloodsub: boolean; - floodPublish: boolean; - doPX: boolean; - msgIdFn: MessageIdFunction; - messageCache: MessageCache; - // This option is always overridden - // globalSignaturePolicy: string; - scoreParams: Partial; - scoreThresholds: Partial; - directPeers: AddrInfo[]; - D: number; - Dlo: number; - Dhi: number; - Dscore: number; - Dout: number; - Dlazy: number; -} - /** * Implements the [Waku v2 Relay protocol]{@link https://rfc.vac.dev/spec/11/}. * Must be passed as a `pubsub` module to a {Libp2p} instance. @@ -55,9 +22,9 @@ export interface GossipOptions { * @implements {require('libp2p-interfaces/src/pubsub')} * @noInheritDoc */ -export class WakuRelay extends Gossipsub { - heartbeat: RelayHeartbeat; +export class WakuRelay extends GossipSub { pubSubTopic: string; + public static multicodec: string = constants.RelayCodecs[0]; public decryptionKeys: Map< Uint8Array, @@ -72,26 +39,19 @@ export class WakuRelay extends Gossipsub { [contentTopic: string]: Set<(message: WakuMessage) => void>; }; - constructor( - libp2p: Libp2p, - options?: Partial - ) { + constructor(options?: Partial) { super( - libp2p, - Object.assign(options ?? {}, { + Object.assign(options, { // Ensure that no signature is included nor expected in the messages. globalSignaturePolicy: SignaturePolicy.StrictNoSign, + fallbackToFloodsub: false, }) ); + this.multicodecs = constants.RelayCodecs; - this.heartbeat = new RelayHeartbeat(this); this.observers = {}; this.decryptionKeys = new Map(); - const multicodecs = constants.RelayCodecs; - - Object.assign(this, { multicodecs }); - this.pubSubTopic = options?.pubSubTopic || DefaultPubSubTopic; options?.decryptionKeys?.forEach((key) => { @@ -119,7 +79,7 @@ export class WakuRelay extends Gossipsub { */ public async send(message: WakuMessage): Promise { const msg = message.encode(); - await super.publish(this.pubSubTopic, msg); + await this.publish(this.pubSubTopic, msg); } /** @@ -195,338 +155,57 @@ export class WakuRelay extends Gossipsub { } } - /** - * Return the relay peers we are connected to, and we would publish a message to - */ - getPeers(): Set { - return getRelayPeers(this, this.pubSubTopic, this._options.D, (id) => { - // Filter peers we would not publish to - return ( - this.score.score(id) >= this._options.scoreThresholds.publishThreshold - ); - }); - } - /** * Subscribe to a pubsub topic and start emitting Waku messages to observers. * * @override */ subscribe(pubSubTopic: string): void { - this.on(pubSubTopic, (event) => { - const decryptionKeys = Array.from(this.decryptionKeys).map( - ([key, { method, contentTopics }]) => { - return { - key, - method, - contentTopics, - }; - } - ); - - dbg(`Message received on ${pubSubTopic}`); - WakuMessage.decode(event.data, decryptionKeys) - .then((wakuMsg) => { - if (!wakuMsg) { - dbg("Failed to decode Waku Message"); - return; - } - - if (this.observers[""]) { - this.observers[""].forEach((callbackFn) => { - callbackFn(wakuMsg); - }); - } - if (wakuMsg.contentTopic) { - if (this.observers[wakuMsg.contentTopic]) { - this.observers[wakuMsg.contentTopic].forEach((callbackFn) => { - callbackFn(wakuMsg); - }); + this.addEventListener( + "gossipsub:message", + (event: CustomEvent) => { + if (event.detail.msg.topic === pubSubTopic) { + const decryptionKeys = Array.from(this.decryptionKeys).map( + ([key, { method, contentTopics }]) => { + return { + key, + method, + contentTopics, + }; } - } - }) - .catch((e) => { - dbg("Failed to decode Waku Message", e); - }); - }); + ); + + dbg(`Message received on ${pubSubTopic}`); + WakuMessage.decode(event.detail.msg.data, decryptionKeys) + .then((wakuMsg) => { + if (!wakuMsg) { + dbg("Failed to decode Waku Message"); + return; + } + + if (this.observers[""]) { + this.observers[""].forEach((callbackFn) => { + callbackFn(wakuMsg); + }); + } + if (wakuMsg.contentTopic) { + if (this.observers[wakuMsg.contentTopic]) { + this.observers[wakuMsg.contentTopic].forEach((callbackFn) => { + callbackFn(wakuMsg); + }); + } + } + }) + .catch((e) => { + dbg("Failed to decode Waku Message", e); + }); + } + } + ); super.subscribe(pubSubTopic); } - /** - * Join pubsub topic. - * This is present to override the behavior of Gossipsub and should not - * be used by API Consumers - * - * @internal - * @param {string} topic - * @returns {void} - * @override - */ - join(topic: string): void { - if (!this.started) { - throw new Error("WakuRelayPubSub has not started"); - } - - const fanoutPeers = this.fanout.get(topic); - if (fanoutPeers) { - // these peers have a score above the publish threshold, which may be negative - // so drop the ones with a negative score - fanoutPeers.forEach((id) => { - if (this.score.score(id) < 0) { - fanoutPeers.delete(id); - } - }); - if (fanoutPeers.size < this._options.D) { - // we need more peers; eager, as this would get fixed in the next heartbeat - getRelayPeers( - this, - topic, - this._options.D - fanoutPeers.size, - (id: string): boolean => { - // filter our current peers, direct peers, and peers with negative scores - return ( - !fanoutPeers.has(id) && - !this.direct.has(id) && - this.score.score(id) >= 0 - ); - } - ).forEach((id) => fanoutPeers.add(id)); - } - this.mesh.set(topic, fanoutPeers); - this.fanout.delete(topic); - this.lastpub.delete(topic); - } else { - const peers = getRelayPeers( - this, - topic, - this._options.D, - (id: string): boolean => { - // filter direct peers and peers with negative score - return !this.direct.has(id) && this.score.score(id) >= 0; - } - ); - this.mesh.set(topic, peers); - } - this.mesh.get(topic)?.forEach((id) => { - this.log("JOIN: Add mesh link to %s in %s", id, topic); - this._sendGraft(id, topic); - }); - } - - /** - * Publish messages. - * This is present to override the behavior of Gossipsub and should not - * be used by API Consumers - * - * @ignore - * @override - * @param {InMessage} msg - * @returns {void} - */ - async _publish(msg: InMessage): Promise { - const msgIdStr = await this.getCanonicalMsgIdStr(msg); - if (msg.receivedFrom !== this.peerId.toString()) { - this.score.deliverMessage(msg, msgIdStr); - this.gossipTracer.deliverMessage(msgIdStr); - } - - // put in seen cache - this.seenCache.put(msgIdStr); - - this.messageCache.put(msg, msgIdStr); - - const toSend = new Set(); - msg.topicIDs.forEach((topic) => { - const peersInTopic = this.topics.get(topic); - if (!peersInTopic) { - return; - } - - // direct peers - this.direct.forEach((id) => { - toSend.add(id); - }); - - let meshPeers = this.mesh.get(topic); - if (!meshPeers || !meshPeers.size) { - // We are not in the mesh for topic, use fanout peers - meshPeers = this.fanout.get(topic); - if (!meshPeers) { - // If we are not in the fanout, then pick peers in topic above the publishThreshold - const peers = getRelayPeers(this, topic, this._options.D, (id) => { - return ( - this.score.score(id) >= - this._options.scoreThresholds.publishThreshold - ); - }); - - if (peers.size > 0) { - meshPeers = peers; - this.fanout.set(topic, peers); - } else { - meshPeers = new Set(); - } - } - // Store the latest publishing time - this.lastpub.set(topic, this._now()); - } - - meshPeers?.forEach((peer) => { - toSend.add(peer); - }); - }); - // Publish messages to peers - const rpc = createGossipRpc([Gossipsub.utils.normalizeOutRpcMessage(msg)]); - dbg(`Relay message to ${toSend.size} peers`); - toSend.forEach((id) => { - if (id === msg.from) { - return; - } - dbg("Relay message to", id); - this._sendRpc(id, rpc); - }); - } - - /** - * Emits gossip to peers in a particular topic. - * - * This is present to override the behavior of Gossipsub and should not - * be used by API Consumers - * - * @ignore - * @override - * @param {string} topic - * @param {Set} exclude peers to exclude - * @returns {void} - */ - _emitGossip(topic: string, exclude: Set): void { - const messageIDs = this.messageCache.getGossipIDs(topic); - if (!messageIDs.length) { - return; - } - - // shuffle to emit in random order - shuffle(messageIDs); - - // if we are emitting more than GossipsubMaxIHaveLength ids, truncate the list - if (messageIDs.length > constants.RelayMaxIHaveLength) { - // we do the truncation (with shuffling) per peer below - this.log( - "too many messages for gossip; will truncate IHAVE list (%d messages)", - messageIDs.length - ); - } - - // Send gossip to GossipFactor peers above threshold with a minimum of D_lazy - // First we collect the peers above gossipThreshold that are not in the exclude set - // and then randomly select from that set - // We also exclude direct peers, as there is no reason to emit gossip to them - const peersToGossip: string[] = []; - const topicPeers = this.topics.get(topic); - if (!topicPeers) { - // no topic peers, no gossip - return; - } - topicPeers.forEach((id) => { - const peerStreams = this.peers.get(id); - if (!peerStreams) { - return; - } - if ( - !exclude.has(id) && - !this.direct.has(id) && - constants.RelayCodecs.includes(peerStreams.protocol) && - this.score.score(id) >= this._options.scoreThresholds.gossipThreshold - ) { - peersToGossip.push(id); - } - }); - - let target = this._options.Dlazy; - const factor = constants.RelayGossipFactor * peersToGossip.length; - if (factor > target) { - target = factor; - } - if (target > peersToGossip.length) { - target = peersToGossip.length; - } else { - shuffle(peersToGossip); - } - // Emit the IHAVE gossip to the selected peers up to the target - peersToGossip.slice(0, target).forEach((id) => { - let peerMessageIDs = messageIDs; - if (messageIDs.length > constants.RelayMaxIHaveLength) { - // shuffle and slice message IDs per peer so that we emit a different set for each peer - // we have enough redundancy in the system that this will significantly increase the message - // coverage when we do truncate - peerMessageIDs = shuffle(peerMessageIDs.slice()).slice( - 0, - constants.RelayMaxIHaveLength - ); - } - this._pushGossip(id, { - topicID: topic, - messageIDs: peerMessageIDs, - }); - }); - } - - /** - * Make a PRUNE control message for a peer in a topic. - * This is present to override the behavior of Gossipsub and should not - * be used by API Consumers - * - * @ignore - * @override - * @param {string} id - * @param {string} topic - * @param {boolean} doPX - * @returns {Promise} - */ - async _makePrune( - id: string, - topic: string, - doPX: boolean - ): Promise { - // backoff is measured in seconds - // RelayPruneBackoff is measured in milliseconds - const backoff = constants.RelayPruneBackoff / 1000; - if (!doPX) { - return { - topicID: topic, - peers: [], - backoff: backoff, - }; - } - - // select peers for Peer eXchange - const peers = getRelayPeers( - this, - topic, - constants.RelayPrunePeers, - (xid: string): boolean => { - return xid !== id && this.score.score(xid) >= 0; - } - ); - const px = await Promise.all( - Array.from(peers).map(async (p) => { - // see if we have a signed record to send back; if we don't, just send - // the peer ID and let the pruned peer find them in the DHT -- we can't trust - // unsigned address records through PX anyways - // Finding signed records in the DHT is not supported at the time of writing in js-libp2p - const peerId = PeerId.createFromB58String(p); - return { - peerID: peerId.toBytes(), - signedPeerRecord: - await this._libp2p.peerStore.addressBook.getRawEnvelope(peerId), - }; - }) - ); - return { - topicID: topic, - peers: px, - backoff: backoff, - }; - } + // TODO: Implement method that uses Relay codec + // public async heartbeat(): Promise { } diff --git a/src/lib/waku_relay/relay_heartbeat.ts b/src/lib/waku_relay/relay_heartbeat.ts deleted file mode 100644 index b3340add06..0000000000 --- a/src/lib/waku_relay/relay_heartbeat.ts +++ /dev/null @@ -1,379 +0,0 @@ -/** - * @hidden - * @module - */ - -import Gossipsub from "libp2p-gossipsub"; -import { Heartbeat } from "libp2p-gossipsub/src/heartbeat"; -import { shuffle } from "libp2p-gossipsub/src/utils"; - -import * as constants from "./constants"; -import { getRelayPeers } from "./get_relay_peers"; - -export class RelayHeartbeat extends Heartbeat { - /** - * @param {Object} gossipsub - * @constructor - */ - constructor(gossipsub: Gossipsub) { - super(gossipsub); - } - - start(): void { - if (this._heartbeatTimer) { - return; - } - - const heartbeat = this._heartbeat.bind(this); - - const timeout = setTimeout(() => { - heartbeat(); - this._heartbeatTimer?.runPeriodically( - heartbeat, - constants.RelayHeartbeatInterval - ); - }, constants.RelayHeartbeatInitialDelay); - - this._heartbeatTimer = { - _intervalId: undefined, - runPeriodically: (fn, period): void => { - // this._heartbeatTimer cannot be null, it is being assigned. - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this._heartbeatTimer!._intervalId = setInterval(fn, period); - }, - cancel: (): void => { - clearTimeout(timeout); - clearInterval(this._heartbeatTimer?._intervalId as NodeJS.Timeout); - }, - }; - } - - /** - * Unmounts the gossipsub protocol and shuts down every connection - * @override - * @returns {void} - */ - stop(): void { - if (!this._heartbeatTimer) { - return; - } - - this._heartbeatTimer.cancel(); - this._heartbeatTimer = null; - } - - /** - * Maintains the mesh and fanout maps in gossipsub. - * - * @returns {void} - */ - _heartbeat(): void { - const { D, Dlo, Dhi, Dscore, Dout } = this.gossipsub._options; - this.gossipsub.heartbeatTicks++; - - // cache scores through the heartbeat - const scores = new Map(); - const getScore = (id: string): number => { - let s = scores.get(id); - if (s === undefined) { - s = this.gossipsub.score.score(id); - scores.set(id, s); - } - return s; - }; - - // peer id => topic[] - const toGraft = new Map(); - // peer id => topic[] - const toPrune = new Map(); - // peer id => don't px - const noPX = new Map(); - - // clean up expired backoffs - this.gossipsub._clearBackoff(); - - // clean up peerhave/iasked counters - this.gossipsub.peerhave.clear(); - this.gossipsub.iasked.clear(); - - // apply IWANT request penalties - this.gossipsub._applyIwantPenalties(); - - // ensure direct peers are connected - this.gossipsub._directConnect(); - - // maintain the mesh for topics we have joined - this.gossipsub.mesh.forEach((peers, topic) => { - // prune/graft helper functions (defined per topic) - const prunePeer = (id: string): void => { - this.gossipsub.log( - "HEARTBEAT: Remove mesh link to %s in %s", - id, - topic - ); - // update peer score - this.gossipsub.score.prune(id, topic); - // add prune backoff record - this.gossipsub._addBackoff(id, topic); - // remove peer from mesh - peers.delete(id); - // add to toPrune - const topics = toPrune.get(id); - if (!topics) { - toPrune.set(id, [topic]); - } else { - topics.push(topic); - } - }; - const graftPeer = (id: string): void => { - this.gossipsub.log("HEARTBEAT: Add mesh link to %s in %s", id, topic); - // update peer score - this.gossipsub.score.graft(id, topic); - // add peer to mesh - peers.add(id); - // add to toGraft - const topics = toGraft.get(id); - if (!topics) { - toGraft.set(id, [topic]); - } else { - topics.push(topic); - } - }; - - // drop all peers with negative score, without PX - peers.forEach((id) => { - const score = getScore(id); - if (score < 0) { - this.gossipsub.log( - "HEARTBEAT: Prune peer %s with negative score: score=%d, topic=%s", - id, - score, - topic - ); - prunePeer(id); - noPX.set(id, true); - } - }); - - // do we have enough peers? - if (peers.size < Dlo) { - const backoff = this.gossipsub.backoff.get(topic); - const ineed = D - peers.size; - const peersSet = getRelayPeers( - this.gossipsub, - topic, - ineed, - (id: string) => { - // filter out mesh peers, direct peers, peers we are backing off, peers with negative score - return ( - !peers.has(id) && - !this.gossipsub.direct.has(id) && - (!backoff || !backoff.has(id)) && - getScore(id) >= 0 - ); - } - ); - - peersSet.forEach(graftPeer); - } - - // do we have to many peers? - if (peers.size > Dhi) { - let peersArray = Array.from(peers); - // sort by score - peersArray.sort((a, b) => getScore(b) - getScore(a)); - // We keep the first D_score peers by score and the remaining up to D randomly - // under the constraint that we keep D_out peers in the mesh (if we have that many) - peersArray = peersArray - .slice(0, Dscore) - .concat(shuffle(peersArray.slice(Dscore))); - - // count the outbound peers we are keeping - let outbound = 0; - peersArray.slice(0, D).forEach((p) => { - if (this.gossipsub.outbound.get(p)) { - outbound++; - } - }); - - // if it's less than D_out, bubble up some outbound peers from the random selection - if (outbound < Dout) { - const rotate = (i: number): void => { - // rotate the peersArray to the right and put the ith peer in the front - const p = peersArray[i]; - for (let j = i; j > 0; j--) { - peersArray[j] = peersArray[j - 1]; - } - peersArray[0] = p; - }; - - // first bubble up all outbound peers already in the selection to the front - if (outbound > 0) { - let ihave = outbound; - for (let i = 1; i < D && ihave > 0; i++) { - if (this.gossipsub.outbound.get(peersArray[i])) { - rotate(i); - ihave--; - } - } - } - - // now bubble up enough outbound peers outside the selection to the front - let ineed = D - outbound; - for (let i = D; i < peersArray.length && ineed > 0; i++) { - if (this.gossipsub.outbound.get(peersArray[i])) { - rotate(i); - ineed--; - } - } - } - - // prune the excess peers - peersArray.slice(D).forEach(prunePeer); - } - - // do we have enough outbound peers? - if (peers.size >= Dlo) { - // count the outbound peers we have - let outbound = 0; - peers.forEach((p) => { - if (this.gossipsub.outbound.get(p)) { - outbound++; - } - }); - - // if it's less than D_out, select some peers with outbound connections and graft them - if (outbound < Dout) { - const ineed = Dout - outbound; - const backoff = this.gossipsub.backoff.get(topic); - getRelayPeers(this.gossipsub, topic, ineed, (id: string): boolean => { - // filter our current mesh peers, direct peers, peers we are backing off, peers with negative score - return ( - !peers.has(id) && - !this.gossipsub.direct.has(id) && - (!backoff || !backoff.has(id)) && - getScore(id) >= 0 - ); - }).forEach(graftPeer); - } - } - - // should we try to improve the mesh with opportunistic grafting? - if ( - this.gossipsub.heartbeatTicks % - constants.RelayOpportunisticGraftTicks === - 0 && - peers.size > 1 - ) { - // Opportunistic grafting works as follows: we check the median score of peers in the - // mesh; if this score is below the opportunisticGraftThreshold, we select a few peers at - // random with score over the median. - // The intention is to (slowly) improve an under performing mesh by introducing good - // scoring peers that may have been gossiping at us. This allows us to get out of sticky - // situations where we are stuck with poor peers and also recover from churn of good peers. - - // now compute the median peer score in the mesh - const peersList = Array.from(peers).sort( - (a, b) => getScore(a) - getScore(b) - ); - const medianIndex = Math.floor(peers.size / 2); - const medianScore = getScore(peersList[medianIndex]); - - // if the median score is below the threshold, select a better peer (if any) and GRAFT - if ( - medianScore < - this.gossipsub._options.scoreThresholds.opportunisticGraftThreshold - ) { - const backoff = this.gossipsub.backoff.get(topic); - const peersToGraft = getRelayPeers( - this.gossipsub, - topic, - constants.RelayOpportunisticGraftPeers, - (id: string): boolean => { - // filter out current mesh peers, direct peers, peers we are backing off, peers below or at threshold - return ( - peers.has(id) && - !this.gossipsub.direct.has(id) && - (!backoff || !backoff.has(id)) && - getScore(id) > medianScore - ); - } - ); - peersToGraft.forEach((id: string) => { - this.gossipsub.log( - "HEARTBEAT: Opportunistically graft peer %s on topic %s", - id, - topic - ); - graftPeer(id); - }); - } - } - - // 2nd arg are mesh peers excluded from gossip. We have already pushed - // messages to them, so its redundant to gossip IHAVEs. - this.gossipsub._emitGossip(topic, peers); - }); - - // expire fanout for topics we haven't published to in a while - const now = this.gossipsub._now(); - this.gossipsub.lastpub.forEach((lastpub, topic) => { - if (lastpub + constants.RelayFanoutTTL < now) { - this.gossipsub.fanout.delete(topic); - this.gossipsub.lastpub.delete(topic); - } - }); - - // maintain our fanout for topics we are publishing but we have not joined - this.gossipsub.fanout.forEach((fanoutPeers, topic) => { - // checks whether our peers are still in the topic and have a score above the publish threshold - const topicPeers = this.gossipsub.topics.get(topic); - fanoutPeers.forEach((id) => { - if ( - !topicPeers?.has(id) || - getScore(id) < - this.gossipsub._options.scoreThresholds.publishThreshold - ) { - fanoutPeers.delete(id); - } - }); - - // do we need more peers? - if (fanoutPeers.size < D) { - const ineed = D - fanoutPeers.size; - const peersSet = getRelayPeers( - this.gossipsub, - topic, - ineed, - (id: string): boolean => { - // filter out existing fanout peers, direct peers, and peers with score above the publish threshold - return ( - !fanoutPeers.has(id) && - !this.gossipsub.direct.has(id) && - getScore(id) >= - this.gossipsub._options.scoreThresholds.publishThreshold - ); - } - ); - peersSet.forEach((id: string) => { - fanoutPeers.add(id); - }); - } - - // 2nd arg are fanout peers excluded from gossip. - // We have already pushed messages to them, so its redundant to gossip IHAVEs - this.gossipsub._emitGossip(topic, fanoutPeers); - }); - - // send coalesced GRAFT/PRUNE messages (will piggyback gossip) - this.gossipsub._sendGraftPrune(toGraft, toPrune, noPX); - - // flush pending gossip that wasn't piggybacked above - this.gossipsub._flush(); - - // advance the message history window - this.gossipsub.messageCache.shift(); - - this.gossipsub.emit("gossipsub:heartbeat"); - } -} From 081f62b07bf00ce0d6b3c9f81f3d04f85d9f9132 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Tue, 21 Jun 2022 13:25:55 +1000 Subject: [PATCH 04/68] Upgrade libp2p-noise --- package-lock.json | 522 +++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 314 insertions(+), 210 deletions(-) diff --git a/package-lock.json b/package-lock.json index d789cc754e..c71d656e7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT OR Apache-2.0", "dependencies": { "@chainsafe/libp2p-gossipsub": "^2.0.0", - "@chainsafe/libp2p-noise": "^5.0.0", + "@chainsafe/libp2p-noise": "^7.0.0", "@ethersproject/rlp": "^5.5.0", "@libp2p/interface-peer-id": "^1.0.2", "@libp2p/interface-peer-store": "^1.0.0", @@ -787,26 +787,99 @@ "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" }, "node_modules/@chainsafe/libp2p-noise": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-5.0.3.tgz", - "integrity": "sha512-IT7q9JaEjv4aU3zO8zeomWyw79rLo8hGcmnyWOE1P/dVIT+jqrF08R3rVXonujBbmi6SSgZbB6NModqW+Oa2jw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-7.0.0.tgz", + "integrity": "sha512-oPlEqkm0W4EdT0EHtQDvbyKMO2F2HOF8wOnN6zcOJ0PTGHzR9n1xf2eauhiWmRUuXhSA9vBvMnfcQkNFrs2wzQ==", "dependencies": { + "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-connection-encrypter": "^1.0.2", + "@libp2p/interface-keys": "^1.0.2", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/logger": "^2.0.0", + "@libp2p/peer-collections": "^1.0.0", + "@libp2p/peer-id": "^1.1.8", "@stablelib/chacha20poly1305": "^1.0.1", "@stablelib/hkdf": "^1.0.1", "@stablelib/sha256": "^1.0.1", "@stablelib/x25519": "^1.0.1", - "bl": "^5.0.0", - "debug": "^4.3.1", - "it-buffer": "^0.1.3", - "it-length-prefixed": "^5.0.3", - "it-pair": "^1.0.0", - "it-pb-rpc": "^0.2.0", - "it-pipe": "^1.1.0", - "peer-id": "^0.16.0", - "protobufjs": "^6.11.2", + "it-length-prefixed": "^7.0.1", + "it-pair": "^2.0.2", + "it-pb-stream": "^1.0.2", + "it-pipe": "^2.0.3", + "protons-runtime": "^1.0.3", + "uint8arraylist": "^1.4.0", "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, + "node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", + "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", + "dependencies": { + "@libp2p/interface-keys": "^1.0.2", + "@noble/ed25519": "^1.6.0", + "@noble/secp256k1": "^1.5.4", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "multiformats": "^9.4.5", + "node-forge": "^1.1.0", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.2", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@chainsafe/libp2p-noise/node_modules/it-length-prefixed": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", + "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", + "dependencies": { + "err-code": "^3.0.1", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@chainsafe/libp2p-noise/node_modules/it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "dependencies": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/@chainsafe/libp2p-noise/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, "node_modules/@cspell/cspell-bundled-dicts": { "version": "5.14.0", "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-5.14.0.tgz", @@ -1519,6 +1592,19 @@ "npm": ">=7.0.0" } }, + "node_modules/@libp2p/interface-connection-encrypter": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection-encrypter/-/interface-connection-encrypter-1.0.2.tgz", + "integrity": "sha512-Ed5o8eP8H3KMKDgsEaId+R7BdGGFCpjT5Ng2PYtFS+7kECZ+7fYL+nYDMP7h5cf65GJTQNrelGQwyeXQqx8Z9A==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0", + "it-stream-types": "^1.0.4" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@libp2p/interface-connection-manager": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@libp2p/interface-connection-manager/-/interface-connection-manager-1.0.2.tgz", @@ -1860,22 +1946,6 @@ "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" }, - "node_modules/@libp2p/multistream-select/node_modules/it-handshake": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-3.0.1.tgz", - "integrity": "sha512-Rx9ESanlfnC0aMw2LtLJ9YNlCNgnZU7wOHPzPSZTUAjbdZx54kllGR5ndIuoJqF2EtNIsmTiWEncKTgwHNJSSg==", - "dependencies": { - "it-map": "^1.0.6", - "it-pushable": "^2.0.1", - "it-reader": "^5.0.0", - "it-stream-types": "^1.0.4", - "p-defer": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@libp2p/multistream-select/node_modules/it-length-prefixed": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", @@ -1906,15 +1976,6 @@ "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" }, - "node_modules/@libp2p/multistream-select/node_modules/it-reader": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-5.0.1.tgz", - "integrity": "sha512-Vj9TliHgCsIE21oqWDhrE1E5QALZw1n9QiaZg2EiWPFKSvCSm7lGDycy1OYs3LYhgvmTQDKJestlzVSHJ/YsJw==", - "dependencies": { - "it-stream-types": "^1.0.4", - "uint8arraylist": "^1.2.0" - } - }, "node_modules/@libp2p/multistream-select/node_modules/p-defer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", @@ -7883,15 +7944,6 @@ "resolved": "https://registry.npmjs.org/it-all/-/it-all-1.0.6.tgz", "integrity": "sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==" }, - "node_modules/it-buffer": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/it-buffer/-/it-buffer-0.1.3.tgz", - "integrity": "sha512-9a2/9SYVwG7bcn3tpRDR4bXbtuMLXnDK48KVC+GXiQg97ZOOdWz2nIITBsOQ19b+gj01Rw8RNwtiLDLI8P8oiQ==", - "dependencies": { - "bl": "^5.0.0", - "buffer": "^6.0.3" - } - }, "node_modules/it-concat": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/it-concat/-/it-concat-2.0.0.tgz", @@ -7930,13 +7982,35 @@ } }, "node_modules/it-handshake": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-2.0.0.tgz", - "integrity": "sha512-K4q+mz8aLlCK3vTjtgNdHC9c/JbuOATsfogarjMsLcBZC5vYfKbX3Gq3AWcCdjIsIrPqzTlhPKSxl64LJkrt2w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-3.0.1.tgz", + "integrity": "sha512-Rx9ESanlfnC0aMw2LtLJ9YNlCNgnZU7wOHPzPSZTUAjbdZx54kllGR5ndIuoJqF2EtNIsmTiWEncKTgwHNJSSg==", "dependencies": { - "it-pushable": "^1.4.0", - "it-reader": "^3.0.0", - "p-defer": "^3.0.0" + "it-map": "^1.0.6", + "it-pushable": "^2.0.1", + "it-reader": "^5.0.0", + "it-stream-types": "^1.0.4", + "p-defer": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-handshake/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "node_modules/it-handshake/node_modules/p-defer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/it-length-prefixed": { @@ -7963,20 +8037,53 @@ } }, "node_modules/it-pair": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-1.0.0.tgz", - "integrity": "sha512-9raOiDu5OAuDOahtMtapKQDrQTxBfzlzrNcB6o7JARHkt+7Bb1dMkW/TpYdAjBJE77KH3e2zGzwpGUP9tXbLww==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-2.0.2.tgz", + "integrity": "sha512-QGgUwGtzE4mI8yPZawL+9wq49SBmhQdjKW+ChKBm4PUwRNdkgSoyPlu280iNyS0JscBG3pvytJ8JNVPSEBQNjg==", "dependencies": { - "get-iterator": "^1.0.2" + "it-stream-types": "^1.0.3", + "p-defer": "^4.0.0" } }, - "node_modules/it-pb-rpc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/it-pb-rpc/-/it-pb-rpc-0.2.0.tgz", - "integrity": "sha512-Rojodsa6yxSTZDqVVF9HXKsISoHtlLNOL0P6b/7oCswiscbjCpt1IB78BxRDHpFL3tg8jFPMNDTP3v6ZjrMf9w==", + "node_modules/it-pair/node_modules/p-defer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/it-pb-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/it-pb-stream/-/it-pb-stream-1.0.2.tgz", + "integrity": "sha512-rPZKXtjcHXhvPprMdWjcCjMi4UaYIXZnBmFIJCW0f9rqZkyyjqSORyMpQoaP5+iDP7JaYiRzF4dyi51CSOhnbQ==", "dependencies": { - "it-handshake": "^2.0.0", - "it-length-prefixed": "^5.0.3" + "it-handshake": "^3.0.1", + "it-length-prefixed": "^7.0.0", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.3.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-pb-stream/node_modules/it-length-prefixed": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", + "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", + "dependencies": { + "err-code": "^3.0.1", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, "node_modules/it-pipe": { @@ -7993,11 +8100,12 @@ } }, "node_modules/it-reader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-3.0.0.tgz", - "integrity": "sha512-NxR40odATeaBmSefn6Xn43DplYvn2KtEKQzn4jrTRuPYXMky5M4e+KQ7aTJh0k0vkytLyeenGO1I1GXlGm4laQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-5.0.1.tgz", + "integrity": "sha512-Vj9TliHgCsIE21oqWDhrE1E5QALZw1n9QiaZg2EiWPFKSvCSm7lGDycy1OYs3LYhgvmTQDKJestlzVSHJ/YsJw==", "dependencies": { - "bl": "^5.0.0" + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0" } }, "node_modules/it-sort": { @@ -8559,22 +8667,6 @@ "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" }, - "node_modules/libp2p/node_modules/it-handshake": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-3.0.1.tgz", - "integrity": "sha512-Rx9ESanlfnC0aMw2LtLJ9YNlCNgnZU7wOHPzPSZTUAjbdZx54kllGR5ndIuoJqF2EtNIsmTiWEncKTgwHNJSSg==", - "dependencies": { - "it-map": "^1.0.6", - "it-pushable": "^2.0.1", - "it-reader": "^5.0.0", - "it-stream-types": "^1.0.4", - "p-defer": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/libp2p/node_modules/it-length-prefixed": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", @@ -8590,15 +8682,6 @@ "npm": ">=7.0.0" } }, - "node_modules/libp2p/node_modules/it-pair": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-2.0.2.tgz", - "integrity": "sha512-QGgUwGtzE4mI8yPZawL+9wq49SBmhQdjKW+ChKBm4PUwRNdkgSoyPlu280iNyS0JscBG3pvytJ8JNVPSEBQNjg==", - "dependencies": { - "it-stream-types": "^1.0.3", - "p-defer": "^4.0.0" - } - }, "node_modules/libp2p/node_modules/it-pipe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", @@ -8614,26 +8697,6 @@ "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" }, - "node_modules/libp2p/node_modules/it-reader": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-5.0.1.tgz", - "integrity": "sha512-Vj9TliHgCsIE21oqWDhrE1E5QALZw1n9QiaZg2EiWPFKSvCSm7lGDycy1OYs3LYhgvmTQDKJestlzVSHJ/YsJw==", - "dependencies": { - "it-stream-types": "^1.0.4", - "uint8arraylist": "^1.2.0" - } - }, - "node_modules/libp2p/node_modules/p-defer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", - "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lilconfig": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", @@ -14119,24 +14182,83 @@ } }, "@chainsafe/libp2p-noise": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-5.0.3.tgz", - "integrity": "sha512-IT7q9JaEjv4aU3zO8zeomWyw79rLo8hGcmnyWOE1P/dVIT+jqrF08R3rVXonujBbmi6SSgZbB6NModqW+Oa2jw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-7.0.0.tgz", + "integrity": "sha512-oPlEqkm0W4EdT0EHtQDvbyKMO2F2HOF8wOnN6zcOJ0PTGHzR9n1xf2eauhiWmRUuXhSA9vBvMnfcQkNFrs2wzQ==", "requires": { + "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-connection-encrypter": "^1.0.2", + "@libp2p/interface-keys": "^1.0.2", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/logger": "^2.0.0", + "@libp2p/peer-collections": "^1.0.0", + "@libp2p/peer-id": "^1.1.8", "@stablelib/chacha20poly1305": "^1.0.1", "@stablelib/hkdf": "^1.0.1", "@stablelib/sha256": "^1.0.1", "@stablelib/x25519": "^1.0.1", - "bl": "^5.0.0", - "debug": "^4.3.1", - "it-buffer": "^0.1.3", - "it-length-prefixed": "^5.0.3", - "it-pair": "^1.0.0", - "it-pb-rpc": "^0.2.0", - "it-pipe": "^1.1.0", - "peer-id": "^0.16.0", - "protobufjs": "^6.11.2", + "it-length-prefixed": "^7.0.1", + "it-pair": "^2.0.2", + "it-pb-stream": "^1.0.2", + "it-pipe": "^2.0.3", + "protons-runtime": "^1.0.3", + "uint8arraylist": "^1.4.0", "uint8arrays": "^3.0.0" + }, + "dependencies": { + "@libp2p/crypto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", + "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", + "requires": { + "@libp2p/interface-keys": "^1.0.2", + "@noble/ed25519": "^1.6.0", + "@noble/secp256k1": "^1.5.4", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "multiformats": "^9.4.5", + "node-forge": "^1.1.0", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + } + }, + "@libp2p/logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.2", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + } + }, + "it-length-prefixed": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", + "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", + "requires": { + "err-code": "^3.0.1", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0", + "varint": "^6.0.0" + } + }, + "it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "requires": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + } } }, "@cspell/cspell-bundled-dicts": { @@ -14738,6 +14860,15 @@ "it-stream-types": "^1.0.4" } }, + "@libp2p/interface-connection-encrypter": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection-encrypter/-/interface-connection-encrypter-1.0.2.tgz", + "integrity": "sha512-Ed5o8eP8H3KMKDgsEaId+R7BdGGFCpjT5Ng2PYtFS+7kECZ+7fYL+nYDMP7h5cf65GJTQNrelGQwyeXQqx8Z9A==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "it-stream-types": "^1.0.4" + } + }, "@libp2p/interface-connection-manager": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@libp2p/interface-connection-manager/-/interface-connection-manager-1.0.2.tgz", @@ -14999,18 +15130,6 @@ "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" }, - "it-handshake": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-3.0.1.tgz", - "integrity": "sha512-Rx9ESanlfnC0aMw2LtLJ9YNlCNgnZU7wOHPzPSZTUAjbdZx54kllGR5ndIuoJqF2EtNIsmTiWEncKTgwHNJSSg==", - "requires": { - "it-map": "^1.0.6", - "it-pushable": "^2.0.1", - "it-reader": "^5.0.0", - "it-stream-types": "^1.0.4", - "p-defer": "^4.0.0" - } - }, "it-length-prefixed": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", @@ -15037,15 +15156,6 @@ "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" }, - "it-reader": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-5.0.1.tgz", - "integrity": "sha512-Vj9TliHgCsIE21oqWDhrE1E5QALZw1n9QiaZg2EiWPFKSvCSm7lGDycy1OYs3LYhgvmTQDKJestlzVSHJ/YsJw==", - "requires": { - "it-stream-types": "^1.0.4", - "uint8arraylist": "^1.2.0" - } - }, "p-defer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", @@ -19586,15 +19696,6 @@ "resolved": "https://registry.npmjs.org/it-all/-/it-all-1.0.6.tgz", "integrity": "sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==" }, - "it-buffer": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/it-buffer/-/it-buffer-0.1.3.tgz", - "integrity": "sha512-9a2/9SYVwG7bcn3tpRDR4bXbtuMLXnDK48KVC+GXiQg97ZOOdWz2nIITBsOQ19b+gj01Rw8RNwtiLDLI8P8oiQ==", - "requires": { - "bl": "^5.0.0", - "buffer": "^6.0.3" - } - }, "it-concat": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/it-concat/-/it-concat-2.0.0.tgz", @@ -19633,13 +19734,27 @@ } }, "it-handshake": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-2.0.0.tgz", - "integrity": "sha512-K4q+mz8aLlCK3vTjtgNdHC9c/JbuOATsfogarjMsLcBZC5vYfKbX3Gq3AWcCdjIsIrPqzTlhPKSxl64LJkrt2w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-3.0.1.tgz", + "integrity": "sha512-Rx9ESanlfnC0aMw2LtLJ9YNlCNgnZU7wOHPzPSZTUAjbdZx54kllGR5ndIuoJqF2EtNIsmTiWEncKTgwHNJSSg==", "requires": { - "it-pushable": "^1.4.0", - "it-reader": "^3.0.0", - "p-defer": "^3.0.0" + "it-map": "^1.0.6", + "it-pushable": "^2.0.1", + "it-reader": "^5.0.0", + "it-stream-types": "^1.0.4", + "p-defer": "^4.0.0" + }, + "dependencies": { + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "p-defer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==" + } } }, "it-length-prefixed": { @@ -19666,20 +19781,43 @@ } }, "it-pair": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-1.0.0.tgz", - "integrity": "sha512-9raOiDu5OAuDOahtMtapKQDrQTxBfzlzrNcB6o7JARHkt+7Bb1dMkW/TpYdAjBJE77KH3e2zGzwpGUP9tXbLww==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-2.0.2.tgz", + "integrity": "sha512-QGgUwGtzE4mI8yPZawL+9wq49SBmhQdjKW+ChKBm4PUwRNdkgSoyPlu280iNyS0JscBG3pvytJ8JNVPSEBQNjg==", "requires": { - "get-iterator": "^1.0.2" + "it-stream-types": "^1.0.3", + "p-defer": "^4.0.0" + }, + "dependencies": { + "p-defer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==" + } } }, - "it-pb-rpc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/it-pb-rpc/-/it-pb-rpc-0.2.0.tgz", - "integrity": "sha512-Rojodsa6yxSTZDqVVF9HXKsISoHtlLNOL0P6b/7oCswiscbjCpt1IB78BxRDHpFL3tg8jFPMNDTP3v6ZjrMf9w==", + "it-pb-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/it-pb-stream/-/it-pb-stream-1.0.2.tgz", + "integrity": "sha512-rPZKXtjcHXhvPprMdWjcCjMi4UaYIXZnBmFIJCW0f9rqZkyyjqSORyMpQoaP5+iDP7JaYiRzF4dyi51CSOhnbQ==", "requires": { - "it-handshake": "^2.0.0", - "it-length-prefixed": "^5.0.3" + "it-handshake": "^3.0.1", + "it-length-prefixed": "^7.0.0", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.3.0" + }, + "dependencies": { + "it-length-prefixed": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", + "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", + "requires": { + "err-code": "^3.0.1", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0", + "varint": "^6.0.0" + } + } } }, "it-pipe": { @@ -19696,11 +19834,12 @@ } }, "it-reader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-3.0.0.tgz", - "integrity": "sha512-NxR40odATeaBmSefn6Xn43DplYvn2KtEKQzn4jrTRuPYXMky5M4e+KQ7aTJh0k0vkytLyeenGO1I1GXlGm4laQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-5.0.1.tgz", + "integrity": "sha512-Vj9TliHgCsIE21oqWDhrE1E5QALZw1n9QiaZg2EiWPFKSvCSm7lGDycy1OYs3LYhgvmTQDKJestlzVSHJ/YsJw==", "requires": { - "bl": "^5.0.0" + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0" } }, "it-sort": { @@ -20103,18 +20242,6 @@ "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" }, - "it-handshake": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-3.0.1.tgz", - "integrity": "sha512-Rx9ESanlfnC0aMw2LtLJ9YNlCNgnZU7wOHPzPSZTUAjbdZx54kllGR5ndIuoJqF2EtNIsmTiWEncKTgwHNJSSg==", - "requires": { - "it-map": "^1.0.6", - "it-pushable": "^2.0.1", - "it-reader": "^5.0.0", - "it-stream-types": "^1.0.4", - "p-defer": "^4.0.0" - } - }, "it-length-prefixed": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", @@ -20126,15 +20253,6 @@ "varint": "^6.0.0" } }, - "it-pair": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-2.0.2.tgz", - "integrity": "sha512-QGgUwGtzE4mI8yPZawL+9wq49SBmhQdjKW+ChKBm4PUwRNdkgSoyPlu280iNyS0JscBG3pvytJ8JNVPSEBQNjg==", - "requires": { - "it-stream-types": "^1.0.3", - "p-defer": "^4.0.0" - } - }, "it-pipe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", @@ -20149,20 +20267,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - }, - "it-reader": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-5.0.1.tgz", - "integrity": "sha512-Vj9TliHgCsIE21oqWDhrE1E5QALZw1n9QiaZg2EiWPFKSvCSm7lGDycy1OYs3LYhgvmTQDKJestlzVSHJ/YsJw==", - "requires": { - "it-stream-types": "^1.0.4", - "uint8arraylist": "^1.2.0" - } - }, - "p-defer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", - "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==" } } }, diff --git a/package.json b/package.json index fa3e9cb2d4..1e6f362e97 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ }, "dependencies": { "@chainsafe/libp2p-gossipsub": "^2.0.0", - "@chainsafe/libp2p-noise": "^5.0.0", + "@chainsafe/libp2p-noise": "^7.0.0", "@ethersproject/rlp": "^5.5.0", "@libp2p/interface-peer-id": "^1.0.2", "@libp2p/interface-peer-store": "^1.0.0", From 4cf197e54d2b327601aa6a015f63a337d40dcc38 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 22 Jun 2022 15:12:14 +1000 Subject: [PATCH 05/68] Implement libp2p bootstrap interface --- .eslintrc.json | 5 +- package-lock.json | 1143 +++++++++++++++++--------------- package.json | 7 +- src/lib/discovery/bootstrap.ts | 175 ++++- src/lib/waku.ts | 45 +- 5 files changed, 797 insertions(+), 578 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 47e4113505..747e539c62 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -14,7 +14,10 @@ ], "globals": { "BigInt": true, "console": true, "WebAssembly": true }, "rules": { - "@typescript-eslint/explicit-function-return-type": ["error"], + "@typescript-eslint/explicit-function-return-type": [ + "error", + { "allowExpressions": true } + ], "@typescript-eslint/explicit-module-boundary-types": "off", "eslint-comments/disable-enable-pair": [ "error", diff --git a/package-lock.json b/package-lock.json index c71d656e7e..6e0e70dbda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,10 +12,14 @@ "@chainsafe/libp2p-gossipsub": "^2.0.0", "@chainsafe/libp2p-noise": "^7.0.0", "@ethersproject/rlp": "^5.5.0", + "@libp2p/interface-peer-discovery": "^1.0.0", "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-peer-info": "^1.0.1", "@libp2p/interface-peer-store": "^1.0.0", "@libp2p/interfaces": "^3.0.2", + "@libp2p/mplex": "^3.0.0", "@libp2p/peer-id": "^1.1.10", + "@libp2p/websockets": "^3.0.0", "@multiformats/multiaddr": "^10.2.0", "@noble/secp256k1": "^1.3.4", "debug": "^4.3.4", @@ -26,10 +30,7 @@ "it-pipe": "^1.1.0", "js-sha3": "^0.8.0", "libp2p": "^0.37.3", - "libp2p-bootstrap": "^0.14.0", "libp2p-crypto": "^0.21.2", - "libp2p-mplex": "^0.10.4", - "libp2p-websockets": "^0.16.1", "multiformats": "^9.6.5", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", @@ -1814,6 +1815,35 @@ "npm": ">=7.0.0" } }, + "node_modules/@libp2p/interface-stream-muxer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface-stream-muxer/-/interface-stream-muxer-1.1.0.tgz", + "integrity": "sha512-RvljPB4VIUwewAFyI23ldjmnjeh6b3grxjyqSFZvghtDrVgJqpEIHlm1F1pT2rdGG6vC0NIzSJGQ5p/rVPfUvA==", + "dependencies": { + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interfaces": "^3.0.0", + "it-stream-types": "^1.0.4" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/interface-stream-muxer/node_modules/@libp2p/interface-connection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", + "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@libp2p/interface-transport": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@libp2p/interface-transport/-/interface-transport-1.0.2.tgz", @@ -1890,6 +1920,147 @@ "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" }, + "node_modules/@libp2p/mplex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-3.0.0.tgz", + "integrity": "sha512-vF8gUlGQfs6j2BmRdaKbKoyiB6ye9dP5rUO4Q2Ihy7wa3IyIJg4mYE8HpN7wr7LaFjspyS/ZgDXvtaJA1qSvUg==", + "dependencies": { + "@libp2p/components": "^2.0.0", + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-stream-muxer": "^1.0.1", + "@libp2p/logger": "^2.0.0", + "@libp2p/tracked-map": "^1.0.5", + "abortable-iterator": "^4.0.2", + "any-signal": "^3.0.0", + "err-code": "^3.0.1", + "it-pipe": "^2.0.3", + "it-pushable": "^3.0.0", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.4.0", + "uint8arrays": "^3.0.0", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/mplex/node_modules/@libp2p/components": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/components/-/components-2.0.1.tgz", + "integrity": "sha512-3+HgBnu7MbSBcAODtMRxSbdZ54vNB2TGxmPxeNhDBFb+jTw4pUwCeXUcTkSNzsY8cME0MhsEzQ7bwpdXa9xPeQ==", + "dependencies": { + "@libp2p/interface-address-manager": "^1.0.1", + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-connection-manager": "^1.0.0", + "@libp2p/interface-content-routing": "^1.0.0", + "@libp2p/interface-dht": "^1.0.0", + "@libp2p/interface-metrics": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-peer-routing": "^1.0.0", + "@libp2p/interface-peer-store": "^1.0.0", + "@libp2p/interface-pubsub": "^1.0.0", + "@libp2p/interface-registrar": "^2.0.0", + "@libp2p/interface-transport": "^1.0.0", + "@libp2p/interfaces": "^3.0.2", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/mplex/node_modules/@libp2p/interface-connection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", + "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/mplex/node_modules/@libp2p/interface-metrics": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface-metrics/-/interface-metrics-2.0.0.tgz", + "integrity": "sha512-OUMspbgamrPgTQWA9zjyrcVQtXpWegSzPllDVwySBefv14l6AhpgicvVI8s+FPbzdKSj6AanlYDa7V8Ui/14CQ==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0", + "it-stream-types": "^1.0.4" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/mplex/node_modules/@libp2p/interface-registrar": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-registrar/-/interface-registrar-2.0.2.tgz", + "integrity": "sha512-HqDQua9J6T9KzrdYA9EhYsI0oc4CeSR1sfi0qdk073/IB3SlP+XtD7RzzVuGeyXjssqZtqf3RwjV7C+zOlHYlw==", + "dependencies": { + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/mplex/node_modules/@libp2p/logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.2", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/mplex/node_modules/abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "dependencies": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/@libp2p/mplex/node_modules/get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, + "node_modules/@libp2p/mplex/node_modules/it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "dependencies": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/@libp2p/mplex/node_modules/it-pipe/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + }, + "node_modules/@libp2p/mplex/node_modules/it-pushable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", + "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" + }, "node_modules/@libp2p/multistream-select": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-1.0.6.tgz", @@ -2469,6 +2640,159 @@ } } }, + "node_modules/@libp2p/websockets": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-3.0.1.tgz", + "integrity": "sha512-H9xyxvZ0+0SACIGY6Ppa19K3h567set8tfSnxy/fjzUAJRM6ZwYMROh5N0dMLjyl/vjqTNh5iyJmnO3upddGGA==", + "dependencies": { + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-transport": "^1.0.0", + "@libp2p/interfaces": "^3.0.1", + "@libp2p/logger": "^2.0.0", + "@libp2p/utils": "^3.0.0", + "@multiformats/mafmt": "^11.0.2", + "@multiformats/multiaddr": "^10.1.5", + "@multiformats/multiaddr-to-uri": "^9.0.0", + "abortable-iterator": "^4.0.2", + "err-code": "^3.0.1", + "it-ws": "^5.0.0", + "p-defer": "^4.0.0", + "p-timeout": "^5.0.2", + "wherearewe": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/websockets/node_modules/@libp2p/interface-connection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", + "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/websockets/node_modules/@libp2p/logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.2", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/websockets/node_modules/@libp2p/utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-3.0.0.tgz", + "integrity": "sha512-ik2IjnoO+73/5b3gSfXyMS3+eQAhNpzhzvvqQNOI8gcU6jcLvliStldwt1LKiMe9M3ZUOy6LHeB/3vF1dO9CSA==", + "dependencies": { + "@achingbrain/ip-address": "^8.1.0", + "@libp2p/interface-connection": "^2.1.0", + "@libp2p/interface-peer-store": "^1.0.0", + "@libp2p/logger": "^2.0.0", + "@multiformats/multiaddr": "^10.1.1", + "abortable-iterator": "^4.0.2", + "err-code": "^3.0.1", + "is-loopback-addr": "^2.0.1", + "it-stream-types": "^1.0.4", + "private-ip": "^2.1.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/websockets/node_modules/abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "dependencies": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "node_modules/@libp2p/websockets/node_modules/get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, + "node_modules/@libp2p/websockets/node_modules/is-loopback-addr": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", + "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" + }, + "node_modules/@libp2p/websockets/node_modules/it-ws": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/it-ws/-/it-ws-5.0.2.tgz", + "integrity": "sha512-beq/nBWuKm2Ds4nYSfPuZRF0USVZJhsIvuUH3kRE5QdaCzivDK7zyeewDgsNBSPr6hPgF5dyPP5NXcXhUcb9QQ==", + "dependencies": { + "event-iterator": "^2.0.0", + "iso-url": "^1.1.2", + "it-stream-types": "^1.0.2", + "uint8arrays": "^3.0.0", + "ws": "^8.4.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/websockets/node_modules/p-defer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@libp2p/websockets/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@libp2p/websockets/node_modules/ws": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", + "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/@multiformats/mafmt": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-11.0.2.tgz", @@ -2494,6 +2818,14 @@ "npm": ">=7.0.0" } }, + "node_modules/@multiformats/multiaddr-to-uri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-9.0.1.tgz", + "integrity": "sha512-kSyHZ2lKjoEzHu/TM4ZVwFj4AWV1B9qFBFJjYb/fK1NqrnrNb/M3uhoyckJvP7WZvpDsnEc7fUCpmPipDY6LMw==", + "dependencies": { + "@multiformats/multiaddr": "^10.1.1" + } + }, "node_modules/@multiformats/multiaddr/node_modules/dns-over-http-resolver": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-2.1.0.tgz", @@ -3065,11 +3397,6 @@ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, "node_modules/@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", @@ -3705,14 +4032,6 @@ "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, - "node_modules/abortable-iterator": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-3.0.2.tgz", - "integrity": "sha512-qVP8HFfTpUQI2F+f1tpTriKDIZ4XrmwCrBCrQeRKO7DKWF3kgoT6NXiNDv2krrGcHxPwmI63eGQiec81sEaWIw==", - "dependencies": { - "get-iterator": "^1.0.2" - } - }, "node_modules/accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -4503,11 +4822,6 @@ "integrity": "sha512-CLOGsVDrVamzv8sXJGaILUVI6dsuAkouJP/n6t+OxLPeeA4DDby7zn9SB6EUpa1H7oIKoE+rMmkW80zYsFfUjA==", "dev": true }, - "node_modules/class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -5387,16 +5701,6 @@ "node": ">=8" } }, - "node_modules/dns-over-http-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-1.2.3.tgz", - "integrity": "sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA==", - "dependencies": { - "debug": "^4.3.1", - "native-fetch": "^3.0.0", - "receptacle": "^1.3.2" - } - }, "node_modules/dns-query": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/dns-query/-/dns-query-0.11.1.tgz", @@ -5472,17 +5776,6 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, - "node_modules/electron-fetch": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.7.4.tgz", - "integrity": "sha512-+fBLXEy4CJWQ5bz8dyaeSG1hD6JJ15kBZyj3eh24pIVrd3hLM47H/umffrdQfS6GZ0falF0g9JT9f3Rs6AVUhw==", - "dependencies": { - "encoding": "^0.1.13" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/electron-to-chromium": { "version": "1.3.810", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.810.tgz", @@ -5509,14 +5802,6 @@ "node": ">= 0.8" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -6756,11 +7041,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-iterator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz", - "integrity": "sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==" - }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -7221,6 +7501,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -7382,23 +7663,6 @@ "node": ">= 0.10" } }, - "node_modules/ip-address": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-8.1.0.tgz", - "integrity": "sha512-Wz91gZKpNKoXtqvY8ScarKYwhXoK4r/b5QuT+uywe/azv0/nUCo7Bh0IRRI7F9DHR06kJNWtzMGLIbXavngbKA==", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "1.1.2" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ip-address/node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" - }, "node_modules/ip-regex": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", @@ -7415,27 +7679,6 @@ "node": ">= 10" } }, - "node_modules/ipfs-utils": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-9.0.5.tgz", - "integrity": "sha512-GXWfsq/nKtwkcTI4+KGc4CU9EFXjtkWaGcFAsnm177kAhA0Fnn8aWNRaF/C0xFraUIl1wTAUTWkaGKigVyfsTw==", - "dependencies": { - "any-signal": "^3.0.0", - "buffer": "^6.0.1", - "electron-fetch": "^1.7.2", - "err-code": "^3.0.1", - "is-electron": "^2.2.0", - "iso-url": "^1.1.5", - "it-glob": "^1.0.1", - "it-to-stream": "^1.0.0", - "merge-options": "^3.0.4", - "nanoid": "^3.1.20", - "native-fetch": "^3.0.0", - "node-fetch": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz", - "react-native-fetch-api": "^2.0.0", - "stream-to-it": "^0.2.2" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -7572,11 +7815,6 @@ "node": ">=8" } }, - "node_modules/is-loopback-addr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-1.0.1.tgz", - "integrity": "sha512-DhWU/kqY7X2F6KrrVTu7mHlbd2Pbo4D1YkAzasBMjQs6lJAoefxaA6m6CpSX0K6pjt9D0b9PNFI5zduy/vzOYw==" - }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -7972,15 +8210,6 @@ "resolved": "https://registry.npmjs.org/it-foreach/-/it-foreach-0.1.1.tgz", "integrity": "sha512-ZLxL651N5w5SL/EIIcrXELgYrrkuEKj/TErG93C4lr6lNZziKsf338ljSG85PjQfu7Frg/1wESl5pLrPSFXI9g==" }, - "node_modules/it-glob": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-1.0.2.tgz", - "integrity": "sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q==", - "dependencies": { - "@types/minimatch": "^3.0.4", - "minimatch": "^3.0.4" - } - }, "node_modules/it-handshake": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-3.0.1.tgz", @@ -8126,30 +8355,6 @@ "resolved": "https://registry.npmjs.org/it-take/-/it-take-1.0.2.tgz", "integrity": "sha512-u7I6qhhxH7pSevcYNaMECtkvZW365ARqAIt9K+xjdK1B2WUDEjQSfETkOCT8bxFq/59LqrN3cMLUtTgmDBaygw==" }, - "node_modules/it-to-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/it-to-stream/-/it-to-stream-1.0.0.tgz", - "integrity": "sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==", - "dependencies": { - "buffer": "^6.0.3", - "fast-fifo": "^1.0.0", - "get-iterator": "^1.0.2", - "p-defer": "^3.0.0", - "p-fifo": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "node_modules/it-ws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/it-ws/-/it-ws-4.0.0.tgz", - "integrity": "sha512-XmTzpMkevc6rUboy73r0CCNhciMmL/Yxir9O6FujRwdrjysztqLBQ1Xkr4CpY2m7BVSCObKotaCWJeZ29lOXRA==", - "dependencies": { - "buffer": "^6.0.3", - "event-iterator": "^2.0.0", - "iso-url": "^1.1.2", - "ws": "^7.3.1" - } - }, "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -8557,20 +8762,6 @@ "npm": ">=7.0.0" } }, - "node_modules/libp2p-bootstrap": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/libp2p-bootstrap/-/libp2p-bootstrap-0.14.0.tgz", - "integrity": "sha512-j3slZo5nOdA8wVlav8dRZeAXutZ7psz/f10DLoIEX/EFif7uU5oZfIYvjbVGo3ZDl+VQLo2tR0m1lV0westQ3g==", - "dependencies": { - "debug": "^4.3.1", - "mafmt": "^10.0.0", - "multiaddr": "^10.0.0", - "peer-id": "^0.16.0" - }, - "engines": { - "node": ">=15.0.0" - } - }, "node_modules/libp2p-crypto": { "version": "0.21.2", "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.21.2.tgz", @@ -8589,53 +8780,6 @@ "node": ">=12.0.0" } }, - "node_modules/libp2p-mplex": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/libp2p-mplex/-/libp2p-mplex-0.10.7.tgz", - "integrity": "sha512-21VV0DZWuOsHgitWy1GZD1M/kki3a/hVoAJ5QC48p01JNSK5W8gxRiZtq7cCGJ/xNpbQxvMlMtS5eq8CFRlysg==", - "dependencies": { - "abortable-iterator": "^3.0.2", - "bl": "^5.0.0", - "debug": "^4.3.1", - "err-code": "^3.0.1", - "it-pipe": "^1.1.0", - "it-pushable": "^1.4.1", - "varint": "^6.0.0" - } - }, - "node_modules/libp2p-utils": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/libp2p-utils/-/libp2p-utils-0.4.1.tgz", - "integrity": "sha512-kq/US2unamiyY+YwP47dO1uqpAdcbdYI2Fzi9JIEhjfPBaD1MR/uyQ/YP7ABthl3EaxAjIQYd1TVp85d6QKAtQ==", - "dependencies": { - "abortable-iterator": "^3.0.0", - "debug": "^4.3.0", - "err-code": "^3.0.1", - "ip-address": "^8.0.0", - "is-loopback-addr": "^1.0.0", - "multiaddr": "^10.0.0", - "private-ip": "^2.1.1" - } - }, - "node_modules/libp2p-websockets": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/libp2p-websockets/-/libp2p-websockets-0.16.2.tgz", - "integrity": "sha512-QGfo8jX1Ks16yi8C67CCyMW7k9cfCYiQ0lzKVJBud0fV3ymbMO2L8gzU6iXUUZTHILo8ka26zKhwQ4lmUMI+nA==", - "dependencies": { - "abortable-iterator": "^3.0.0", - "class-is": "^1.1.0", - "debug": "^4.3.1", - "err-code": "^3.0.1", - "ipfs-utils": "^9.0.1", - "it-ws": "^4.0.0", - "libp2p-utils": "^0.4.0", - "mafmt": "^10.0.0", - "multiaddr": "^10.0.0", - "multiaddr-to-uri": "^8.0.0", - "p-defer": "^3.0.0", - "p-timeout": "^4.1.0" - } - }, "node_modules/libp2p/node_modules/@libp2p/interfaces": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", @@ -9113,14 +9257,6 @@ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", "dev": true }, - "node_modules/mafmt": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-10.0.0.tgz", - "integrity": "sha512-K1bziJOXcnepfztu+2Xy9FLKVLaFMDuspmiyJIYRxnO0WOxFSV7XKSdMxMrVZxcvg1+YjlTIvSGTImUHU2k4Aw==", - "dependencies": { - "multiaddr": "^10.0.0" - } - }, "node_modules/magic-string": { "version": "0.25.9", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", @@ -9626,27 +9762,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/multiaddr": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-10.0.1.tgz", - "integrity": "sha512-G5upNcGzEGuTHkzxezPrrD6CaIHR9uo+7MwqhNVcXTs33IInon4y7nMiGxl2CY5hG7chvYQUQhz5V52/Qe3cbg==", - "dependencies": { - "dns-over-http-resolver": "^1.2.3", - "err-code": "^3.0.1", - "is-ip": "^3.1.0", - "multiformats": "^9.4.5", - "uint8arrays": "^3.0.0", - "varint": "^6.0.0" - } - }, - "node_modules/multiaddr-to-uri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/multiaddr-to-uri/-/multiaddr-to-uri-8.0.0.tgz", - "integrity": "sha512-dq4p/vsOOUdVEd1J1gl+R2GFrXJQH8yjLtz4hodqdVbieg39LvBOdMQRdQnfbg5LSM/q1BYNVf5CBbwZFFqBgA==", - "dependencies": { - "multiaddr": "^10.0.0" - } - }, "node_modules/multiformats": { "version": "9.6.5", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.5.tgz", @@ -9681,14 +9796,6 @@ "picocolors": "^1.0.0" } }, - "node_modules/native-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-3.0.0.tgz", - "integrity": "sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==", - "peerDependencies": { - "node-fetch": "*" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -9729,6 +9836,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g==", + "dev": true, "engines": { "node": "4.x || >=6.0.0" } @@ -10427,6 +10535,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz", "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==", + "dev": true, "engines": { "node": ">=10" } @@ -10549,21 +10658,6 @@ "node": "*" } }, - "node_modules/peer-id": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.16.0.tgz", - "integrity": "sha512-EmL7FurFUduU9m1PS9cfJ5TAuCvxKQ7DKpfx3Yj6IKWyBRtosriFuOag/l3ni/dtPgPLwiA4R9IvpL7hsDLJuQ==", - "dependencies": { - "class-is": "^1.1.0", - "libp2p-crypto": "^0.21.0", - "multiformats": "^9.4.5", - "protobufjs": "^6.10.2", - "uint8arrays": "^3.0.0" - }, - "engines": { - "node": ">=15.0.0" - } - }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -11153,14 +11247,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-native-fetch-api": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-2.0.0.tgz", - "integrity": "sha512-GOA8tc1EVYLnHvma/TU9VTgLOyralO7eATRuCDchQveXW9Fr9vXygyq9iwqmM7YRZ8qRJfEt9xOS7OYMdJvRFw==", - "dependencies": { - "p-defer": "^3.0.0" - } - }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -11611,7 +11697,8 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/sanitize-filename": { "version": "1.6.3", @@ -11977,14 +12064,6 @@ "readable-stream": "^3.5.0" } }, - "node_modules/stream-to-it": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.4.tgz", - "integrity": "sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==", - "dependencies": { - "get-iterator": "^1.0.2" - } - }, "node_modules/streamroller": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", @@ -13427,26 +13506,6 @@ "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/ws": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz", - "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", @@ -15022,6 +15081,29 @@ "@libp2p/interface-peer-id": "^1.0.0" } }, + "@libp2p/interface-stream-muxer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface-stream-muxer/-/interface-stream-muxer-1.1.0.tgz", + "integrity": "sha512-RvljPB4VIUwewAFyI23ldjmnjeh6b3grxjyqSFZvghtDrVgJqpEIHlm1F1pT2rdGG6vC0NIzSJGQ5p/rVPfUvA==", + "requires": { + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interfaces": "^3.0.0", + "it-stream-types": "^1.0.4" + }, + "dependencies": { + "@libp2p/interface-connection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", + "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + } + } + } + }, "@libp2p/interface-transport": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@libp2p/interface-transport/-/interface-transport-1.0.2.tgz", @@ -15082,6 +15164,127 @@ } } }, + "@libp2p/mplex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-3.0.0.tgz", + "integrity": "sha512-vF8gUlGQfs6j2BmRdaKbKoyiB6ye9dP5rUO4Q2Ihy7wa3IyIJg4mYE8HpN7wr7LaFjspyS/ZgDXvtaJA1qSvUg==", + "requires": { + "@libp2p/components": "^2.0.0", + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-stream-muxer": "^1.0.1", + "@libp2p/logger": "^2.0.0", + "@libp2p/tracked-map": "^1.0.5", + "abortable-iterator": "^4.0.2", + "any-signal": "^3.0.0", + "err-code": "^3.0.1", + "it-pipe": "^2.0.3", + "it-pushable": "^3.0.0", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.4.0", + "uint8arrays": "^3.0.0", + "varint": "^6.0.0" + }, + "dependencies": { + "@libp2p/components": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/components/-/components-2.0.1.tgz", + "integrity": "sha512-3+HgBnu7MbSBcAODtMRxSbdZ54vNB2TGxmPxeNhDBFb+jTw4pUwCeXUcTkSNzsY8cME0MhsEzQ7bwpdXa9xPeQ==", + "requires": { + "@libp2p/interface-address-manager": "^1.0.1", + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-connection-manager": "^1.0.0", + "@libp2p/interface-content-routing": "^1.0.0", + "@libp2p/interface-dht": "^1.0.0", + "@libp2p/interface-metrics": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-peer-routing": "^1.0.0", + "@libp2p/interface-peer-store": "^1.0.0", + "@libp2p/interface-pubsub": "^1.0.0", + "@libp2p/interface-registrar": "^2.0.0", + "@libp2p/interface-transport": "^1.0.0", + "@libp2p/interfaces": "^3.0.2", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0" + } + }, + "@libp2p/interface-connection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", + "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + } + }, + "@libp2p/interface-metrics": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface-metrics/-/interface-metrics-2.0.0.tgz", + "integrity": "sha512-OUMspbgamrPgTQWA9zjyrcVQtXpWegSzPllDVwySBefv14l6AhpgicvVI8s+FPbzdKSj6AanlYDa7V8Ui/14CQ==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "it-stream-types": "^1.0.4" + } + }, + "@libp2p/interface-registrar": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-registrar/-/interface-registrar-2.0.2.tgz", + "integrity": "sha512-HqDQua9J6T9KzrdYA9EhYsI0oc4CeSR1sfi0qdk073/IB3SlP+XtD7RzzVuGeyXjssqZtqf3RwjV7C+zOlHYlw==", + "requires": { + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.0" + } + }, + "@libp2p/logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.2", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + } + }, + "abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "requires": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, + "it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "requires": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + }, + "dependencies": { + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + } + } + }, + "it-pushable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", + "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" + } + } + }, "@libp2p/multistream-select": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-1.0.6.tgz", @@ -15557,6 +15760,115 @@ } } }, + "@libp2p/websockets": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-3.0.1.tgz", + "integrity": "sha512-H9xyxvZ0+0SACIGY6Ppa19K3h567set8tfSnxy/fjzUAJRM6ZwYMROh5N0dMLjyl/vjqTNh5iyJmnO3upddGGA==", + "requires": { + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-transport": "^1.0.0", + "@libp2p/interfaces": "^3.0.1", + "@libp2p/logger": "^2.0.0", + "@libp2p/utils": "^3.0.0", + "@multiformats/mafmt": "^11.0.2", + "@multiformats/multiaddr": "^10.1.5", + "@multiformats/multiaddr-to-uri": "^9.0.0", + "abortable-iterator": "^4.0.2", + "err-code": "^3.0.1", + "it-ws": "^5.0.0", + "p-defer": "^4.0.0", + "p-timeout": "^5.0.2", + "wherearewe": "^1.0.0" + }, + "dependencies": { + "@libp2p/interface-connection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", + "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + } + }, + "@libp2p/logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.2", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + } + }, + "@libp2p/utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-3.0.0.tgz", + "integrity": "sha512-ik2IjnoO+73/5b3gSfXyMS3+eQAhNpzhzvvqQNOI8gcU6jcLvliStldwt1LKiMe9M3ZUOy6LHeB/3vF1dO9CSA==", + "requires": { + "@achingbrain/ip-address": "^8.1.0", + "@libp2p/interface-connection": "^2.1.0", + "@libp2p/interface-peer-store": "^1.0.0", + "@libp2p/logger": "^2.0.0", + "@multiformats/multiaddr": "^10.1.1", + "abortable-iterator": "^4.0.2", + "err-code": "^3.0.1", + "is-loopback-addr": "^2.0.1", + "it-stream-types": "^1.0.4", + "private-ip": "^2.1.1" + } + }, + "abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "requires": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, + "get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, + "is-loopback-addr": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", + "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" + }, + "it-ws": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/it-ws/-/it-ws-5.0.2.tgz", + "integrity": "sha512-beq/nBWuKm2Ds4nYSfPuZRF0USVZJhsIvuUH3kRE5QdaCzivDK7zyeewDgsNBSPr6hPgF5dyPP5NXcXhUcb9QQ==", + "requires": { + "event-iterator": "^2.0.0", + "iso-url": "^1.1.2", + "it-stream-types": "^1.0.2", + "uint8arrays": "^3.0.0", + "ws": "^8.4.0" + } + }, + "p-defer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==" + }, + "p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==" + }, + "ws": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", + "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "requires": {} + } + } + }, "@multiformats/mafmt": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-11.0.2.tgz", @@ -15609,6 +15921,14 @@ } } }, + "@multiformats/multiaddr-to-uri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-9.0.1.tgz", + "integrity": "sha512-kSyHZ2lKjoEzHu/TM4ZVwFj4AWV1B9qFBFJjYb/fK1NqrnrNb/M3uhoyckJvP7WZvpDsnEc7fUCpmPipDY6LMw==", + "requires": { + "@multiformats/multiaddr": "^10.1.1" + } + }, "@noble/ed25519": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.6.1.tgz", @@ -16067,11 +16387,6 @@ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, "@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", @@ -16545,14 +16860,6 @@ "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, - "abortable-iterator": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-3.0.2.tgz", - "integrity": "sha512-qVP8HFfTpUQI2F+f1tpTriKDIZ4XrmwCrBCrQeRKO7DKWF3kgoT6NXiNDv2krrGcHxPwmI63eGQiec81sEaWIw==", - "requires": { - "get-iterator": "^1.0.2" - } - }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -17119,11 +17426,6 @@ "integrity": "sha512-CLOGsVDrVamzv8sXJGaILUVI6dsuAkouJP/n6t+OxLPeeA4DDby7zn9SB6EUpa1H7oIKoE+rMmkW80zYsFfUjA==", "dev": true }, - "class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" - }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -17807,16 +18109,6 @@ "path-type": "^4.0.0" } }, - "dns-over-http-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-1.2.3.tgz", - "integrity": "sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA==", - "requires": { - "debug": "^4.3.1", - "native-fetch": "^3.0.0", - "receptacle": "^1.3.2" - } - }, "dns-query": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/dns-query/-/dns-query-0.11.1.tgz", @@ -17880,14 +18172,6 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, - "electron-fetch": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.7.4.tgz", - "integrity": "sha512-+fBLXEy4CJWQ5bz8dyaeSG1hD6JJ15kBZyj3eh24pIVrd3hLM47H/umffrdQfS6GZ0falF0g9JT9f3Rs6AVUhw==", - "requires": { - "encoding": "^0.1.13" - } - }, "electron-to-chromium": { "version": "1.3.810", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.810.tgz", @@ -17911,14 +18195,6 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" - } - }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -18838,11 +19114,6 @@ "has-symbols": "^1.0.1" } }, - "get-iterator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz", - "integrity": "sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==" - }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -19173,6 +19444,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } @@ -19286,22 +19558,6 @@ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true }, - "ip-address": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-8.1.0.tgz", - "integrity": "sha512-Wz91gZKpNKoXtqvY8ScarKYwhXoK4r/b5QuT+uywe/azv0/nUCo7Bh0IRRI7F9DHR06kJNWtzMGLIbXavngbKA==", - "requires": { - "jsbn": "1.1.0", - "sprintf-js": "1.1.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" - } - } - }, "ip-regex": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", @@ -19312,27 +19568,6 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" }, - "ipfs-utils": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-9.0.5.tgz", - "integrity": "sha512-GXWfsq/nKtwkcTI4+KGc4CU9EFXjtkWaGcFAsnm177kAhA0Fnn8aWNRaF/C0xFraUIl1wTAUTWkaGKigVyfsTw==", - "requires": { - "any-signal": "^3.0.0", - "buffer": "^6.0.1", - "electron-fetch": "^1.7.2", - "err-code": "^3.0.1", - "is-electron": "^2.2.0", - "iso-url": "^1.1.5", - "it-glob": "^1.0.1", - "it-to-stream": "^1.0.0", - "merge-options": "^3.0.4", - "nanoid": "^3.1.20", - "native-fetch": "^3.0.0", - "node-fetch": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz", - "react-native-fetch-api": "^2.0.0", - "stream-to-it": "^0.2.2" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -19424,11 +19659,6 @@ "ip-regex": "^4.0.0" } }, - "is-loopback-addr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-1.0.1.tgz", - "integrity": "sha512-DhWU/kqY7X2F6KrrVTu7mHlbd2Pbo4D1YkAzasBMjQs6lJAoefxaA6m6CpSX0K6pjt9D0b9PNFI5zduy/vzOYw==" - }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -19724,15 +19954,6 @@ "resolved": "https://registry.npmjs.org/it-foreach/-/it-foreach-0.1.1.tgz", "integrity": "sha512-ZLxL651N5w5SL/EIIcrXELgYrrkuEKj/TErG93C4lr6lNZziKsf338ljSG85PjQfu7Frg/1wESl5pLrPSFXI9g==" }, - "it-glob": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-1.0.2.tgz", - "integrity": "sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q==", - "requires": { - "@types/minimatch": "^3.0.4", - "minimatch": "^3.0.4" - } - }, "it-handshake": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-3.0.1.tgz", @@ -19860,30 +20081,6 @@ "resolved": "https://registry.npmjs.org/it-take/-/it-take-1.0.2.tgz", "integrity": "sha512-u7I6qhhxH7pSevcYNaMECtkvZW365ARqAIt9K+xjdK1B2WUDEjQSfETkOCT8bxFq/59LqrN3cMLUtTgmDBaygw==" }, - "it-to-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/it-to-stream/-/it-to-stream-1.0.0.tgz", - "integrity": "sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==", - "requires": { - "buffer": "^6.0.3", - "fast-fifo": "^1.0.0", - "get-iterator": "^1.0.2", - "p-defer": "^3.0.0", - "p-fifo": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "it-ws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/it-ws/-/it-ws-4.0.0.tgz", - "integrity": "sha512-XmTzpMkevc6rUboy73r0CCNhciMmL/Yxir9O6FujRwdrjysztqLBQ1Xkr4CpY2m7BVSCObKotaCWJeZ29lOXRA==", - "requires": { - "buffer": "^6.0.3", - "event-iterator": "^2.0.0", - "iso-url": "^1.1.2", - "ws": "^7.3.1" - } - }, "js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -20270,17 +20467,6 @@ } } }, - "libp2p-bootstrap": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/libp2p-bootstrap/-/libp2p-bootstrap-0.14.0.tgz", - "integrity": "sha512-j3slZo5nOdA8wVlav8dRZeAXutZ7psz/f10DLoIEX/EFif7uU5oZfIYvjbVGo3ZDl+VQLo2tR0m1lV0westQ3g==", - "requires": { - "debug": "^4.3.1", - "mafmt": "^10.0.0", - "multiaddr": "^10.0.0", - "peer-id": "^0.16.0" - } - }, "libp2p-crypto": { "version": "0.21.2", "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.21.2.tgz", @@ -20296,53 +20482,6 @@ "uint8arrays": "^3.0.0" } }, - "libp2p-mplex": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/libp2p-mplex/-/libp2p-mplex-0.10.7.tgz", - "integrity": "sha512-21VV0DZWuOsHgitWy1GZD1M/kki3a/hVoAJ5QC48p01JNSK5W8gxRiZtq7cCGJ/xNpbQxvMlMtS5eq8CFRlysg==", - "requires": { - "abortable-iterator": "^3.0.2", - "bl": "^5.0.0", - "debug": "^4.3.1", - "err-code": "^3.0.1", - "it-pipe": "^1.1.0", - "it-pushable": "^1.4.1", - "varint": "^6.0.0" - } - }, - "libp2p-utils": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/libp2p-utils/-/libp2p-utils-0.4.1.tgz", - "integrity": "sha512-kq/US2unamiyY+YwP47dO1uqpAdcbdYI2Fzi9JIEhjfPBaD1MR/uyQ/YP7ABthl3EaxAjIQYd1TVp85d6QKAtQ==", - "requires": { - "abortable-iterator": "^3.0.0", - "debug": "^4.3.0", - "err-code": "^3.0.1", - "ip-address": "^8.0.0", - "is-loopback-addr": "^1.0.0", - "multiaddr": "^10.0.0", - "private-ip": "^2.1.1" - } - }, - "libp2p-websockets": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/libp2p-websockets/-/libp2p-websockets-0.16.2.tgz", - "integrity": "sha512-QGfo8jX1Ks16yi8C67CCyMW7k9cfCYiQ0lzKVJBud0fV3ymbMO2L8gzU6iXUUZTHILo8ka26zKhwQ4lmUMI+nA==", - "requires": { - "abortable-iterator": "^3.0.0", - "class-is": "^1.1.0", - "debug": "^4.3.1", - "err-code": "^3.0.1", - "ipfs-utils": "^9.0.1", - "it-ws": "^4.0.0", - "libp2p-utils": "^0.4.0", - "mafmt": "^10.0.0", - "multiaddr": "^10.0.0", - "multiaddr-to-uri": "^8.0.0", - "p-defer": "^3.0.0", - "p-timeout": "^4.1.0" - } - }, "lilconfig": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", @@ -20657,14 +20796,6 @@ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", "dev": true }, - "mafmt": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-10.0.0.tgz", - "integrity": "sha512-K1bziJOXcnepfztu+2Xy9FLKVLaFMDuspmiyJIYRxnO0WOxFSV7XKSdMxMrVZxcvg1+YjlTIvSGTImUHU2k4Aw==", - "requires": { - "multiaddr": "^10.0.0" - } - }, "magic-string": { "version": "0.25.9", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", @@ -21024,27 +21155,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "multiaddr": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-10.0.1.tgz", - "integrity": "sha512-G5upNcGzEGuTHkzxezPrrD6CaIHR9uo+7MwqhNVcXTs33IInon4y7nMiGxl2CY5hG7chvYQUQhz5V52/Qe3cbg==", - "requires": { - "dns-over-http-resolver": "^1.2.3", - "err-code": "^3.0.1", - "is-ip": "^3.1.0", - "multiformats": "^9.4.5", - "uint8arrays": "^3.0.0", - "varint": "^6.0.0" - } - }, - "multiaddr-to-uri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/multiaddr-to-uri/-/multiaddr-to-uri-8.0.0.tgz", - "integrity": "sha512-dq4p/vsOOUdVEd1J1gl+R2GFrXJQH8yjLtz4hodqdVbieg39LvBOdMQRdQnfbg5LSM/q1BYNVf5CBbwZFFqBgA==", - "requires": { - "multiaddr": "^10.0.0" - } - }, "multiformats": { "version": "9.6.5", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.5.tgz", @@ -21069,12 +21179,6 @@ "picocolors": "^1.0.0" } }, - "native-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-3.0.0.tgz", - "integrity": "sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==", - "requires": {} - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -21107,7 +21211,8 @@ "node-fetch": { "version": "npm:@achingbrain/node-fetch@2.6.7", "resolved": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g==" + "integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g==", + "dev": true }, "node-forge": { "version": "1.3.1", @@ -21629,7 +21734,8 @@ "p-timeout": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz", - "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==" + "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==", + "dev": true }, "p-try": { "version": "2.2.0", @@ -21716,18 +21822,6 @@ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, - "peer-id": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.16.0.tgz", - "integrity": "sha512-EmL7FurFUduU9m1PS9cfJ5TAuCvxKQ7DKpfx3Yj6IKWyBRtosriFuOag/l3ni/dtPgPLwiA4R9IvpL7hsDLJuQ==", - "requires": { - "class-is": "^1.1.0", - "libp2p-crypto": "^0.21.0", - "multiformats": "^9.4.5", - "protobufjs": "^6.10.2", - "uint8arrays": "^3.0.0" - } - }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -22146,14 +22240,6 @@ "object-assign": "^4.1.1" } }, - "react-native-fetch-api": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-2.0.0.tgz", - "integrity": "sha512-GOA8tc1EVYLnHvma/TU9VTgLOyralO7eATRuCDchQveXW9Fr9vXygyq9iwqmM7YRZ8qRJfEt9xOS7OYMdJvRFw==", - "requires": { - "p-defer": "^3.0.0" - } - }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -22472,7 +22558,8 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "sanitize-filename": { "version": "1.6.3", @@ -22771,14 +22858,6 @@ "readable-stream": "^3.5.0" } }, - "stream-to-it": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.4.tgz", - "integrity": "sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==", - "requires": { - "get-iterator": "^1.0.2" - } - }, "streamroller": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", @@ -23829,12 +23908,6 @@ "typedarray-to-buffer": "^3.1.5" } }, - "ws": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz", - "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==", - "requires": {} - }, "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", diff --git a/package.json b/package.json index 1e6f362e97..6e997ec502 100644 --- a/package.json +++ b/package.json @@ -69,10 +69,14 @@ "@chainsafe/libp2p-gossipsub": "^2.0.0", "@chainsafe/libp2p-noise": "^7.0.0", "@ethersproject/rlp": "^5.5.0", + "@libp2p/interface-peer-discovery": "^1.0.0", "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-peer-info": "^1.0.1", "@libp2p/interface-peer-store": "^1.0.0", "@libp2p/interfaces": "^3.0.2", + "@libp2p/mplex": "^3.0.0", "@libp2p/peer-id": "^1.1.10", + "@libp2p/websockets": "^3.0.0", "@multiformats/multiaddr": "^10.2.0", "@noble/secp256k1": "^1.3.4", "debug": "^4.3.4", @@ -83,10 +87,7 @@ "it-pipe": "^1.1.0", "js-sha3": "^0.8.0", "libp2p": "^0.37.3", - "libp2p-bootstrap": "^0.14.0", "libp2p-crypto": "^0.21.2", - "libp2p-mplex": "^0.10.4", - "libp2p-websockets": "^0.16.1", "multiformats": "^9.6.5", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", diff --git a/src/lib/discovery/bootstrap.ts b/src/lib/discovery/bootstrap.ts index c4d84e48aa..e82e9d240a 100644 --- a/src/lib/discovery/bootstrap.ts +++ b/src/lib/discovery/bootstrap.ts @@ -1,3 +1,11 @@ +import type { + PeerDiscovery, + PeerDiscoveryEvents, +} from "@libp2p/interface-peer-discovery"; +import { symbol } from "@libp2p/interface-peer-discovery"; +import type { PeerInfo } from "@libp2p/interface-peer-info"; +import { CustomEvent, EventEmitter } from "@libp2p/interfaces/events"; +import { peerIdFromString } from "@libp2p/peer-id/src"; import { Multiaddr } from "@multiformats/multiaddr"; import debug from "debug"; @@ -5,7 +13,7 @@ import { DnsNodeDiscovery, NodeCapabilityCount } from "./dns"; import { getPredefinedBootstrapNodes } from "./predefined"; import { getPseudoRandomSubset } from "./random_subset"; -const dbg = debug("waku:discovery:bootstrap"); +const log = debug("waku:discovery:bootstrap"); /** * Setup discovery method used to bootstrap. @@ -35,8 +43,14 @@ export interface BootstrapOptions { peers?: string[] | Multiaddr[]; /** * Getter that retrieve multiaddrs of peers to connect to. + * will be called once. */ getPeers?: () => Promise; + /** + * The interval between emitting addresses in milliseconds. + * Used if [[peers]] is passed or a sync function is passed for [[getPeers]] + */ + interval?: number; /** * An EIP-1459 ENR Tree URL. For example: * "enrtree://AOFTICU2XWDULNLZGRMQS4RIZPAZEHYMV4FYHAPW563HNRAOERP7C@test.nodes.vac.dev" @@ -56,23 +70,50 @@ export interface BootstrapOptions { * * @throws if an invalid combination of options is passed, see [[BootstrapOptions]] for details. */ -export class Bootstrap { - public static DefaultMaxPeers = 1; +export class Bootstrap + extends EventEmitter + implements PeerDiscovery +{ + static DefaultMaxPeers = 1; - public readonly getBootstrapPeers: (() => Promise) | undefined; + private readonly asyncGetBootstrapPeers: + | (() => Promise) + | undefined; + private peers: PeerInfo[]; + private timer?: ReturnType; + private readonly interval: number; constructor(opts: BootstrapOptions) { + super(); + + const methods = [ + !!opts.default, + !!opts.peers, + !!opts.getPeers, + !!opts.enrUrl, + ].filter((x) => x); + if (methods.length > 1) { + throw new Error( + "Bootstrap does not support several discovery methods (yet)" + ); + } + + this.interval = opts.interval ?? 10000; + opts.default = + opts.default ?? (!opts.peers && !opts.getPeers && !opts.enrUrl); const maxPeers = opts.maxPeers ?? Bootstrap.DefaultMaxPeers; + this.peers = []; if (opts.default) { - dbg("Use hosted list of peers."); + log("Use hosted list of peers."); - this.getBootstrapPeers = (): Promise => { - return Promise.resolve( - getPredefinedBootstrapNodes(undefined, maxPeers) - ); - }; - } else if (opts.peers !== undefined && opts.peers.length > 0) { + this.peers = multiaddrsToPeerInfo( + getPredefinedBootstrapNodes(undefined, maxPeers) + ); + return; + } + + if (!!opts.peers && opts.peers.length > 0) { const allPeers: Multiaddr[] = opts.peers.map( (node: string | Multiaddr) => { if (typeof node === "string") { @@ -82,41 +123,121 @@ export class Bootstrap { } } ); - const peers = getPseudoRandomSubset(allPeers, maxPeers); - dbg( - "Use provided list of peers (reduced to maxPeers)", - allPeers.map((ma) => ma.toString()) + this.peers = multiaddrsToPeerInfo( + getPseudoRandomSubset(allPeers, maxPeers) ); - this.getBootstrapPeers = (): Promise => - Promise.resolve(peers); - } else if (typeof opts.getPeers === "function") { - dbg("Bootstrap: Use provided getPeers function."); + log( + "Use provided list of peers (reduced to maxPeers)", + this.peers.map((ma) => ma.toString()) + ); + return; + } + + if (typeof opts.getPeers === "function") { + log("Bootstrap: Use provided getPeers function."); const getPeers = opts.getPeers; - this.getBootstrapPeers = async (): Promise => { + this.asyncGetBootstrapPeers = async () => { const allPeers = await getPeers(); return getPseudoRandomSubset( allPeers, maxPeers ).map((node) => new Multiaddr(node)); }; - } else if (opts.enrUrl) { + return; + } + + if (opts.enrUrl) { const wantedNodeCapabilityCount = opts.wantedNodeCapabilityCount; if (!wantedNodeCapabilityCount) throw "`wantedNodeCapabilityCount` must be defined when using `enrUrl`"; const enrUrl = opts.enrUrl; - dbg("Use provided EIP-1459 ENR Tree URL."); + log("Use provided EIP-1459 ENR Tree URL."); const dns = DnsNodeDiscovery.dnsOverHttp(); - this.getBootstrapPeers = async (): Promise => { + this.asyncGetBootstrapPeers = async () => { const enrs = await dns.getPeers([enrUrl], wantedNodeCapabilityCount); - dbg(`Found ${enrs.length} peers`); + log(`Found ${enrs.length} peers`); return enrs.map((enr) => enr.getFullMultiaddrs()).flat(); }; - } else { - dbg("No bootstrap method specified, no peer will be returned"); - this.getBootstrapPeers = undefined; + + return; } } + + /** + * Start discovery process + */ + start(): void { + if (this.asyncGetBootstrapPeers) { + // TODO: This should emit the peer as they are discovered instead of having + // to wait for the full DNS discovery process to be done first. + // TODO: PeerInfo should be returned by discovery + this.asyncGetBootstrapPeers().then((peers) => { + this.peers = multiaddrsToPeerInfo(peers); + this._startTimer(); + }); + } else { + this._startTimer(); + } + } + + private _startTimer(): void { + if (this.peers) { + log("Starting bootstrap node discovery"); + if (this.timer != null) { + return; + } + + this.timer = setInterval(() => this._returnPeers(), this.interval); + + this._returnPeers(); + } + } + + _returnPeers(): void { + if (this.timer == null) { + return; + } + + this.peers.forEach((peerData) => { + this.dispatchEvent( + new CustomEvent("peer", { detail: peerData }) + ); + }); + } + + /** + * Stop emitting events + */ + stop(): void { + if (this.timer != null) { + clearInterval(this.timer); + } + + this.timer = undefined; + } + + get [symbol](): true { + return true; + } + + get [Symbol.toStringTag](): string { + return "@waku/bootstrap"; + } +} + +function multiaddrsToPeerInfo(mas: Multiaddr[]): PeerInfo[] { + return mas + .map((ma) => { + const peerIdStr = ma.getPeerId(); + const protocols: string[] = []; + return { + id: peerIdStr ? peerIdFromString(peerIdStr) : null, + multiaddrs: [ma.decapsulateCode(421)], + protocols, + }; + }) + .filter((peerInfo): peerInfo is PeerInfo => peerInfo.id !== null); } diff --git a/src/lib/waku.ts b/src/lib/waku.ts index 91298f3ecf..d7df8efc86 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -1,19 +1,13 @@ import { Noise } from "@chainsafe/libp2p-noise"; import type { PeerId } from "@libp2p/interface-peer-id"; +import { MuxedStream } from "@libp2p/interfaces/stream-muxer/types"; +import { Mplex } from "@libp2p/mplex"; +import { WebSockets } from "@libp2p/websockets"; +import filters from "@libp2p/websockets/filters"; import { Multiaddr, multiaddr } from "@multiformats/multiaddr"; import debug from "debug"; import { createLibp2p, Libp2p, Libp2pOptions } from "libp2p"; import Libp2pBootstrap from "libp2p-bootstrap"; -import { MuxedStream } from "libp2p-interfaces/dist/src/stream-muxer/types"; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore: No types available -import Mplex from "libp2p-mplex"; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore: No types available -import Websockets from "libp2p-websockets"; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore: No types available -import filters from "libp2p-websockets/src/filters"; import PingService from "libp2p/src/ping"; import { Bootstrap, BootstrapOptions } from "./discovery"; @@ -24,8 +18,6 @@ import { WakuRelay } from "./waku_relay"; import { RelayCodecs, RelayPingContentTopic } from "./waku_relay/constants"; import { StoreCodecs, WakuStore } from "./waku_store"; -const websocketsTransportKey = Websockets.prototype[Symbol.toStringTag]; - export const DefaultPingKeepAliveValueSecs = 0; export const DefaultRelayKeepAliveValueSecs = 5 * 60; @@ -93,6 +85,35 @@ export interface CreateOptions { decryptionKeys?: Array; } +export async function createWaku(): Promise { + const libp2pOpts = { + transports: new WebSockets({ filter: filters.all }), + streamMuxers: [new Mplex()], + pubsub: new WakuRelay(), + connectionEncryption: [new Noise()], + }; + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore: modules property is correctly set thanks to voodoo + const libp2p = await createLibp2p(libp2pOpts); + + const wakuStore = new WakuStore(libp2p, { + pubSubTopic: options?.pubSubTopic, + }); + const wakuLightPush = new WakuLightPush(libp2p); + const wakuFilter = new WakuFilter(libp2p); + + await libp2p.start(); + + return new Waku( + options ? options : {}, + libp2p, + wakuStore, + wakuLightPush, + wakuFilter + ); +} + export class Waku { public libp2p: Libp2p; public relay: WakuRelay; From e0a23bad44e6e829fc235851620af3fbaaad0e05 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 22 Jun 2022 15:52:02 +1000 Subject: [PATCH 06/68] Sort out createWaku and waitForRemotePeer --- src/lib/discovery/bootstrap.ts | 3 +- src/lib/waku.ts | 168 ++++++++++++--------------------- src/lib/waku_relay/index.ts | 8 ++ 3 files changed, 70 insertions(+), 109 deletions(-) diff --git a/src/lib/discovery/bootstrap.ts b/src/lib/discovery/bootstrap.ts index e82e9d240a..7f3662d562 100644 --- a/src/lib/discovery/bootstrap.ts +++ b/src/lib/discovery/bootstrap.ts @@ -83,8 +83,9 @@ export class Bootstrap private timer?: ReturnType; private readonly interval: number; - constructor(opts: BootstrapOptions) { + constructor(opts?: BootstrapOptions) { super(); + opts = opts ?? {}; const methods = [ !!opts.default, diff --git a/src/lib/waku.ts b/src/lib/waku.ts index d7df8efc86..aee8d13689 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -2,12 +2,12 @@ import { Noise } from "@chainsafe/libp2p-noise"; import type { PeerId } from "@libp2p/interface-peer-id"; import { MuxedStream } from "@libp2p/interfaces/stream-muxer/types"; import { Mplex } from "@libp2p/mplex"; +import { peerIdFromString } from "@libp2p/peer-id"; import { WebSockets } from "@libp2p/websockets"; import filters from "@libp2p/websockets/filters"; import { Multiaddr, multiaddr } from "@multiformats/multiaddr"; import debug from "debug"; import { createLibp2p, Libp2p, Libp2pOptions } from "libp2p"; -import Libp2pBootstrap from "libp2p-bootstrap"; import PingService from "libp2p/src/ping"; import { Bootstrap, BootstrapOptions } from "./discovery"; @@ -85,7 +85,13 @@ export interface CreateOptions { decryptionKeys?: Array; } -export async function createWaku(): Promise { +export async function createWaku(options?: CreateOptions): Promise { + const peerDiscovery = []; + if (options?.bootstrap) { + peerDiscovery.push(new Bootstrap(options?.bootstrap)); + } + + // TODO: Use options const libp2pOpts = { transports: new WebSockets({ filter: filters.all }), streamMuxers: [new Mplex()], @@ -97,21 +103,13 @@ export async function createWaku(): Promise { // @ts-ignore: modules property is correctly set thanks to voodoo const libp2p = await createLibp2p(libp2pOpts); - const wakuStore = new WakuStore(libp2p, { - pubSubTopic: options?.pubSubTopic, - }); + const wakuStore = new WakuStore(libp2p); const wakuLightPush = new WakuLightPush(libp2p); const wakuFilter = new WakuFilter(libp2p); await libp2p.start(); - return new Waku( - options ? options : {}, - libp2p, - wakuStore, - wakuLightPush, - wakuFilter - ); + return new Waku({}, libp2p, wakuStore, wakuLightPush, wakuFilter); } export class Waku { @@ -128,7 +126,7 @@ export class Waku { [peer: string]: ReturnType; }; - private constructor( + constructor( options: CreateOptions, libp2p: Libp2p, store: WakuStore, @@ -172,80 +170,8 @@ export class Waku { }); } - /** - * Create and start new waku node. - */ - static async create(options?: CreateOptions): Promise { - // Get an object in case options or libp2p are undefined - - // Default for Websocket filter is `all`: - // Returns all TCP and DNS based addresses, both with ws or wss. - const libp2pOpts: Partial | undefined = Object.assign( - { - transport: { - [websocketsTransportKey]: { - filter: filters.all, - }, - }, - }, - options?.libp2p - ); - - // TODO: Pass self-emit? - // Pass pubsub topic to relay - libp2pOpts.pubsub = new WakuRelay({ pubSubTopic: options?.pubSubTopic }); - - // Default transport for libp2p is Websockets - libp2pOpts.transports = options?.libp2p?.transports ?? [Websockets]; - - // streamMuxer, connection encryption and pubsub are overridden - // as those are the only ones currently supported by Waku nodes. - libp2pOpts.streamMuxers = [Mplex]; - libp2pOpts.connectionEncryption = [new Noise(options?.staticNoiseKey)]; - - if (options?.bootstrap) { - const bootstrap = new Bootstrap(options?.bootstrap); - - if (bootstrap.getBootstrapPeers !== undefined) { - try { - const list = await bootstrap.getBootstrapPeers(); - - // Note: this overrides any other peer discover - libp2pOpts.modules = Object.assign(libp2pOpts.modules, { - peerDiscovery: [Libp2pBootstrap], - }); - - libp2pOpts.config.peerDiscovery = { - [Libp2pBootstrap.tag]: { - list, - enabled: true, - }, - }; - } catch (e) { - dbg("Failed to retrieve bootstrap nodes", e); - } - } - } - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore: modules property is correctly set thanks to voodoo - const libp2p = await createLibp2p(libp2pOpts); - - const wakuStore = new WakuStore(libp2p, { - pubSubTopic: options?.pubSubTopic, - }); - const wakuLightPush = new WakuLightPush(libp2p); - const wakuFilter = new WakuFilter(libp2p); - - await libp2p.start(); - - return new Waku( - options ? options : {}, - libp2p, - wakuStore, - wakuLightPush, - wakuFilter - ); + start(): void { + this.libp2p.start(); } /** @@ -291,7 +217,7 @@ export class Waku { ): void { let peer; if (typeof peerId === "string") { - peer = PeerId.createFromB58String(peerId); + peer = peerIdFromString(peerId); } else { peer = peerId; } @@ -344,9 +270,9 @@ export class Waku { * @throws if libp2p is not listening on localhost. */ getLocalMultiaddrWithID(): string { - const localMultiaddr = this.libp2p.multiaddrs.find((addr) => - addr.toString().match(/127\.0\.0\.1/) - ); + const localMultiaddr = this.libp2p + .getMultiaddrs() + .find((addr) => addr.toString().match(/127\.0\.0\.1/)); if (!localMultiaddr || localMultiaddr.toString() === "") { throw "Not listening on localhost"; } @@ -374,21 +300,23 @@ export class Waku { const promises: Promise[] = []; if (protocols.includes(Protocols.Relay)) { - const peers = this.relay.getPeers(); + const peers = this.relay.getMeshPeers(this.relay.pubSubTopic); - if (peers.size == 0) { + if (peers.length == 0) { // No peer yet available, wait for a subscription const promise = new Promise((resolve) => { - this.libp2p.pubsub.once("pubsub:subscription-change", () => { + this.relay.addEventListener("subscription-change", () => { // Remote peer subscribed to topic, now wait for a heartbeat // so that the mesh is updated and the remote peer added to it - this.libp2p.pubsub.once("gossipsub:heartbeat", resolve); + this.relay.addEventListener("gossipsub:heartbeat", () => resolve()); }); }); promises.push(promise); } } + // TODO: This can be factored in one helper function + // Probably need to add a "string" protocol to each class to make it easier if (protocols.includes(Protocols.Store)) { const storePromise = (async (): Promise => { const peers = await this.store.peers(); @@ -398,6 +326,29 @@ export class Waku { return; } + await new Promise((resolve) => { + this.libp2p.peerStore.addEventListener("change:protocols", (evt) => { + for (const codec of Object.values(StoreCodecs)) { + if (evt.detail.protocols.includes(codec)) { + dbg("Resolving for", codec, evt.detail.protocols); + resolve(); + } + } + }); + }); + })(); + promises.push(storePromise); + } + + if (protocols.includes(Protocols.LightPush)) { + const lightPushPromise = (async (): Promise => { + const peers = await this.lightPush.peers(); + + if (peers.length) { + dbg("Light Push peer found: ", peers[0].id.toString()); + return; + } + await new Promise((resolve) => { this.libp2p.peerStore.addEventListener("change:protocols", (evt) => { if (evt.detail.protocols.includes(LightPushCodec)) { @@ -407,25 +358,26 @@ export class Waku { }); }); })(); - promises.push(storePromise); - } - - if (protocols.includes(Protocols.LightPush)) { - const lightPushPromise = (async (): Promise => { - for await (const peer of this.lightPush.peers) { - dbg("Light Push peer found", peer.id.toString()); - break; - } - })(); promises.push(lightPushPromise); } if (protocols.includes(Protocols.Filter)) { const filterPromise = (async (): Promise => { - for await (const peer of this.filter.peers) { - dbg("Filter peer found", peer.id.toString()); - break; + const peers = await this.filter.peers(); + + if (peers.length) { + dbg("Filter peer found: ", peers[0].id.toString()); + return; } + + await new Promise((resolve) => { + this.libp2p.peerStore.addEventListener("change:protocols", (evt) => { + if (evt.detail.protocols.includes(FilterCodec)) { + dbg("Resolving for", FilterCodec, evt.detail.protocols); + resolve(); + } + }); + }); })(); promises.push(filterPromise); } diff --git a/src/lib/waku_relay/index.ts b/src/lib/waku_relay/index.ts index 40cb020537..64b01682e2 100644 --- a/src/lib/waku_relay/index.ts +++ b/src/lib/waku_relay/index.ts @@ -3,6 +3,10 @@ import { GossipsubMessage, GossipsubOpts, } from "@chainsafe/libp2p-gossipsub"; +import { + PeerIdStr, + TopicStr, +} from "@chainsafe/libp2p-gossipsub/dist/src/types"; import { SignaturePolicy } from "@chainsafe/libp2p-gossipsub/types"; import debug from "debug"; @@ -206,6 +210,10 @@ export class WakuRelay extends GossipSub { super.subscribe(pubSubTopic); } + getMeshPeers(topic?: TopicStr): PeerIdStr[] { + return super.getMeshPeers(topic ?? DefaultPubSubTopic); + } + // TODO: Implement method that uses Relay codec // public async heartbeat(): Promise { } From 5d8ab6cf8227e9a54d70a56ee4603c15282f0270 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 22 Jun 2022 15:59:18 +1000 Subject: [PATCH 07/68] Sort ping --- src/lib/waku.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/lib/waku.ts b/src/lib/waku.ts index aee8d13689..1b714700aa 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -8,7 +8,6 @@ import filters from "@libp2p/websockets/filters"; import { Multiaddr, multiaddr } from "@multiformats/multiaddr"; import debug from "debug"; import { createLibp2p, Libp2p, Libp2pOptions } from "libp2p"; -import PingService from "libp2p/src/ping"; import { Bootstrap, BootstrapOptions } from "./discovery"; import { FilterCodec, WakuFilter } from "./waku_filter"; @@ -181,7 +180,7 @@ export class Waku { * @param protocols Waku protocols we expect from the peer; Default to Relay */ async dial( - peer: PeerId | Multiaddr | string, + peer: PeerId | Multiaddr, protocols?: Protocols[] ): Promise<{ stream: MuxedStream; @@ -404,9 +403,8 @@ export class Waku { const peerIdStr = peerId.toString(); if (pingPeriodSecs !== 0) { - const pingService = new PingService(this.libp2p); this.pingKeepAliveTimers[peerIdStr] = setInterval(() => { - pingService.ping(peerId).catch((e) => { + this.libp2p.ping(peerId).catch((e) => { dbg(`Ping failed (${peerIdStr})`, e); }); }, pingPeriodSecs * 1000); From dcb3a65a5b60cb0110fa633e60da1a71e6bf17b0 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 22 Jun 2022 16:05:32 +1000 Subject: [PATCH 08/68] No more tsc error on prod code --- src/lib/waku.ts | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/lib/waku.ts b/src/lib/waku.ts index 1b714700aa..0963e09e0b 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -1,6 +1,5 @@ import { Noise } from "@chainsafe/libp2p-noise"; import type { PeerId } from "@libp2p/interface-peer-id"; -import { MuxedStream } from "@libp2p/interfaces/stream-muxer/types"; import { Mplex } from "@libp2p/mplex"; import { peerIdFromString } from "@libp2p/peer-id"; import { WebSockets } from "@libp2p/websockets"; @@ -179,13 +178,9 @@ export class Waku { * @param peer The peer to dial * @param protocols Waku protocols we expect from the peer; Default to Relay */ - async dial( - peer: PeerId | Multiaddr, - protocols?: Protocols[] - ): Promise<{ - stream: MuxedStream; - protocol: string; - }> { + // TODO: Any to be removed once libp2p uses @libp2p/interface-connection for + // dialProtocol + async dial(peer: PeerId | Multiaddr, protocols?: Protocols[]): Promise { const _protocols = protocols ?? [Protocols.Relay]; const codecs: string[] = []; From 9e27a0082e08070092f107b46ea322ec271b2320 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Thu, 23 Jun 2022 14:03:52 +1000 Subject: [PATCH 09/68] Sort out ENR key generation, upgrade to @libp2p/crypto --- package-lock.json | 364 +++++++-------------- package.json | 3 +- src/lib/discovery/fetch_nodes.spec.ts | 4 +- src/lib/enr/enr.node.spec.ts | 11 +- src/lib/enr/enr.spec.ts | 16 +- src/lib/enr/enr.ts | 6 +- src/lib/enr/keypair/index.spec.ts | 30 +- src/lib/enr/keypair/index.ts | 62 ++-- src/lib/waku.node.spec.ts | 63 ++-- src/lib/waku.spec.ts | 5 +- src/lib/waku.ts | 17 +- src/lib/waku_filter/index.node.spec.ts | 5 +- src/lib/waku_light_push/index.node.spec.ts | 8 +- src/lib/waku_message/index.node.spec.ts | 5 +- src/lib/waku_relay/index.node.spec.ts | 33 +- src/lib/waku_store/index.node.spec.ts | 36 +- 16 files changed, 298 insertions(+), 370 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e0e70dbda..7ee90aa13b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@chainsafe/libp2p-gossipsub": "^2.0.0", "@chainsafe/libp2p-noise": "^7.0.0", "@ethersproject/rlp": "^5.5.0", + "@libp2p/crypto": "^1.0.0", "@libp2p/interface-peer-discovery": "^1.0.0", "@libp2p/interface-peer-id": "^1.0.2", "@libp2p/interface-peer-info": "^1.0.1", @@ -30,7 +31,6 @@ "it-pipe": "^1.1.0", "js-sha3": "^0.8.0", "libp2p": "^0.37.3", - "libp2p-crypto": "^0.21.2", "multiformats": "^9.6.5", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", @@ -39,6 +39,7 @@ }, "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", + "@libp2p/peer-id-factory": "^1.0.15", "@rollup/plugin-commonjs": "^22.0.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^13.3.0", @@ -668,26 +669,6 @@ "uint8arrays": "^3.0.0" } }, - "node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/crypto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", - "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", - "dependencies": { - "@libp2p/interface-keys": "^1.0.2", - "@noble/ed25519": "^1.6.0", - "@noble/secp256k1": "^1.5.4", - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "multiformats": "^9.4.5", - "node-forge": "^1.1.0", - "protons-runtime": "^1.0.4", - "uint8arrays": "^3.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/logger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", @@ -816,26 +797,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", - "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", - "dependencies": { - "@libp2p/interface-keys": "^1.0.2", - "@noble/ed25519": "^1.6.0", - "@noble/secp256k1": "^1.5.4", - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "multiformats": "^9.4.5", - "node-forge": "^1.1.0", - "protons-runtime": "^1.0.4", - "uint8arrays": "^3.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/logger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", @@ -1524,11 +1485,11 @@ "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" }, "node_modules/@libp2p/crypto": { - "version": "0.22.14", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-0.22.14.tgz", - "integrity": "sha512-5RyGh5ovfqrDD8Io3n5rvVnsTHBf1exIMZ/5eBw7Eoy21xkmzdF1Hy701SoSNmiCuTPXYmxT5WMy2VUDBUG6oQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", + "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", "dependencies": { - "@libp2p/interfaces": "^2.0.1", + "@libp2p/interface-keys": "^1.0.2", "@noble/ed25519": "^1.6.0", "@noble/secp256k1": "^1.5.4", "err-code": "^3.0.1", @@ -1543,28 +1504,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/crypto/node_modules/@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", - "dependencies": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", - "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/crypto/node_modules/it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - }, "node_modules/@libp2p/interface-address-manager": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@libp2p/interface-address-manager/-/interface-address-manager-1.0.2.tgz", @@ -2226,26 +2165,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/peer-id-factory/node_modules/@libp2p/crypto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", - "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", - "dependencies": { - "@libp2p/interface-keys": "^1.0.2", - "@noble/ed25519": "^1.6.0", - "@noble/secp256k1": "^1.5.4", - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "multiformats": "^9.4.5", - "node-forge": "^1.1.0", - "protons-runtime": "^1.0.4", - "uint8arrays": "^3.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@libp2p/peer-record": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-1.0.12.tgz", @@ -2274,6 +2193,26 @@ "npm": ">=7.0.0" } }, + "node_modules/@libp2p/peer-record/node_modules/@libp2p/crypto": { + "version": "0.22.14", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-0.22.14.tgz", + "integrity": "sha512-5RyGh5ovfqrDD8Io3n5rvVnsTHBf1exIMZ/5eBw7Eoy21xkmzdF1Hy701SoSNmiCuTPXYmxT5WMy2VUDBUG6oQ==", + "dependencies": { + "@libp2p/interfaces": "^2.0.1", + "@noble/ed25519": "^1.6.0", + "@noble/secp256k1": "^1.5.4", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "multiformats": "^9.4.5", + "node-forge": "^1.1.0", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@libp2p/peer-record/node_modules/@libp2p/interfaces": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", @@ -2393,26 +2332,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/pubsub/node_modules/@libp2p/crypto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", - "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", - "dependencies": { - "@libp2p/interface-keys": "^1.0.2", - "@noble/ed25519": "^1.6.0", - "@noble/secp256k1": "^1.5.4", - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "multiformats": "^9.4.5", - "node-forge": "^1.1.0", - "protons-runtime": "^1.0.4", - "uint8arrays": "^3.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@libp2p/pubsub/node_modules/abortable-iterator": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", @@ -2933,27 +2852,32 @@ "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=", + "dev": true }, "node_modules/@protobufjs/base64": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "dev": true }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "dev": true }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=", + "dev": true }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "dev": true, "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -2962,27 +2886,32 @@ "node_modules/@protobufjs/float": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=", + "dev": true }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=", + "dev": true }, "node_modules/@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=", + "dev": true }, "node_modules/@protobufjs/pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=", + "dev": true }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=", + "dev": true }, "node_modules/@rollup/plugin-commonjs": { "version": "22.0.0", @@ -3395,7 +3324,8 @@ "node_modules/@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==", + "dev": true }, "node_modules/@types/minimist": { "version": "1.2.2", @@ -8762,22 +8692,24 @@ "npm": ">=7.0.0" } }, - "node_modules/libp2p-crypto": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.21.2.tgz", - "integrity": "sha512-EXFrhSpiHtJ+/L8xXDvQNK5VjUMG51u878jzZcaT5XhuN/zFg6PWJFnl/qB2Y2j7eMWnvCRP7Kp+ua2H36cG4g==", + "node_modules/libp2p/node_modules/@libp2p/crypto": { + "version": "0.22.14", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-0.22.14.tgz", + "integrity": "sha512-5RyGh5ovfqrDD8Io3n5rvVnsTHBf1exIMZ/5eBw7Eoy21xkmzdF1Hy701SoSNmiCuTPXYmxT5WMy2VUDBUG6oQ==", "dependencies": { - "@noble/ed25519": "^1.5.1", - "@noble/secp256k1": "^1.3.0", + "@libp2p/interfaces": "^2.0.1", + "@noble/ed25519": "^1.6.0", + "@noble/secp256k1": "^1.5.4", "err-code": "^3.0.1", "iso-random-stream": "^2.0.0", "multiformats": "^9.4.5", - "node-forge": "^1.2.1", - "protobufjs": "^6.11.2", + "node-forge": "^1.1.0", + "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, "node_modules/libp2p/node_modules/@libp2p/interfaces": { @@ -9216,7 +9148,8 @@ "node_modules/long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "dev": true }, "node_modules/loose-envify": { "version": "1.4.0", @@ -10897,6 +10830,7 @@ "version": "6.11.2", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "dev": true, "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", @@ -14135,22 +14069,6 @@ "uint8arrays": "^3.0.0" }, "dependencies": { - "@libp2p/crypto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", - "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", - "requires": { - "@libp2p/interface-keys": "^1.0.2", - "@noble/ed25519": "^1.6.0", - "@noble/secp256k1": "^1.5.4", - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "multiformats": "^9.4.5", - "node-forge": "^1.1.0", - "protons-runtime": "^1.0.4", - "uint8arrays": "^3.0.0" - } - }, "@libp2p/logger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", @@ -14265,22 +14183,6 @@ "uint8arrays": "^3.0.0" }, "dependencies": { - "@libp2p/crypto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", - "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", - "requires": { - "@libp2p/interface-keys": "^1.0.2", - "@noble/ed25519": "^1.6.0", - "@noble/secp256k1": "^1.5.4", - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "multiformats": "^9.4.5", - "node-forge": "^1.1.0", - "protons-runtime": "^1.0.4", - "uint8arrays": "^3.0.0" - } - }, "@libp2p/logger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", @@ -14864,11 +14766,11 @@ } }, "@libp2p/crypto": { - "version": "0.22.14", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-0.22.14.tgz", - "integrity": "sha512-5RyGh5ovfqrDD8Io3n5rvVnsTHBf1exIMZ/5eBw7Eoy21xkmzdF1Hy701SoSNmiCuTPXYmxT5WMy2VUDBUG6oQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", + "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", "requires": { - "@libp2p/interfaces": "^2.0.1", + "@libp2p/interface-keys": "^1.0.2", "@noble/ed25519": "^1.6.0", "@noble/secp256k1": "^1.5.4", "err-code": "^3.0.1", @@ -14877,26 +14779,6 @@ "node-forge": "^1.1.0", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0" - }, - "dependencies": { - "@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", - "requires": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", - "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" - } - }, - "it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - } } }, "@libp2p/interface-address-manager": { @@ -15418,24 +15300,6 @@ "multiformats": "^9.6.3", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0" - }, - "dependencies": { - "@libp2p/crypto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", - "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", - "requires": { - "@libp2p/interface-keys": "^1.0.2", - "@noble/ed25519": "^1.6.0", - "@noble/secp256k1": "^1.5.4", - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "multiformats": "^9.4.5", - "node-forge": "^1.1.0", - "protons-runtime": "^1.0.4", - "uint8arrays": "^3.0.0" - } - } } }, "@libp2p/peer-record": { @@ -15462,6 +15326,22 @@ "varint": "^6.0.0" }, "dependencies": { + "@libp2p/crypto": { + "version": "0.22.14", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-0.22.14.tgz", + "integrity": "sha512-5RyGh5ovfqrDD8Io3n5rvVnsTHBf1exIMZ/5eBw7Eoy21xkmzdF1Hy701SoSNmiCuTPXYmxT5WMy2VUDBUG6oQ==", + "requires": { + "@libp2p/interfaces": "^2.0.1", + "@noble/ed25519": "^1.6.0", + "@noble/secp256k1": "^1.5.4", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "multiformats": "^9.4.5", + "node-forge": "^1.1.0", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + } + }, "@libp2p/interfaces": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", @@ -15569,22 +15449,6 @@ "uint8arrays": "^3.0.0" }, "dependencies": { - "@libp2p/crypto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", - "integrity": "sha512-oV/KaHE8XaJQDH+iDq4Kn4GaVWRsEXJnLXTpN+8hz00tuxxsE3+4g0OYaFCauAYeX1IcGPwMvUhdgujnKzpAbg==", - "requires": { - "@libp2p/interface-keys": "^1.0.2", - "@noble/ed25519": "^1.6.0", - "@noble/secp256k1": "^1.5.4", - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "multiformats": "^9.4.5", - "node-forge": "^1.1.0", - "protons-runtime": "^1.0.4", - "uint8arrays": "^3.0.0" - } - }, "abortable-iterator": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", @@ -15968,27 +15832,32 @@ "@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=", + "dev": true }, "@protobufjs/base64": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "dev": true }, "@protobufjs/codegen": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "dev": true }, "@protobufjs/eventemitter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=", + "dev": true }, "@protobufjs/fetch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "dev": true, "requires": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -15997,27 +15866,32 @@ "@protobufjs/float": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=", + "dev": true }, "@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=", + "dev": true }, "@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=", + "dev": true }, "@protobufjs/pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=", + "dev": true }, "@protobufjs/utf8": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=", + "dev": true }, "@rollup/plugin-commonjs": { "version": "22.0.0", @@ -16385,7 +16259,8 @@ "@types/long": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==", + "dev": true }, "@types/minimist": { "version": "1.2.2", @@ -20412,6 +20287,22 @@ "xsalsa20": "^1.1.0" }, "dependencies": { + "@libp2p/crypto": { + "version": "0.22.14", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-0.22.14.tgz", + "integrity": "sha512-5RyGh5ovfqrDD8Io3n5rvVnsTHBf1exIMZ/5eBw7Eoy21xkmzdF1Hy701SoSNmiCuTPXYmxT5WMy2VUDBUG6oQ==", + "requires": { + "@libp2p/interfaces": "^2.0.1", + "@noble/ed25519": "^1.6.0", + "@noble/secp256k1": "^1.5.4", + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "multiformats": "^9.4.5", + "node-forge": "^1.1.0", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0" + } + }, "@libp2p/interfaces": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", @@ -20467,21 +20358,6 @@ } } }, - "libp2p-crypto": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.21.2.tgz", - "integrity": "sha512-EXFrhSpiHtJ+/L8xXDvQNK5VjUMG51u878jzZcaT5XhuN/zFg6PWJFnl/qB2Y2j7eMWnvCRP7Kp+ua2H36cG4g==", - "requires": { - "@noble/ed25519": "^1.5.1", - "@noble/secp256k1": "^1.3.0", - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "multiformats": "^9.4.5", - "node-forge": "^1.2.1", - "protobufjs": "^6.11.2", - "uint8arrays": "^3.0.0" - } - }, "lilconfig": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", @@ -20761,7 +20637,8 @@ "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "dev": true }, "loose-envify": { "version": "1.4.0", @@ -21999,6 +21876,7 @@ "version": "6.11.2", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "dev": true, "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", diff --git a/package.json b/package.json index 6e997ec502..7ffd4d8b1e 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "@chainsafe/libp2p-gossipsub": "^2.0.0", "@chainsafe/libp2p-noise": "^7.0.0", "@ethersproject/rlp": "^5.5.0", + "@libp2p/crypto": "^1.0.0", "@libp2p/interface-peer-discovery": "^1.0.0", "@libp2p/interface-peer-id": "^1.0.2", "@libp2p/interface-peer-info": "^1.0.1", @@ -87,7 +88,6 @@ "it-pipe": "^1.1.0", "js-sha3": "^0.8.0", "libp2p": "^0.37.3", - "libp2p-crypto": "^0.21.2", "multiformats": "^9.6.5", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", @@ -96,6 +96,7 @@ }, "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", + "@libp2p/peer-id-factory": "^1.0.15", "@rollup/plugin-commonjs": "^22.0.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^13.3.0", diff --git a/src/lib/discovery/fetch_nodes.spec.ts b/src/lib/discovery/fetch_nodes.spec.ts index 367159dcbf..b973a98c11 100644 --- a/src/lib/discovery/fetch_nodes.spec.ts +++ b/src/lib/discovery/fetch_nodes.spec.ts @@ -1,13 +1,13 @@ +import { createSecp256k1PeerId } from "@libp2p/peer-id-factory"; import { Multiaddr } from "@multiformats/multiaddr"; import { expect } from "chai"; -import PeerId from "peer-id"; import { ENR, Waku2 } from "../enr"; import fetchNodesUntilCapabilitiesFulfilled from "./fetch_nodes"; async function createEnr(waku2: Waku2): Promise { - const peerId = await PeerId.create({ keyType: "secp256k1" }); + const peerId = await createSecp256k1PeerId(); const enr = await ENR.createFromPeerId(peerId); enr.setLocationMultiaddr(new Multiaddr("/ip4/18.223.219.100/udp/9000")); enr.multiaddrs = [ diff --git a/src/lib/enr/enr.node.spec.ts b/src/lib/enr/enr.node.spec.ts index db1b43f94e..475129b9e4 100644 --- a/src/lib/enr/enr.node.spec.ts +++ b/src/lib/enr/enr.node.spec.ts @@ -1,7 +1,7 @@ import { expect } from "chai"; import { makeLogFileName, NOISE_KEY_1, Nwaku } from "../../test_utils"; -import { Protocols, Waku } from "../waku"; +import { createWaku, Protocols, Waku } from "../waku"; import { ENR } from "./enr"; @@ -25,9 +25,10 @@ describe("ENR Interop: nwaku", function () { }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(multiAddrWithId); await waku.waitForRemotePeer([Protocols.Relay]); @@ -56,9 +57,10 @@ describe("ENR Interop: nwaku", function () { }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(multiAddrWithId); await waku.waitForRemotePeer([Protocols.Relay]); @@ -87,9 +89,10 @@ describe("ENR Interop: nwaku", function () { }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(multiAddrWithId); await waku.waitForRemotePeer([Protocols.Relay]); diff --git a/src/lib/enr/enr.spec.ts b/src/lib/enr/enr.spec.ts index 0aa40b7cbb..4fb08b2cdb 100644 --- a/src/lib/enr/enr.spec.ts +++ b/src/lib/enr/enr.spec.ts @@ -1,6 +1,6 @@ +import { createSecp256k1PeerId } from "@libp2p/peer-id-factory"; import { Multiaddr } from "@multiformats/multiaddr"; import { assert, expect } from "chai"; -import PeerId from "peer-id"; import { getPublicKey } from "../crypto"; import { bytesToHex, hexToBytes, utf8ToBytes } from "../utils"; @@ -13,9 +13,9 @@ import { Waku2 } from "./waku2_codec"; describe("ENR", function () { describe("Txt codec", () => { it("should encodeTxt and decodeTxt", async () => { - const peerId = await PeerId.create({ keyType: "secp256k1" }); + const peerId = await createSecp256k1PeerId(); const enr = await ENR.createFromPeerId(peerId); - const keypair = createKeypairFromPeerId(peerId); + const keypair = await createKeypairFromPeerId(peerId); enr.setLocationMultiaddr(new Multiaddr("/ip4/18.223.219.100/udp/9000")); enr.multiaddrs = [ new Multiaddr( @@ -109,9 +109,9 @@ describe("ENR", function () { it("should throw error - no id", async () => { try { - const peerId = await PeerId.create({ keyType: "secp256k1" }); + const peerId = await createSecp256k1PeerId(); const enr = await ENR.createFromPeerId(peerId); - const keypair = createKeypairFromPeerId(peerId); + const keypair = await createKeypairFromPeerId(peerId); enr.setLocationMultiaddr(new Multiaddr("/ip4/18.223.219.100/udp/9000")); enr.set("id", new Uint8Array([0])); @@ -307,7 +307,7 @@ describe("ENR", function () { let enr: ENR; before(async function () { - peerId = await PeerId.create({ keyType: "secp256k1" }); + peerId = await createSecp256k1PeerId(); enr = await ENR.createFromPeerId(peerId); enr.ip = ip4; enr.ip6 = ip6; @@ -387,9 +387,9 @@ describe("ENR", function () { let keypair: IKeypair; beforeEach(async function () { - peerId = await PeerId.create({ keyType: "secp256k1" }); + peerId = await createSecp256k1PeerId(); enr = await ENR.createFromPeerId(peerId); - keypair = createKeypairFromPeerId(peerId); + keypair = await createKeypairFromPeerId(peerId); waku2Protocols = { relay: false, store: false, diff --git a/src/lib/enr/enr.ts b/src/lib/enr/enr.ts index 77d19e338a..dff94ae437 100644 --- a/src/lib/enr/enr.ts +++ b/src/lib/enr/enr.ts @@ -1,4 +1,5 @@ import * as RLP from "@ethersproject/rlp"; +import type { PeerId } from "@libp2p/interface-peer-id"; import { Multiaddr } from "@multiformats/multiaddr"; import { convertToBytes, @@ -6,7 +7,6 @@ import { } from "@multiformats/multiaddr/src/convert"; import { names } from "@multiformats/multiaddr/src/protocols-table"; import debug from "debug"; -import PeerId from "peer-id"; import { fromString } from "uint8arrays/from-string"; import { toString } from "uint8arrays/to-string"; import { encode as varintEncode } from "varint"; @@ -79,11 +79,11 @@ export class ENR extends Map { }); } - static createFromPeerId( + static async createFromPeerId( peerId: PeerId, kvs: Record = {} ): Promise { - const keypair = createKeypairFromPeerId(peerId); + const keypair = await createKeypairFromPeerId(peerId); switch (keypair.type) { case KeypairType.secp256k1: return ENR.createV4(keypair.publicKey, kvs); diff --git a/src/lib/enr/keypair/index.spec.ts b/src/lib/enr/keypair/index.spec.ts index a18c2a9661..ce9437f341 100644 --- a/src/lib/enr/keypair/index.spec.ts +++ b/src/lib/enr/keypair/index.spec.ts @@ -1,20 +1,22 @@ +import { Secp256k1PublicKey } from "@libp2p/crypto/dist/src/keys/secp256k1-class"; +import { peerIdFromKeys } from "@libp2p/peer-id"; import { expect } from "chai"; -import { keys } from "libp2p-crypto"; -import PeerId from "peer-id"; -import { createPeerIdFromKeypair, generateKeypair, KeypairType } from "./index"; - -const { supportedKeys } = keys; +import { + createPeerIdFromKeypair, + generateKeypair, + KeypairType, + Secp256k1Keypair, +} from "./index"; describe("createPeerIdFromKeypair", function () { it("should properly create a PeerId from a secp256k1 keypair with private key", async function () { const keypair = await generateKeypair(KeypairType.secp256k1); - const privKey = new supportedKeys.secp256k1.Secp256k1PrivateKey( - keypair.privateKey, - keypair.publicKey - ); - const expectedPeerId = await PeerId.createFromPrivKey(privKey.bytes); + const expectedPeerId = await peerIdFromKeys( + keypair.publicKey, + keypair.privateKey + ); const actualPeerId = await createPeerIdFromKeypair(keypair); expect(actualPeerId).to.be.deep.equal(expectedPeerId); @@ -22,12 +24,10 @@ describe("createPeerIdFromKeypair", function () { it("should properly create a PeerId from a secp256k1 keypair without private key", async function () { const keypair = await generateKeypair(KeypairType.secp256k1); - delete (keypair as any)._privateKey; - const pubKey = new supportedKeys.secp256k1.Secp256k1PublicKey( - keypair.publicKey - ); + delete (keypair as Secp256k1Keypair)._privateKey; + const pubKey = new Secp256k1PublicKey(keypair.publicKey); - const expectedPeerId = await PeerId.createFromPubKey(pubKey.bytes); + const expectedPeerId = await peerIdFromKeys(pubKey.bytes); const actualPeerId = await createPeerIdFromKeypair(keypair); expect(actualPeerId).to.be.deep.equal(expectedPeerId); diff --git a/src/lib/enr/keypair/index.ts b/src/lib/enr/keypair/index.ts index 8dc60ad9a6..231e639d67 100644 --- a/src/lib/enr/keypair/index.ts +++ b/src/lib/enr/keypair/index.ts @@ -1,16 +1,20 @@ -import { keys } from "libp2p-crypto"; -import { identity } from "multiformats/hashes/identity"; -import PeerId from "peer-id"; +import { + marshalPrivateKey, + marshalPublicKey, + unmarshalPrivateKey, + unmarshalPublicKey, +} from "@libp2p/crypto/keys"; +import type { PeerId } from "@libp2p/interface-peer-id"; +import { peerIdFromKeys } from "@libp2p/peer-id"; import { Secp256k1Keypair } from "./secp256k1"; import { IKeypair, KeypairType } from "./types"; -const { keysPBM, supportedKeys } = keys; - export const ERR_TYPE_NOT_IMPLEMENTED = "Keypair type not implemented"; export * from "./types"; export * from "./secp256k1"; +// TODO: Check if @libp2p/crypto methods can be used instead. export async function generateKeypair(type: KeypairType): Promise { switch (type) { case KeypairType.secp256k1: @@ -39,30 +43,44 @@ export async function createPeerIdFromKeypair( switch (keypair.type) { case KeypairType.secp256k1: { // manually create a peer id to avoid expensive ops - const privKey = keypair.hasPrivateKey() - ? new supportedKeys.secp256k1.Secp256k1PrivateKey( - keypair.privateKey, - keypair.publicKey - ) + const privateKey = keypair.hasPrivateKey() + ? marshalPrivateKey({ bytes: keypair.privateKey }) : undefined; - const pubKey = new supportedKeys.secp256k1.Secp256k1PublicKey( - keypair.publicKey + return peerIdFromKeys( + marshalPublicKey({ bytes: keypair.publicKey }), + privateKey ); - const id = await identity.digest(pubKey.bytes); - return new PeerId(id.bytes, privKey, pubKey); } default: throw new Error(ERR_TYPE_NOT_IMPLEMENTED); } } -export function createKeypairFromPeerId(peerId: PeerId): IKeypair { - // pub/private key bytes from peer-id are encoded in protobuf format - const pub = keysPBM.PublicKey.decode(peerId.pubKey.bytes); - return createKeypair( - pub.Type as KeypairType, - peerId.privKey ? peerId.privKey.marshal() : undefined, - pub.Data - ); +export async function createKeypairFromPeerId( + peerId: PeerId +): Promise { + let keypairType; + switch (peerId.type) { + case "RSA": + keypairType = KeypairType.rsa; + break; + case "Ed25519": + keypairType = KeypairType.ed25519; + break; + case "secp256k1": + keypairType = KeypairType.secp256k1; + break; + default: + throw new Error("Unsupported peer id type"); + } + + const publicKey = peerId.publicKey + ? unmarshalPublicKey(peerId.publicKey) + : undefined; + const privateKey = peerId.privateKey + ? await unmarshalPrivateKey(peerId.privateKey) + : undefined; + + return createKeypair(keypairType, privateKey?.bytes, publicKey?.bytes); } diff --git a/src/lib/waku.node.spec.ts b/src/lib/waku.node.spec.ts index 2d38464638..40986c2c45 100644 --- a/src/lib/waku.node.spec.ts +++ b/src/lib/waku.node.spec.ts @@ -10,7 +10,7 @@ import { import { delay } from "../test_utils/delay"; import { generateSymmetricKey } from "./crypto"; -import { Protocols, Waku } from "./waku"; +import { createWaku, Protocols, Waku } from "./waku"; import { WakuMessage } from "./waku_message"; const TestContentTopic = "/test/1/waku/utf8"; @@ -31,9 +31,10 @@ describe("Waku Dial [node only]", function () { await nwaku.start(); const multiAddrWithId = await nwaku.getMultiaddrWithId(); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(multiAddrWithId); await waku.waitForRemotePeer([Protocols.Relay]); @@ -58,10 +59,11 @@ describe("Waku Dial [node only]", function () { await nwaku.start(); const multiAddrWithId = await nwaku.getMultiaddrWithId(); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, bootstrap: { peers: [multiAddrWithId] }, }); + await waku.start(); const connectedPeerID: PeerId = await new Promise((resolve) => { waku.libp2p.connectionManager.addEventListener( @@ -81,7 +83,7 @@ describe("Waku Dial [node only]", function () { nwaku = new Nwaku(makeLogFileName(this)); await nwaku.start(); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, bootstrap: { getPeers: async () => { @@ -89,6 +91,7 @@ describe("Waku Dial [node only]", function () { }, }, }); + await waku.start(); const connectedPeerID: PeerId = await new Promise((resolve) => { waku.libp2p.connectionManager.addEventListener( @@ -117,11 +120,13 @@ describe("Decryption Keys", () => { beforeEach(async function () { this.timeout(5000); [waku1, waku2] = await Promise.all([ - Waku.create({ staticNoiseKey: NOISE_KEY_1 }), - Waku.create({ + createWaku({ staticNoiseKey: NOISE_KEY_1 }).then((waku) => + waku.start().then(() => waku) + ), + createWaku({ staticNoiseKey: NOISE_KEY_2, libp2p: { addresses: { listen: ["/ip4/0.0.0.0/tcp/0/ws"] } }, - }), + }).then((waku) => waku.start().then(() => waku)), ]); waku1.addPeerToAddressBook( @@ -191,9 +196,10 @@ describe("Wait for remote peer / get peers", function () { await nwaku.start(); const multiAddrWithId = await nwaku.getMultiaddrWithId(); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(multiAddrWithId); await delay(1000); await waku.waitForRemotePeer([Protocols.Relay]); @@ -210,9 +216,10 @@ describe("Wait for remote peer / get peers", function () { await nwaku.start(); const multiAddrWithId = await nwaku.getMultiaddrWithId(); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); const waitPromise = waku.waitForRemotePeer([Protocols.Relay]); await delay(1000); @@ -229,19 +236,21 @@ describe("Wait for remote peer / get peers", function () { it("Relay - times out", function (done) { this.timeout(5000); - Waku.create({ + createWaku({ staticNoiseKey: NOISE_KEY_1, - }).then((waku) => { - waku.waitForRemotePeer([Protocols.Relay], 200).then( - () => { - throw "Promise expected to reject on time out"; - }, - (reason) => { - expect(reason).to.eq("Timed out waiting for a remote peer."); - done(); - } - ); - }); + }) + .then((waku) => waku.start().then(() => waku)) + .then((waku) => { + waku.waitForRemotePeer([Protocols.Relay], 200).then( + () => { + throw "Promise expected to reject on time out"; + }, + (reason) => { + expect(reason).to.eq("Timed out waiting for a remote peer."); + done(); + } + ); + }); }); it("Store - dialed first", async function () { @@ -250,9 +259,10 @@ describe("Wait for remote peer / get peers", function () { await nwaku.start({ persistMessages: true }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(multiAddrWithId); await delay(1000); await waku.waitForRemotePeer([Protocols.Store]); @@ -270,9 +280,10 @@ describe("Wait for remote peer / get peers", function () { await nwaku.start({ persistMessages: true }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); const waitPromise = waku.waitForRemotePeer([Protocols.Store], 2000); await delay(1000); await waku.dial(multiAddrWithId); @@ -292,9 +303,10 @@ describe("Wait for remote peer / get peers", function () { await nwaku.start({ lightpush: true }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(multiAddrWithId); await waku.waitForRemotePeer([Protocols.LightPush]); @@ -314,9 +326,10 @@ describe("Wait for remote peer / get peers", function () { await nwaku.start({ filter: true }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(multiAddrWithId); await waku.waitForRemotePeer([Protocols.Filter]); diff --git a/src/lib/waku.spec.ts b/src/lib/waku.spec.ts index 2da9423cd0..21d181a4ee 100644 --- a/src/lib/waku.spec.ts +++ b/src/lib/waku.spec.ts @@ -1,7 +1,7 @@ import type { PeerId } from "@libp2p/interface-peer-id"; import { expect } from "chai"; -import { Waku } from "./waku"; +import { createWaku, Waku } from "./waku"; describe("Waku Dial", function () { describe("Bootstrap [live data]", function () { @@ -22,9 +22,10 @@ describe("Waku Dial", function () { // This dependence must be removed once DNS discovery is implemented this.timeout(20_000); - waku = await Waku.create({ + waku = await createWaku({ bootstrap: { default: true }, }); + await waku.start(); const connectedPeerID: PeerId = await new Promise((resolve) => { waku.libp2p.connectionManager.addEventListener( diff --git a/src/lib/waku.ts b/src/lib/waku.ts index 0963e09e0b..90896eb26e 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -168,10 +168,6 @@ export class Waku { }); } - start(): void { - this.libp2p.start(); - } - /** * Dials to the provided peer. * @@ -225,6 +221,10 @@ export class Waku { this.libp2p.peerStore.addressBook.set(peer, addresses); } + async start(): Promise { + await this.libp2p.start(); + } + async stop(): Promise { this.stopAllKeepAlives(); await this.libp2p.stop(); @@ -444,9 +444,10 @@ export class Waku { const awaitTimeout = (ms: number, rejectReason: string): Promise => new Promise((_resolve, reject) => setTimeout(() => reject(rejectReason), ms)); -const rejectOnTimeout = ( - promise: Promise, +async function rejectOnTimeout( + promise: Promise, timeoutMs: number, rejectReason: string -): Promise => - Promise.race([promise, awaitTimeout(timeoutMs, rejectReason)]); +): Promise { + await Promise.race([promise, awaitTimeout(timeoutMs, rejectReason)]); +} diff --git a/src/lib/waku_filter/index.node.spec.ts b/src/lib/waku_filter/index.node.spec.ts index a9dc05e3dc..c077b41964 100644 --- a/src/lib/waku_filter/index.node.spec.ts +++ b/src/lib/waku_filter/index.node.spec.ts @@ -3,7 +3,7 @@ import debug from "debug"; import { makeLogFileName, NOISE_KEY_1, Nwaku } from "../../test_utils"; import { delay } from "../../test_utils/delay"; -import { Protocols, Waku } from "../waku"; +import { createWaku, Protocols, Waku } from "../waku"; import { WakuMessage } from "../waku_message"; const log = debug("waku:test"); @@ -23,10 +23,11 @@ describe("Waku Filter", () => { this.timeout(10000); nwaku = new Nwaku(makeLogFileName(this)); await nwaku.start({ filter: true }); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, libp2p: { addresses: { listen: ["/ip4/0.0.0.0/tcp/0/ws"] } }, }); + await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); await waku.waitForRemotePeer([Protocols.Filter, Protocols.Relay]); }); diff --git a/src/lib/waku_light_push/index.node.spec.ts b/src/lib/waku_light_push/index.node.spec.ts index 8bbd0be156..2d5e888f55 100644 --- a/src/lib/waku_light_push/index.node.spec.ts +++ b/src/lib/waku_light_push/index.node.spec.ts @@ -3,7 +3,7 @@ import debug from "debug"; import { makeLogFileName, NOISE_KEY_1, Nwaku } from "../../test_utils"; import { delay } from "../../test_utils/delay"; -import { Protocols, Waku } from "../waku"; +import { createWaku, Protocols, Waku } from "../waku"; import { WakuMessage } from "../waku_message"; const dbg = debug("waku:test:lightpush"); @@ -25,9 +25,10 @@ describe("Waku Light Push [node only]", () => { nwaku = new Nwaku(makeLogFileName(this)); await nwaku.start({ lightpush: true }); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); await waku.waitForRemotePeer([Protocols.LightPush]); @@ -60,10 +61,11 @@ describe("Waku Light Push [node only]", () => { nwaku = new Nwaku(makeLogFileName(this)); await nwaku.start({ lightpush: true, topics: customPubSubTopic }); - waku = await Waku.create({ + waku = await createWaku({ pubSubTopic: customPubSubTopic, staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); await waku.waitForRemotePeer([Protocols.LightPush]); diff --git a/src/lib/waku_message/index.node.spec.ts b/src/lib/waku_message/index.node.spec.ts index e3e0283924..db23835753 100644 --- a/src/lib/waku_message/index.node.spec.ts +++ b/src/lib/waku_message/index.node.spec.ts @@ -14,7 +14,7 @@ import { getPublicKey, } from "../crypto"; import { bytesToHex, bytesToUtf8, hexToBytes, utf8ToBytes } from "../utils"; -import { Protocols, Waku } from "../waku"; +import { createWaku, Protocols, Waku } from "../waku"; import { DecryptionMethod, WakuMessage } from "./index"; @@ -29,9 +29,10 @@ describe("Waku Message [node only]", function () { beforeEach(async function () { this.timeout(30_000); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); nwaku = new Nwaku(makeLogFileName(this)); dbg("Starting nwaku node"); diff --git a/src/lib/waku_relay/index.node.spec.ts b/src/lib/waku_relay/index.node.spec.ts index e5f6e0ff66..e2a99665b8 100644 --- a/src/lib/waku_relay/index.node.spec.ts +++ b/src/lib/waku_relay/index.node.spec.ts @@ -15,7 +15,7 @@ import { generateSymmetricKey, getPublicKey, } from "../crypto"; -import { Protocols, Waku } from "../waku"; +import { createWaku, Protocols, Waku } from "../waku"; import { DecryptionMethod, WakuMessage } from "../waku_message"; const log = debug("waku:test"); @@ -39,11 +39,13 @@ describe("Waku Relay [node only]", () => { log("Starting JS Waku instances"); [waku1, waku2] = await Promise.all([ - Waku.create({ staticNoiseKey: NOISE_KEY_1 }), - Waku.create({ + createWaku({ staticNoiseKey: NOISE_KEY_1 }).then((waku) => + waku.start().then(() => waku) + ), + createWaku({ staticNoiseKey: NOISE_KEY_2, libp2p: { addresses: { listen: ["/ip4/0.0.0.0/tcp/0/ws"] } }, - }), + }).then((waku) => waku.start().then(() => waku)), ]); log("Instances started, adding waku2 to waku1's address book"); waku1.addPeerToAddressBook( @@ -258,18 +260,18 @@ describe("Waku Relay [node only]", () => { // 1 and 2 uses a custom pubsub const [waku1, waku2, waku3] = await Promise.all([ - Waku.create({ + createWaku({ pubSubTopic: pubSubTopic, staticNoiseKey: NOISE_KEY_1, - }), - Waku.create({ + }).then((waku) => waku.start().then(() => waku)), + createWaku({ pubSubTopic: pubSubTopic, staticNoiseKey: NOISE_KEY_2, libp2p: { addresses: { listen: ["/ip4/0.0.0.0/tcp/0/ws"] } }, - }), - Waku.create({ + }).then((waku) => waku.start().then(() => waku)), + createWaku({ staticNoiseKey: NOISE_KEY_2, - }), + }).then((waku) => waku.start().then(() => waku)), ]); waku1.addPeerToAddressBook( @@ -323,9 +325,10 @@ describe("Waku Relay [node only]", () => { beforeEach(async function () { this.timeout(30_000); - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); nwaku = new Nwaku(this.test?.ctx?.currentTest?.title + ""); await nwaku.start(); @@ -415,12 +418,12 @@ describe("Waku Relay [node only]", () => { it("Js publishes, other Js receives", async function () { this.timeout(60_000); [waku1, waku2] = await Promise.all([ - Waku.create({ + createWaku({ staticNoiseKey: NOISE_KEY_1, - }), - Waku.create({ + }).then((waku) => waku.start().then(() => waku)), + createWaku({ staticNoiseKey: NOISE_KEY_2, - }), + }).then((waku) => waku.start().then(() => waku)), ]); nwaku = new Nwaku(makeLogFileName(this)); diff --git a/src/lib/waku_store/index.node.spec.ts b/src/lib/waku_store/index.node.spec.ts index 76669dd68f..2a99e5c896 100644 --- a/src/lib/waku_store/index.node.spec.ts +++ b/src/lib/waku_store/index.node.spec.ts @@ -12,7 +12,7 @@ import { generateSymmetricKey, getPublicKey, } from "../crypto"; -import { Protocols, Waku } from "../waku"; +import { createWaku, Protocols, Waku } from "../waku"; import { DecryptionMethod, WakuMessage } from "../waku_message"; import { PageDirection } from "./history_rpc"; @@ -46,9 +46,10 @@ describe("Waku Store", () => { ).to.be.true; } - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); await waku.waitForRemotePeer([Protocols.Store]); const messages = await waku.store.queryHistory([]); @@ -78,9 +79,10 @@ describe("Waku Store", () => { ).to.be.true; } - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); await waku.waitForRemotePeer([Protocols.Store]); @@ -117,9 +119,10 @@ describe("Waku Store", () => { ).to.be.true; } - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); await waku.waitForRemotePeer([Protocols.Store]); @@ -153,9 +156,10 @@ describe("Waku Store", () => { ).to.be.true; } - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); await waku.waitForRemotePeer([Protocols.Store]); @@ -191,10 +195,11 @@ describe("Waku Store", () => { ).to.be.true; } - waku = await Waku.create({ + waku = await createWaku({ pubSubTopic: customPubSubTopic, staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); await waku.waitForRemotePeer([Protocols.Store]); @@ -259,12 +264,12 @@ describe("Waku Store", () => { dbg("Messages have been encrypted"); const [waku1, waku2, nimWakuMultiaddr] = await Promise.all([ - Waku.create({ + createWaku({ staticNoiseKey: NOISE_KEY_1, - }), - Waku.create({ + }).then((waku) => waku.start().then(() => waku)), + createWaku({ staticNoiseKey: NOISE_KEY_2, - }), + }).then((waku) => waku.start().then(() => waku)), nwaku.getMultiaddrWithId(), ]); @@ -363,12 +368,12 @@ describe("Waku Store", () => { dbg("Messages have been encrypted"); const [waku1, waku2, nimWakuMultiaddr] = await Promise.all([ - Waku.create({ + createWaku({ staticNoiseKey: NOISE_KEY_1, - }), - Waku.create({ + }).then((waku) => waku.start().then(() => waku)), + createWaku({ staticNoiseKey: NOISE_KEY_2, - }), + }).then((waku) => waku.start().then(() => waku)), nwaku.getMultiaddrWithId(), ]); @@ -450,9 +455,10 @@ describe("Waku Store", () => { ).to.be.true; } - waku = await Waku.create({ + waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, }); + await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); await waku.waitForRemotePeer([Protocols.Store]); From b9aef19a476a0d630d25b1a6db4067cc22757911 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Thu, 23 Jun 2022 14:19:22 +1000 Subject: [PATCH 10/68] fix: new spellings --- .cspell.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.cspell.json b/.cspell.json index ad88a31fff..9afbeb31b4 100644 --- a/.cspell.json +++ b/.cspell.json @@ -54,11 +54,14 @@ "multiaddr", "multiaddresses", "multiaddrs", + "multicodec", "multicodecs", + "multiformats", "mplex", "multihashes", "muxed", "muxer", + "muxers", "mvps", "nodekey", "nwaku", @@ -87,6 +90,7 @@ "transpiled", "typedoc", "unencrypted", + "unmarshal", "unmount", "unmounts", "untracked", From 157e42e148be322199db0783eb68cece86190d48 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Thu, 23 Jun 2022 15:37:30 +1000 Subject: [PATCH 11/68] fix: Do not use `names` import --- package-lock.json | 3 +- package.json | 3 +- src/lib/enr/enr.ts | 52 ++++++++--------------- src/lib/enr/multiaddr_from_fields.spec.ts | 15 +++++++ src/lib/enr/multiaddr_from_fields.ts | 17 ++++++++ 5 files changed, 52 insertions(+), 38 deletions(-) create mode 100644 src/lib/enr/multiaddr_from_fields.spec.ts create mode 100644 src/lib/enr/multiaddr_from_fields.ts diff --git a/package-lock.json b/package-lock.json index 7ee90aa13b..bb4b8e86d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,8 +34,7 @@ "multiformats": "^9.6.5", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", - "uuid": "^8.3.2", - "varint": "^6.0.0" + "uuid": "^8.3.2" }, "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", diff --git a/package.json b/package.json index 7ffd4d8b1e..4fe2e97049 100644 --- a/package.json +++ b/package.json @@ -91,8 +91,7 @@ "multiformats": "^9.6.5", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", - "uuid": "^8.3.2", - "varint": "^6.0.0" + "uuid": "^8.3.2" }, "devDependencies": { "@istanbuljs/nyc-config-typescript": "^1.0.1", diff --git a/src/lib/enr/enr.ts b/src/lib/enr/enr.ts index dff94ae437..5292daab9b 100644 --- a/src/lib/enr/enr.ts +++ b/src/lib/enr/enr.ts @@ -4,12 +4,10 @@ import { Multiaddr } from "@multiformats/multiaddr"; import { convertToBytes, convertToString, -} from "@multiformats/multiaddr/src/convert"; -import { names } from "@multiformats/multiaddr/src/protocols-table"; +} from "@multiformats/multiaddr/convert"; import debug from "debug"; import { fromString } from "uint8arrays/from-string"; import { toString } from "uint8arrays/to-string"; -import { encode as varintEncode } from "varint"; import { compressPublicKey, keccak256, verifySignature } from "../crypto"; import { bytesToHex, bytesToUtf8, hexToBytes, utf8ToBytes } from "../utils"; @@ -22,6 +20,7 @@ import { IKeypair, KeypairType, } from "./keypair"; +import { mulitaddrFromFields } from "./multiaddr_from_fields"; import { decodeMultiaddrs, encodeMultiaddrs } from "./multiaddrs_codec"; import { ENRKey, ENRValue, NodeId, SequenceNumber } from "./types"; import * as v4 from "./v4"; @@ -192,7 +191,7 @@ export class ENR extends Map { get ip(): string | undefined { const raw = this.get("ip"); if (raw) { - return convertToString(names.ip4.code, raw) as string; + return convertToString("ip4", raw) as string; } else { return undefined; } @@ -200,7 +199,7 @@ export class ENR extends Map { set ip(ip: string | undefined) { if (ip) { - this.set("ip", convertToBytes(names.ip4.code, ip)); + this.set("ip", convertToBytes("ip4", ip)); } else { this.delete("ip"); } @@ -209,7 +208,7 @@ export class ENR extends Map { get tcp(): number | undefined { const raw = this.get("tcp"); if (raw) { - return Number(convertToString(names.tcp.code, raw)); + return Number(convertToString("tcp", raw)); } else { return undefined; } @@ -219,14 +218,14 @@ export class ENR extends Map { if (port === undefined) { this.delete("tcp"); } else { - this.set("tcp", convertToBytes(names.tcp.code, port.toString(10))); + this.set("tcp", convertToBytes("tcp", port.toString(10))); } } get udp(): number | undefined { const raw = this.get("udp"); if (raw) { - return Number(convertToString(names.udp.code, raw)); + return Number(convertToString("udp", raw)); } else { return undefined; } @@ -236,14 +235,14 @@ export class ENR extends Map { if (port === undefined) { this.delete("udp"); } else { - this.set("udp", convertToBytes(names.udp.code, port.toString(10))); + this.set("udp", convertToBytes("udp", port.toString(10))); } } get ip6(): string | undefined { const raw = this.get("ip6"); if (raw) { - return convertToString(names.ip6.code, raw) as string; + return convertToString("ip6", raw) as string; } else { return undefined; } @@ -251,7 +250,7 @@ export class ENR extends Map { set ip6(ip: string | undefined) { if (ip) { - this.set("ip6", convertToBytes(names.ip6.code, ip)); + this.set("ip6", convertToBytes("ip6", ip)); } else { this.delete("ip6"); } @@ -260,7 +259,7 @@ export class ENR extends Map { get tcp6(): number | undefined { const raw = this.get("tcp6"); if (raw) { - return Number(convertToString(names.tcp.code, raw)); + return Number(convertToString("tcp", raw)); } else { return undefined; } @@ -270,14 +269,14 @@ export class ENR extends Map { if (port === undefined) { this.delete("tcp6"); } else { - this.set("tcp6", convertToBytes(names.tcp.code, port.toString(10))); + this.set("tcp6", convertToBytes("tcp", port.toString(10))); } } get udp6(): number | undefined { const raw = this.get("udp6"); if (raw) { - return Number(convertToString(names.udp.code, raw)); + return Number(convertToString("udp", raw)); } else { return undefined; } @@ -287,7 +286,7 @@ export class ENR extends Map { if (port === undefined) { this.delete("udp6"); } else { - this.set("udp6", convertToBytes(names.udp.code, port.toString(10))); + this.set("udp6", convertToBytes("udp", port.toString(10))); } } @@ -361,29 +360,14 @@ export class ENR extends Map { protoName = "tcp"; protoVal = isIpv6 ? this.get("tcp6") : this.get("tcp"); } else { - return undefined; + return; } + if (!protoVal) { - return undefined; + return; } - // Create raw multiaddr buffer - // multiaddr length is: - // 1 byte for the ip protocol (ip4 or ip6) - // N bytes for the ip address - // 1 or 2 bytes for the protocol as buffer (tcp or udp) - // 2 bytes for the port - const ipMa = names[isIpv6 ? "ip6" : "ip4"]; - const ipByteLen = ipMa.size / 8; - const protoMa = names[protoName]; - const protoBuf = varintEncode(protoMa.code); - const maBuf = new Uint8Array(3 + ipByteLen + protoBuf.length); - maBuf[0] = ipMa.code; - maBuf.set(ipVal, 1); - maBuf.set(protoBuf, 1 + ipByteLen); - maBuf.set(protoVal, 1 + ipByteLen + protoBuf.length); - - return new Multiaddr(maBuf); + return mulitaddrFromFields(isIpv6, protoName, ipVal, protoVal); } setLocationMultiaddr(multiaddr: Multiaddr): void { diff --git a/src/lib/enr/multiaddr_from_fields.spec.ts b/src/lib/enr/multiaddr_from_fields.spec.ts new file mode 100644 index 0000000000..a0a706c9c8 --- /dev/null +++ b/src/lib/enr/multiaddr_from_fields.spec.ts @@ -0,0 +1,15 @@ +import { convertToBytes } from "@multiformats/multiaddr/convert"; +import { expect } from "chai"; + +import { mulitaddrFromFields } from "./multiaddr_from_fields"; + +describe("Multiaddr from fields", () => { + it("tcp ip4 address", function () { + const ipBytes = convertToBytes("ip4", "1.2.3.4"); + const portBytes = convertToBytes("tcp", "3333"); + + const ma = mulitaddrFromFields(false, "tcp", ipBytes, portBytes); + + expect(ma.toString()).to.eq("/ip4/1.2.3.4/tcp/3333"); + }); +}); diff --git a/src/lib/enr/multiaddr_from_fields.ts b/src/lib/enr/multiaddr_from_fields.ts new file mode 100644 index 0000000000..0befa735d0 --- /dev/null +++ b/src/lib/enr/multiaddr_from_fields.ts @@ -0,0 +1,17 @@ +import { Multiaddr } from "@multiformats/multiaddr"; + +export function mulitaddrFromFields( + isIpv6: boolean, + protocol: string, + ipBytes: Uint8Array, + portBytes: Uint8Array +): Multiaddr { + const familyStr = isIpv6 ? "ip6" : "ip4"; + let ma = new Multiaddr("/" + familyStr); + + ma = ma.encapsulate(new Multiaddr(ipBytes)); + ma = ma.encapsulate(new Multiaddr("/" + protocol)); + ma = ma.encapsulate(portBytes); + + return ma; +} From ab9919ba6d3e683e116b9a32a39f96cf4c2a5f65 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Thu, 23 Jun 2022 15:42:25 +1000 Subject: [PATCH 12/68] fix: Imports paths Import paths were not valid. --- src/lib/discovery/bootstrap.ts | 2 +- src/lib/discovery/random_subset.ts | 24 +++++++++++++++++++++--- src/lib/enr/keypair/index.spec.ts | 6 ++++-- src/lib/waku.ts | 4 ++-- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/lib/discovery/bootstrap.ts b/src/lib/discovery/bootstrap.ts index 7f3662d562..6bec0ac5f6 100644 --- a/src/lib/discovery/bootstrap.ts +++ b/src/lib/discovery/bootstrap.ts @@ -5,7 +5,7 @@ import type { import { symbol } from "@libp2p/interface-peer-discovery"; import type { PeerInfo } from "@libp2p/interface-peer-info"; import { CustomEvent, EventEmitter } from "@libp2p/interfaces/events"; -import { peerIdFromString } from "@libp2p/peer-id/src"; +import { peerIdFromString } from "@libp2p/peer-id"; import { Multiaddr } from "@multiformats/multiaddr"; import debug from "debug"; diff --git a/src/lib/discovery/random_subset.ts b/src/lib/discovery/random_subset.ts index 27899cfd09..20d0ca83ce 100644 --- a/src/lib/discovery/random_subset.ts +++ b/src/lib/discovery/random_subset.ts @@ -1,12 +1,30 @@ -import { shuffle } from "@chainsafe/libp2p-gossipsub/utils/shuffle"; - +/** + * Return pseudo random subset of the input. + */ export function getPseudoRandomSubset( values: T[], wantedNumber: number ): T[] { - if (values.length <= wantedNumber) { + if (values.length <= wantedNumber || values.length <= 1) { return values; } return shuffle(values).slice(0, wantedNumber); } + +function shuffle(arr: T[]): T[] { + if (arr.length <= 1) { + return arr; + } + const randInt = (): number => { + return Math.floor(Math.random() * Math.floor(arr.length)); + }; + + for (let i = 0; i < arr.length; i++) { + const j = randInt(); + const tmp = arr[i]; + arr[i] = arr[j]; + arr[j] = tmp; + } + return arr; +} diff --git a/src/lib/enr/keypair/index.spec.ts b/src/lib/enr/keypair/index.spec.ts index ce9437f341..9f9a54ba6d 100644 --- a/src/lib/enr/keypair/index.spec.ts +++ b/src/lib/enr/keypair/index.spec.ts @@ -1,4 +1,4 @@ -import { Secp256k1PublicKey } from "@libp2p/crypto/dist/src/keys/secp256k1-class"; +import { supportedKeys } from "@libp2p/crypto/keys"; import { peerIdFromKeys } from "@libp2p/peer-id"; import { expect } from "chai"; @@ -25,7 +25,9 @@ describe("createPeerIdFromKeypair", function () { it("should properly create a PeerId from a secp256k1 keypair without private key", async function () { const keypair = await generateKeypair(KeypairType.secp256k1); delete (keypair as Secp256k1Keypair)._privateKey; - const pubKey = new Secp256k1PublicKey(keypair.publicKey); + const pubKey = new supportedKeys.secp256k1.Secp256k1PublicKey( + keypair.publicKey + ); const expectedPeerId = await peerIdFromKeys(pubKey.bytes); const actualPeerId = await createPeerIdFromKeypair(keypair); diff --git a/src/lib/waku.ts b/src/lib/waku.ts index 90896eb26e..8e538e133a 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -3,7 +3,7 @@ import type { PeerId } from "@libp2p/interface-peer-id"; import { Mplex } from "@libp2p/mplex"; import { peerIdFromString } from "@libp2p/peer-id"; import { WebSockets } from "@libp2p/websockets"; -import filters from "@libp2p/websockets/filters"; +import { all as filterAll } from "@libp2p/websockets/filters"; import { Multiaddr, multiaddr } from "@multiformats/multiaddr"; import debug from "debug"; import { createLibp2p, Libp2p, Libp2pOptions } from "libp2p"; @@ -91,7 +91,7 @@ export async function createWaku(options?: CreateOptions): Promise { // TODO: Use options const libp2pOpts = { - transports: new WebSockets({ filter: filters.all }), + transports: new WebSockets({ filter: filterAll }), streamMuxers: [new Mplex()], pubsub: new WakuRelay(), connectionEncryption: [new Noise()], From 6d5c2acb99df843ebc501f44e9c4560b852c6ac9 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Thu, 23 Jun 2022 15:51:15 +1000 Subject: [PATCH 13/68] fix: Multiaddr from fields function --- src/lib/enr/enr.ts | 9 +++++++-- src/lib/enr/multiaddr_from_fields.spec.ts | 11 ++++++++++- src/lib/enr/multiaddr_from_fields.ts | 18 +++++++++++------- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/lib/enr/enr.ts b/src/lib/enr/enr.ts index 5292daab9b..990f7cdbfa 100644 --- a/src/lib/enr/enr.ts +++ b/src/lib/enr/enr.ts @@ -347,7 +347,7 @@ export class ENR extends Map { const isIpv6 = protocol.endsWith("6"); const ipVal = this.get(isIpv6 ? "ip6" : "ip"); if (!ipVal) { - return undefined; + return; } const isUdp = protocol.startsWith("udp"); @@ -367,7 +367,12 @@ export class ENR extends Map { return; } - return mulitaddrFromFields(isIpv6, protoName, ipVal, protoVal); + return mulitaddrFromFields( + isIpv6 ? "ip6" : "ip4", + protoName, + ipVal, + protoVal + ); } setLocationMultiaddr(multiaddr: Multiaddr): void { diff --git a/src/lib/enr/multiaddr_from_fields.spec.ts b/src/lib/enr/multiaddr_from_fields.spec.ts index a0a706c9c8..959d2e511a 100644 --- a/src/lib/enr/multiaddr_from_fields.spec.ts +++ b/src/lib/enr/multiaddr_from_fields.spec.ts @@ -8,8 +8,17 @@ describe("Multiaddr from fields", () => { const ipBytes = convertToBytes("ip4", "1.2.3.4"); const portBytes = convertToBytes("tcp", "3333"); - const ma = mulitaddrFromFields(false, "tcp", ipBytes, portBytes); + const ma = mulitaddrFromFields("ip4", "tcp", ipBytes, portBytes); expect(ma.toString()).to.eq("/ip4/1.2.3.4/tcp/3333"); }); + + it("udp ip6 address", function () { + const ipBytes = convertToBytes("ip6", "2345:425:2ca1::5673:23b5"); + const portBytes = convertToBytes("udp", "1111"); + + const ma = mulitaddrFromFields("ip6", "udp", ipBytes, portBytes); + + expect(ma.toString()).to.eq("/ip6/2345:425:2ca1::5673:23b5/udp/1111"); + }); }); diff --git a/src/lib/enr/multiaddr_from_fields.ts b/src/lib/enr/multiaddr_from_fields.ts index 0befa735d0..a93baa336c 100644 --- a/src/lib/enr/multiaddr_from_fields.ts +++ b/src/lib/enr/multiaddr_from_fields.ts @@ -1,17 +1,21 @@ import { Multiaddr } from "@multiformats/multiaddr"; +import { convertToString } from "@multiformats/multiaddr/convert"; export function mulitaddrFromFields( - isIpv6: boolean, + ipFamily: string, protocol: string, ipBytes: Uint8Array, - portBytes: Uint8Array + protocolBytes: Uint8Array ): Multiaddr { - const familyStr = isIpv6 ? "ip6" : "ip4"; - let ma = new Multiaddr("/" + familyStr); + let ma = new Multiaddr( + "/" + ipFamily + "/" + convertToString(ipFamily, ipBytes) + ); - ma = ma.encapsulate(new Multiaddr(ipBytes)); - ma = ma.encapsulate(new Multiaddr("/" + protocol)); - ma = ma.encapsulate(portBytes); + ma = ma.encapsulate( + new Multiaddr( + "/" + protocol + "/" + convertToString(protocol, protocolBytes) + ) + ); return ma; } From fd030e0fbb16805f4d883bc55770b8ea105bac88 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Thu, 23 Jun 2022 15:52:12 +1000 Subject: [PATCH 14/68] fix: Typo --- src/lib/enr/enr.ts | 4 ++-- src/lib/enr/multiaddr_from_fields.spec.ts | 6 +++--- src/lib/enr/multiaddr_from_fields.ts | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/enr/enr.ts b/src/lib/enr/enr.ts index 990f7cdbfa..47c88f5ce8 100644 --- a/src/lib/enr/enr.ts +++ b/src/lib/enr/enr.ts @@ -20,7 +20,7 @@ import { IKeypair, KeypairType, } from "./keypair"; -import { mulitaddrFromFields } from "./multiaddr_from_fields"; +import { multiaddrFromFields } from "./multiaddr_from_fields"; import { decodeMultiaddrs, encodeMultiaddrs } from "./multiaddrs_codec"; import { ENRKey, ENRValue, NodeId, SequenceNumber } from "./types"; import * as v4 from "./v4"; @@ -367,7 +367,7 @@ export class ENR extends Map { return; } - return mulitaddrFromFields( + return multiaddrFromFields( isIpv6 ? "ip6" : "ip4", protoName, ipVal, diff --git a/src/lib/enr/multiaddr_from_fields.spec.ts b/src/lib/enr/multiaddr_from_fields.spec.ts index 959d2e511a..51250e2d3c 100644 --- a/src/lib/enr/multiaddr_from_fields.spec.ts +++ b/src/lib/enr/multiaddr_from_fields.spec.ts @@ -1,14 +1,14 @@ import { convertToBytes } from "@multiformats/multiaddr/convert"; import { expect } from "chai"; -import { mulitaddrFromFields } from "./multiaddr_from_fields"; +import { multiaddrFromFields } from "./multiaddr_from_fields"; describe("Multiaddr from fields", () => { it("tcp ip4 address", function () { const ipBytes = convertToBytes("ip4", "1.2.3.4"); const portBytes = convertToBytes("tcp", "3333"); - const ma = mulitaddrFromFields("ip4", "tcp", ipBytes, portBytes); + const ma = multiaddrFromFields("ip4", "tcp", ipBytes, portBytes); expect(ma.toString()).to.eq("/ip4/1.2.3.4/tcp/3333"); }); @@ -17,7 +17,7 @@ describe("Multiaddr from fields", () => { const ipBytes = convertToBytes("ip6", "2345:425:2ca1::5673:23b5"); const portBytes = convertToBytes("udp", "1111"); - const ma = mulitaddrFromFields("ip6", "udp", ipBytes, portBytes); + const ma = multiaddrFromFields("ip6", "udp", ipBytes, portBytes); expect(ma.toString()).to.eq("/ip6/2345:425:2ca1::5673:23b5/udp/1111"); }); diff --git a/src/lib/enr/multiaddr_from_fields.ts b/src/lib/enr/multiaddr_from_fields.ts index a93baa336c..f12bee403e 100644 --- a/src/lib/enr/multiaddr_from_fields.ts +++ b/src/lib/enr/multiaddr_from_fields.ts @@ -1,7 +1,7 @@ import { Multiaddr } from "@multiformats/multiaddr"; import { convertToString } from "@multiformats/multiaddr/convert"; -export function mulitaddrFromFields( +export function multiaddrFromFields( ipFamily: string, protocol: string, ipBytes: Uint8Array, From 5d5e035edb24b16c59293ebc6e90c184d6917f47 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Thu, 23 Jun 2022 16:06:37 +1000 Subject: [PATCH 15/68] fix: use compress key `marshal` return the compress key, `bytes` returned the protobuf serialized key. --- src/lib/enr/keypair/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lib/enr/keypair/index.ts b/src/lib/enr/keypair/index.ts index 231e639d67..41e88652b5 100644 --- a/src/lib/enr/keypair/index.ts +++ b/src/lib/enr/keypair/index.ts @@ -82,5 +82,9 @@ export async function createKeypairFromPeerId( ? await unmarshalPrivateKey(peerId.privateKey) : undefined; - return createKeypair(keypairType, privateKey?.bytes, publicKey?.bytes); + return createKeypair( + keypairType, + privateKey?.marshal(), + publicKey?.marshal() + ); } From a10d3ae7d3183a4cede1b2fb0a4e82988cd341ac Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Thu, 23 Jun 2022 16:23:27 +1000 Subject: [PATCH 16/68] fix: peer id / keypair conversion --- src/lib/enr/keypair/index.ts | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/lib/enr/keypair/index.ts b/src/lib/enr/keypair/index.ts index 41e88652b5..71be1d62ab 100644 --- a/src/lib/enr/keypair/index.ts +++ b/src/lib/enr/keypair/index.ts @@ -1,9 +1,5 @@ -import { - marshalPrivateKey, - marshalPublicKey, - unmarshalPrivateKey, - unmarshalPublicKey, -} from "@libp2p/crypto/keys"; +import { unmarshalPrivateKey, unmarshalPublicKey } from "@libp2p/crypto/keys"; +import { supportedKeys } from "@libp2p/crypto/keys"; import type { PeerId } from "@libp2p/interface-peer-id"; import { peerIdFromKeys } from "@libp2p/peer-id"; @@ -42,15 +38,15 @@ export async function createPeerIdFromKeypair( ): Promise { switch (keypair.type) { case KeypairType.secp256k1: { - // manually create a peer id to avoid expensive ops + const publicKey = new supportedKeys.secp256k1.Secp256k1PublicKey( + keypair.publicKey + ); + const privateKey = keypair.hasPrivateKey() - ? marshalPrivateKey({ bytes: keypair.privateKey }) + ? new supportedKeys.secp256k1.Secp256k1PrivateKey(keypair.privateKey) : undefined; - return peerIdFromKeys( - marshalPublicKey({ bytes: keypair.publicKey }), - privateKey - ); + return peerIdFromKeys(publicKey.bytes, privateKey?.bytes); } default: throw new Error(ERR_TYPE_NOT_IMPLEMENTED); From 52d74a74b53fc78bdcf4e04dbecce6c686cb974f Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Thu, 23 Jun 2022 16:26:52 +1000 Subject: [PATCH 17/68] fix: remove test with no value --- src/lib/enr/keypair/index.spec.ts | 37 ------------------------------- 1 file changed, 37 deletions(-) delete mode 100644 src/lib/enr/keypair/index.spec.ts diff --git a/src/lib/enr/keypair/index.spec.ts b/src/lib/enr/keypair/index.spec.ts deleted file mode 100644 index 9f9a54ba6d..0000000000 --- a/src/lib/enr/keypair/index.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { supportedKeys } from "@libp2p/crypto/keys"; -import { peerIdFromKeys } from "@libp2p/peer-id"; -import { expect } from "chai"; - -import { - createPeerIdFromKeypair, - generateKeypair, - KeypairType, - Secp256k1Keypair, -} from "./index"; - -describe("createPeerIdFromKeypair", function () { - it("should properly create a PeerId from a secp256k1 keypair with private key", async function () { - const keypair = await generateKeypair(KeypairType.secp256k1); - - const expectedPeerId = await peerIdFromKeys( - keypair.publicKey, - keypair.privateKey - ); - const actualPeerId = await createPeerIdFromKeypair(keypair); - - expect(actualPeerId).to.be.deep.equal(expectedPeerId); - }); - - it("should properly create a PeerId from a secp256k1 keypair without private key", async function () { - const keypair = await generateKeypair(KeypairType.secp256k1); - delete (keypair as Secp256k1Keypair)._privateKey; - const pubKey = new supportedKeys.secp256k1.Secp256k1PublicKey( - keypair.publicKey - ); - - const expectedPeerId = await peerIdFromKeys(pubKey.bytes); - const actualPeerId = await createPeerIdFromKeypair(keypair); - - expect(actualPeerId).to.be.deep.equal(expectedPeerId); - }); -}); From d609b9c47b155bef0431ea49b117f5b4f19f9501 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Thu, 23 Jun 2022 16:36:56 +1000 Subject: [PATCH 18/68] fix: usage of libp2p and undefined options --- src/lib/waku.ts | 2 +- src/lib/waku_relay/index.ts | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/lib/waku.ts b/src/lib/waku.ts index 8e538e133a..1fd904b56e 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -91,7 +91,7 @@ export async function createWaku(options?: CreateOptions): Promise { // TODO: Use options const libp2pOpts = { - transports: new WebSockets({ filter: filterAll }), + transports: [new WebSockets({ filter: filterAll })], streamMuxers: [new Mplex()], pubsub: new WakuRelay(), connectionEncryption: [new Noise()], diff --git a/src/lib/waku_relay/index.ts b/src/lib/waku_relay/index.ts index 64b01682e2..a46ce15407 100644 --- a/src/lib/waku_relay/index.ts +++ b/src/lib/waku_relay/index.ts @@ -44,13 +44,12 @@ export class WakuRelay extends GossipSub { }; constructor(options?: Partial) { - super( - Object.assign(options, { - // Ensure that no signature is included nor expected in the messages. - globalSignaturePolicy: SignaturePolicy.StrictNoSign, - fallbackToFloodsub: false, - }) - ); + options = Object.assign(options ?? {}, { + // Ensure that no signature is included nor expected in the messages. + globalSignaturePolicy: SignaturePolicy.StrictNoSign, + fallbackToFloodsub: false, + }); + super(options); this.multicodecs = constants.RelayCodecs; this.observers = {}; From 52616fb9127f8811f0734e8f789fd35fa768fe71 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Thu, 23 Jun 2022 16:38:14 +1000 Subject: [PATCH 19/68] fix: move to usage of `log` --- src/lib/waku.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/lib/waku.ts b/src/lib/waku.ts index 1fd904b56e..d8de952042 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -19,7 +19,7 @@ import { StoreCodecs, WakuStore } from "./waku_store"; export const DefaultPingKeepAliveValueSecs = 0; export const DefaultRelayKeepAliveValueSecs = 5 * 60; -const dbg = debug("waku:waku"); +const log = debug("waku:waku"); export enum Protocols { Relay = "relay", @@ -316,7 +316,7 @@ export class Waku { const peers = await this.store.peers(); if (peers.length) { - dbg("Store peer found: ", peers[0].id.toString()); + log("Store peer found: ", peers[0].id.toString()); return; } @@ -324,7 +324,7 @@ export class Waku { this.libp2p.peerStore.addEventListener("change:protocols", (evt) => { for (const codec of Object.values(StoreCodecs)) { if (evt.detail.protocols.includes(codec)) { - dbg("Resolving for", codec, evt.detail.protocols); + log("Resolving for", codec, evt.detail.protocols); resolve(); } } @@ -339,14 +339,14 @@ export class Waku { const peers = await this.lightPush.peers(); if (peers.length) { - dbg("Light Push peer found: ", peers[0].id.toString()); + log("Light Push peer found: ", peers[0].id.toString()); return; } await new Promise((resolve) => { this.libp2p.peerStore.addEventListener("change:protocols", (evt) => { if (evt.detail.protocols.includes(LightPushCodec)) { - dbg("Resolving for", LightPushCodec, evt.detail.protocols); + log("Resolving for", LightPushCodec, evt.detail.protocols); resolve(); } }); @@ -360,14 +360,14 @@ export class Waku { const peers = await this.filter.peers(); if (peers.length) { - dbg("Filter peer found: ", peers[0].id.toString()); + log("Filter peer found: ", peers[0].id.toString()); return; } await new Promise((resolve) => { this.libp2p.peerStore.addEventListener("change:protocols", (evt) => { if (evt.detail.protocols.includes(FilterCodec)) { - dbg("Resolving for", FilterCodec, evt.detail.protocols); + log("Resolving for", FilterCodec, evt.detail.protocols); resolve(); } }); @@ -400,7 +400,7 @@ export class Waku { if (pingPeriodSecs !== 0) { this.pingKeepAliveTimers[peerIdStr] = setInterval(() => { this.libp2p.ping(peerId).catch((e) => { - dbg(`Ping failed (${peerIdStr})`, e); + log(`Ping failed (${peerIdStr})`, e); }); }, pingPeriodSecs * 1000); } From 51d5bc19a23fbc501760fca73a15bc711c4c9a89 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Thu, 23 Jun 2022 17:07:38 +1000 Subject: [PATCH 20/68] fix: removed usage of buffer in streams --- package-lock.json | 486 ++++--------------------------- package.json | 6 +- src/lib/waku_filter/index.ts | 18 +- src/lib/waku_light_push/index.ts | 16 +- src/lib/waku_store/index.ts | 16 +- 5 files changed, 93 insertions(+), 449 deletions(-) diff --git a/package-lock.json b/package-lock.json index bb4b8e86d2..180b26c59c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,9 +26,8 @@ "debug": "^4.3.4", "dns-query": "^0.11.1", "hi-base32": "^0.5.1", - "it-concat": "^2.0.0", - "it-length-prefixed": "^5.0.2", - "it-pipe": "^1.1.0", + "it-length-prefixed": "^7.0.1", + "it-pipe": "^2.0.3", "js-sha3": "^0.8.0", "libp2p": "^0.37.3", "multiformats": "^9.6.5", @@ -55,7 +54,6 @@ "@typescript-eslint/eslint-plugin": "^5.8.1", "@typescript-eslint/parser": "^5.8.1", "app-root-path": "^3.0.0", - "buffer": "^6.0.3", "chai": "^4.3.4", "cspell": "^5.14.0", "eslint": "^8.6.0", @@ -752,21 +750,6 @@ "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" }, - "node_modules/@chainsafe/libp2p-gossipsub/node_modules/it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "dependencies": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "node_modules/@chainsafe/libp2p-gossipsub/node_modules/it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - }, "node_modules/@chainsafe/libp2p-noise": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-7.0.0.tgz", @@ -811,36 +794,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@chainsafe/libp2p-noise/node_modules/it-length-prefixed": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", - "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", - "dependencies": { - "err-code": "^3.0.1", - "it-stream-types": "^1.0.4", - "uint8arraylist": "^1.2.0", - "varint": "^6.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@chainsafe/libp2p-noise/node_modules/it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "dependencies": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "node_modules/@chainsafe/libp2p-noise/node_modules/it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - }, "node_modules/@cspell/cspell-bundled-dicts": { "version": "5.14.0", "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-5.14.0.tgz", @@ -1979,21 +1932,6 @@ "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" }, - "node_modules/@libp2p/mplex/node_modules/it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "dependencies": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "node_modules/@libp2p/mplex/node_modules/it-pipe/node_modules/it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - }, "node_modules/@libp2p/mplex/node_modules/it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", @@ -2055,31 +1993,6 @@ "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" }, - "node_modules/@libp2p/multistream-select/node_modules/it-length-prefixed": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", - "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", - "dependencies": { - "err-code": "^3.0.1", - "it-stream-types": "^1.0.4", - "uint8arraylist": "^1.2.0", - "varint": "^6.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/multistream-select/node_modules/it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "dependencies": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, "node_modules/@libp2p/multistream-select/node_modules/it-pushable": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", @@ -2229,16 +2142,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/peer-record/node_modules/it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "dependencies": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, "node_modules/@libp2p/peer-record/node_modules/it-pushable": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", @@ -2288,16 +2191,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/peer-store/node_modules/it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "dependencies": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, "node_modules/@libp2p/peer-store/node_modules/it-pushable": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", @@ -2345,36 +2238,6 @@ "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" }, - "node_modules/@libp2p/pubsub/node_modules/it-length-prefixed": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", - "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", - "dependencies": { - "err-code": "^3.0.1", - "it-stream-types": "^1.0.4", - "uint8arraylist": "^1.2.0", - "varint": "^6.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/pubsub/node_modules/it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "dependencies": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "node_modules/@libp2p/pubsub/node_modules/it-pipe/node_modules/it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - }, "node_modules/@libp2p/pubsub/node_modules/it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", @@ -4317,6 +4180,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -4349,16 +4213,6 @@ "node": ">=8" } }, - "node_modules/bl": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz", - "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -4501,29 +4355,6 @@ "url": "https://opencollective.com/browserslist" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -5427,6 +5258,11 @@ "npm": ">=7.0.0" } }, + "node_modules/datastore-core/node_modules/it-pipe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-1.1.0.tgz", + "integrity": "sha512-lF0/3qTVeth13TOnHVs0BTFaziwQF7m5Gg+E6JV0BXcLKutC92YjSi7bASgkPOXaLEb+YvNZrPorGMBIJvZfxg==" + }, "node_modules/date-format": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", @@ -7442,6 +7278,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, "funding": [ { "type": "github", @@ -8111,14 +7948,6 @@ "resolved": "https://registry.npmjs.org/it-all/-/it-all-1.0.6.tgz", "integrity": "sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==" }, - "node_modules/it-concat": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/it-concat/-/it-concat-2.0.0.tgz", - "integrity": "sha512-jchrEB3fHlUENWkVJRmbFJ1A7gcjJDmwiolQsHhVC14DpUIbX8fgr3SOC7XNE5OoUUQNL6/RaMCPChkPemyQUw==", - "dependencies": { - "bl": "^5.0.0" - } - }, "node_modules/it-drain": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-1.0.5.tgz", @@ -8172,13 +8001,18 @@ } }, "node_modules/it-length-prefixed": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-5.0.3.tgz", - "integrity": "sha512-b+jDHLcnOnPDQN79ronmzF5jeBjdJsy0ce2O6i6X4J5tnaO8Fd146ZA/tMbzaLlKnTpXa0eKtofpYhumXGENeg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", + "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", "dependencies": { - "bl": "^5.0.0", - "buffer": "^6.0.3", + "err-code": "^3.0.1", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0", "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, "node_modules/it-map": { @@ -8229,25 +8063,20 @@ "npm": ">=7.0.0" } }, - "node_modules/it-pb-stream/node_modules/it-length-prefixed": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", - "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", + "node_modules/it-pipe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", "dependencies": { - "err-code": "^3.0.1", - "it-stream-types": "^1.0.4", - "uint8arraylist": "^1.2.0", - "varint": "^6.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" } }, - "node_modules/it-pipe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-1.1.0.tgz", - "integrity": "sha512-lF0/3qTVeth13TOnHVs0BTFaziwQF7m5Gg+E6JV0BXcLKutC92YjSi7bASgkPOXaLEb+YvNZrPorGMBIJvZfxg==" + "node_modules/it-pipe/node_modules/it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" }, "node_modules/it-pushable": { "version": "1.4.2", @@ -8742,31 +8571,6 @@ "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" }, - "node_modules/libp2p/node_modules/it-length-prefixed": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", - "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", - "dependencies": { - "err-code": "^3.0.1", - "it-stream-types": "^1.0.4", - "uint8arraylist": "^1.2.0", - "varint": "^6.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/libp2p/node_modules/it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "dependencies": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, "node_modules/libp2p/node_modules/it-pushable": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", @@ -14139,21 +13943,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" - }, - "it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "requires": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" } } }, @@ -14192,32 +13981,6 @@ "interface-datastore": "^6.1.0", "multiformats": "^9.6.3" } - }, - "it-length-prefixed": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", - "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", - "requires": { - "err-code": "^3.0.1", - "it-stream-types": "^1.0.4", - "uint8arraylist": "^1.2.0", - "varint": "^6.0.0" - } - }, - "it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "requires": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" } } }, @@ -15142,23 +14905,6 @@ "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" }, - "it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "requires": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - }, - "dependencies": { - "it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - } - } - }, "it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", @@ -15214,27 +14960,6 @@ "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" }, - "it-length-prefixed": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", - "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", - "requires": { - "err-code": "^3.0.1", - "it-stream-types": "^1.0.4", - "uint8arraylist": "^1.2.0", - "varint": "^6.0.0" - } - }, - "it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "requires": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, "it-pushable": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", @@ -15354,16 +15079,6 @@ "multiformats": "^9.6.3" } }, - "it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "requires": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, "it-pushable": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", @@ -15407,16 +15122,6 @@ "multiformats": "^9.6.3" } }, - "it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "requires": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, "it-pushable": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", @@ -15462,34 +15167,6 @@ "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" }, - "it-length-prefixed": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", - "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", - "requires": { - "err-code": "^3.0.1", - "it-stream-types": "^1.0.4", - "uint8arraylist": "^1.2.0", - "varint": "^6.0.0" - } - }, - "it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "requires": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - }, - "dependencies": { - "it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - } - } - }, "it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", @@ -16995,7 +16672,8 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, "base64id": { "version": "2.0.0", @@ -17008,16 +16686,6 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, - "bl": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz", - "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==", - "requires": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -17134,15 +16802,6 @@ "node-releases": "^1.1.73" } }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -17830,6 +17489,13 @@ "it-pushable": "^1.4.2", "it-take": "^1.0.1", "uint8arrays": "^3.0.0" + }, + "dependencies": { + "it-pipe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-1.1.0.tgz", + "integrity": "sha512-lF0/3qTVeth13TOnHVs0BTFaziwQF7m5Gg+E6JV0BXcLKutC92YjSi7bASgkPOXaLEb+YvNZrPorGMBIJvZfxg==" + } } }, "date-format": { @@ -19326,7 +18992,8 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true }, "ignore": { "version": "4.0.6", @@ -19800,14 +19467,6 @@ "resolved": "https://registry.npmjs.org/it-all/-/it-all-1.0.6.tgz", "integrity": "sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==" }, - "it-concat": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/it-concat/-/it-concat-2.0.0.tgz", - "integrity": "sha512-jchrEB3fHlUENWkVJRmbFJ1A7gcjJDmwiolQsHhVC14DpUIbX8fgr3SOC7XNE5OoUUQNL6/RaMCPChkPemyQUw==", - "requires": { - "bl": "^5.0.0" - } - }, "it-drain": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-1.0.5.tgz", @@ -19853,12 +19512,13 @@ } }, "it-length-prefixed": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-5.0.3.tgz", - "integrity": "sha512-b+jDHLcnOnPDQN79ronmzF5jeBjdJsy0ce2O6i6X4J5tnaO8Fd146ZA/tMbzaLlKnTpXa0eKtofpYhumXGENeg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", + "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", "requires": { - "bl": "^5.0.0", - "buffer": "^6.0.3", + "err-code": "^3.0.1", + "it-stream-types": "^1.0.4", + "uint8arraylist": "^1.2.0", "varint": "^6.0.0" } }, @@ -19900,25 +19560,24 @@ "it-length-prefixed": "^7.0.0", "it-stream-types": "^1.0.4", "uint8arraylist": "^1.3.0" - }, - "dependencies": { - "it-length-prefixed": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", - "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", - "requires": { - "err-code": "^3.0.1", - "it-stream-types": "^1.0.4", - "uint8arraylist": "^1.2.0", - "varint": "^6.0.0" - } - } } }, "it-pipe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-1.1.0.tgz", - "integrity": "sha512-lF0/3qTVeth13TOnHVs0BTFaziwQF7m5Gg+E6JV0BXcLKutC92YjSi7bASgkPOXaLEb+YvNZrPorGMBIJvZfxg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", + "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", + "requires": { + "it-merge": "^1.0.4", + "it-pushable": "^2.0.0", + "it-stream-types": "^1.0.3" + }, + "dependencies": { + "it-pushable": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", + "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + } + } }, "it-pushable": { "version": "1.4.2", @@ -20329,27 +19988,6 @@ "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" }, - "it-length-prefixed": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", - "integrity": "sha512-UozKoT0zZPUa0LO9OSq5KaLKPn83U7Vsy/BNAN0TUXfTI/pKrOz6RuyTSOok6NDad12FZsShBGnl9DKlfDT95g==", - "requires": { - "err-code": "^3.0.1", - "it-stream-types": "^1.0.4", - "uint8arraylist": "^1.2.0", - "varint": "^6.0.0" - } - }, - "it-pipe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-2.0.3.tgz", - "integrity": "sha512-1bfNC0v8yFDQu5KwZpHZrVO+nxOIEXfrobYtv55NXcsMfGu2SueMOCyCm63khejA+sCU0gLcRFQIfKWlBNNTGw==", - "requires": { - "it-merge": "^1.0.4", - "it-pushable": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, "it-pushable": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", diff --git a/package.json b/package.json index 4fe2e97049..d6f28a890c 100644 --- a/package.json +++ b/package.json @@ -83,9 +83,8 @@ "debug": "^4.3.4", "dns-query": "^0.11.1", "hi-base32": "^0.5.1", - "it-concat": "^2.0.0", - "it-length-prefixed": "^5.0.2", - "it-pipe": "^1.1.0", + "it-length-prefixed": "^7.0.1", + "it-pipe": "^2.0.3", "js-sha3": "^0.8.0", "libp2p": "^0.37.3", "multiformats": "^9.6.5", @@ -112,7 +111,6 @@ "@typescript-eslint/eslint-plugin": "^5.8.1", "@typescript-eslint/parser": "^5.8.1", "app-root-path": "^3.0.0", - "buffer": "^6.0.3", "chai": "^4.3.4", "cspell": "^5.14.0", "eslint": "^8.6.0", diff --git a/src/lib/waku_filter/index.ts b/src/lib/waku_filter/index.ts index 46c323986d..d58a02e7aa 100644 --- a/src/lib/waku_filter/index.ts +++ b/src/lib/waku_filter/index.ts @@ -1,7 +1,7 @@ import type { PeerId } from "@libp2p/interface-peer-id"; import type { Peer } from "@libp2p/interface-peer-store"; import debug from "debug"; -import lp from "it-length-prefixed"; +import * as lp from "it-length-prefixed"; import { pipe } from "it-pipe"; import { Libp2p } from "libp2p"; @@ -109,18 +109,14 @@ export class WakuFilter { private onRequest({ stream }: any): void { log("Receiving message push"); try { - pipe( - stream.source, - lp.decode(), - async (source: AsyncIterable) => { - for await (const bytes of source) { - const res = FilterRPC.decode(bytes.slice()); - if (res.requestId && res.push?.messages?.length) { - await this.pushMessages(res.requestId, res.push.messages); - } + pipe(stream.source, lp.decode(), async (source) => { + for await (const bytes of source) { + const res = FilterRPC.decode(bytes.slice()); + if (res.requestId && res.push?.messages?.length) { + await this.pushMessages(res.requestId, res.push.messages); } } - ); + }); } catch (e) { log("Error decoding message", e); } diff --git a/src/lib/waku_light_push/index.ts b/src/lib/waku_light_push/index.ts index 56bbb9b975..7c0ed36982 100644 --- a/src/lib/waku_light_push/index.ts +++ b/src/lib/waku_light_push/index.ts @@ -1,9 +1,9 @@ import type { PeerId } from "@libp2p/interface-peer-id"; import type { Peer } from "@libp2p/interface-peer-store"; -import concat from "it-concat"; -import lp from "it-length-prefixed"; +import * as lp from "it-length-prefixed"; import { pipe } from "it-pipe"; import { Libp2p } from "libp2p"; +import { concat } from "uint8arrays/concat"; import { PushResponse } from "../../proto/light_push"; import { DefaultPubSubTopic } from "../constants"; @@ -71,15 +71,21 @@ export class WakuLightPush { ? opts.pubSubTopic : this.pubSubTopic; const query = PushRPC.createRequest(message, pubSubTopic); - const res = await pipe( + const res: Uint8Array[] = []; + await pipe( [query.encode()], lp.encode(), stream, lp.decode(), - concat + async (source) => { + for await (const chunk of source) { + res.push(chunk.slice()); + } + } ); try { - const response = PushRPC.decode(res.slice()).response; + const bytes = concat(res); + const response = PushRPC.decode(bytes).response; if (!response) { console.log("No response in PushRPC"); diff --git a/src/lib/waku_store/index.ts b/src/lib/waku_store/index.ts index 3319970c32..1d9e94eee8 100644 --- a/src/lib/waku_store/index.ts +++ b/src/lib/waku_store/index.ts @@ -1,10 +1,10 @@ import type { PeerId } from "@libp2p/interface-peer-id"; import { Peer } from "@libp2p/interface-peer-store"; import debug from "debug"; -import concat from "it-concat"; -import lp from "it-length-prefixed"; +import * as lp from "it-length-prefixed"; import { pipe } from "it-pipe"; import { Libp2p } from "libp2p"; +import { concat } from "uint8arrays/concat"; import * as protoV2Beta4 from "../../proto/store_v2beta4"; import { DefaultPubSubTopic, StoreCodecs } from "../constants"; @@ -205,14 +205,20 @@ export class WakuStore { const historyRpcQuery = HistoryRPC.createQuery(queryOpts); dbg("Querying store peer", connections[0].remoteAddr.toString()); - const res = await pipe( + const res: Uint8Array[] = []; + await pipe( [historyRpcQuery.encode()], lp.encode(), stream, lp.decode(), - concat + async (source) => { + for await (const chunk of source) { + res.push(chunk.slice()); + } + } ); - const reply = historyRpcQuery.decode(res.slice()); + const bytes = concat(res); + const reply = historyRpcQuery.decode(bytes); if (!reply.response) { throw "History response misses response field"; From f3833564f2fdeb5e5035f1157cb432029c622873 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Fri, 24 Jun 2022 16:00:15 +1000 Subject: [PATCH 21/68] fix: Remove event listener once done --- src/lib/waku.ts | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/lib/waku.ts b/src/lib/waku.ts index d8de952042..867216a388 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -1,5 +1,6 @@ import { Noise } from "@chainsafe/libp2p-noise"; import type { PeerId } from "@libp2p/interface-peer-id"; +import { PeerProtocolsChangeData } from "@libp2p/interface-peer-store"; import { Mplex } from "@libp2p/mplex"; import { peerIdFromString } from "@libp2p/peer-id"; import { WebSockets } from "@libp2p/websockets"; @@ -299,6 +300,7 @@ export class Waku { if (peers.length == 0) { // No peer yet available, wait for a subscription const promise = new Promise((resolve) => { + // TODO: Remove listeners once done this.relay.addEventListener("subscription-change", () => { // Remote peer subscribed to topic, now wait for a heartbeat // so that the mesh is updated and the remote peer added to it @@ -321,14 +323,20 @@ export class Waku { } await new Promise((resolve) => { - this.libp2p.peerStore.addEventListener("change:protocols", (evt) => { + const cb = (evt: CustomEvent): void => { for (const codec of Object.values(StoreCodecs)) { if (evt.detail.protocols.includes(codec)) { - log("Resolving for", codec, evt.detail.protocols); + log("Resolving for", StoreCodecs, evt.detail.protocols); + this.libp2p.peerStore.removeEventListener( + "change:protocols", + cb + ); resolve(); + break; } } - }); + }; + this.libp2p.peerStore.addEventListener("change:protocols", cb); }); })(); promises.push(storePromise); @@ -344,12 +352,14 @@ export class Waku { } await new Promise((resolve) => { - this.libp2p.peerStore.addEventListener("change:protocols", (evt) => { + const cb = (evt: CustomEvent): void => { if (evt.detail.protocols.includes(LightPushCodec)) { log("Resolving for", LightPushCodec, evt.detail.protocols); + this.libp2p.peerStore.removeEventListener("change:protocols", cb); resolve(); } - }); + }; + this.libp2p.peerStore.addEventListener("change:protocols", cb); }); })(); promises.push(lightPushPromise); @@ -365,12 +375,14 @@ export class Waku { } await new Promise((resolve) => { - this.libp2p.peerStore.addEventListener("change:protocols", (evt) => { + const cb = (evt: CustomEvent): void => { if (evt.detail.protocols.includes(FilterCodec)) { log("Resolving for", FilterCodec, evt.detail.protocols); + this.libp2p.peerStore.removeEventListener("change:protocols", cb); resolve(); } - }); + }; + this.libp2p.peerStore.addEventListener("change:protocols", cb); }); })(); promises.push(filterPromise); From f768686e517a4b11624e2b15b8f117f7c8a96168 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Fri, 24 Jun 2022 16:02:49 +1000 Subject: [PATCH 22/68] fix: fix pipe usage --- package-lock.json | 1 + package.json | 1 + src/lib/waku_filter/index.node.spec.ts | 14 +++++++------- src/lib/waku_filter/index.ts | 26 ++++++++++++++++++++++---- src/lib/waku_light_push/index.ts | 10 +++------- src/lib/waku_store/index.ts | 10 +++------- 6 files changed, 37 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 180b26c59c..f4c6e91e23 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,7 @@ "debug": "^4.3.4", "dns-query": "^0.11.1", "hi-base32": "^0.5.1", + "it-all": "^1.0.6", "it-length-prefixed": "^7.0.1", "it-pipe": "^2.0.3", "js-sha3": "^0.8.0", diff --git a/package.json b/package.json index d6f28a890c..e87d9813ea 100644 --- a/package.json +++ b/package.json @@ -83,6 +83,7 @@ "debug": "^4.3.4", "dns-query": "^0.11.1", "hi-base32": "^0.5.1", + "it-all": "^1.0.6", "it-length-prefixed": "^7.0.1", "it-pipe": "^2.0.3", "js-sha3": "^0.8.0", diff --git a/src/lib/waku_filter/index.node.spec.ts b/src/lib/waku_filter/index.node.spec.ts index c077b41964..ff15aadcf2 100644 --- a/src/lib/waku_filter/index.node.spec.ts +++ b/src/lib/waku_filter/index.node.spec.ts @@ -22,14 +22,14 @@ describe("Waku Filter", () => { beforeEach(async function () { this.timeout(10000); nwaku = new Nwaku(makeLogFileName(this)); - await nwaku.start({ filter: true }); + await nwaku.start({ filter: true, lightpush: true }); waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, libp2p: { addresses: { listen: ["/ip4/0.0.0.0/tcp/0/ws"] } }, }); await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); - await waku.waitForRemotePeer([Protocols.Filter, Protocols.Relay]); + await waku.waitForRemotePeer([Protocols.Filter, Protocols.LightPush]); }); it("creates a subscription", async function () { @@ -48,7 +48,7 @@ describe("Waku Filter", () => { messageText, TestContentTopic ); - await waku.relay.send(message); + await waku.lightPush.push(message); while (messageCount === 0) { await delay(250); } @@ -64,10 +64,10 @@ describe("Waku Filter", () => { expect(msg.contentTopic).to.eq(TestContentTopic); }; await waku.filter.subscribe(callback, [TestContentTopic]); - await waku.relay.send( + await waku.lightPush.push( await WakuMessage.fromUtf8String("Filtering works!", TestContentTopic) ); - await waku.relay.send( + await waku.lightPush.push( await WakuMessage.fromUtf8String( "Filtering still works!", TestContentTopic @@ -87,7 +87,7 @@ describe("Waku Filter", () => { const unsubscribe = await waku.filter.subscribe(callback, [ TestContentTopic, ]); - await waku.relay.send( + await waku.lightPush.push( await WakuMessage.fromUtf8String( "This should be received", TestContentTopic @@ -95,7 +95,7 @@ describe("Waku Filter", () => { ); await delay(100); await unsubscribe(); - await waku.relay.send( + await waku.lightPush.push( await WakuMessage.fromUtf8String( "This should not be received", TestContentTopic diff --git a/src/lib/waku_filter/index.ts b/src/lib/waku_filter/index.ts index d58a02e7aa..ab80118e2f 100644 --- a/src/lib/waku_filter/index.ts +++ b/src/lib/waku_filter/index.ts @@ -1,6 +1,7 @@ import type { PeerId } from "@libp2p/interface-peer-id"; import type { Peer } from "@libp2p/interface-peer-store"; import debug from "debug"; +import all from "it-all"; import * as lp from "it-length-prefixed"; import { pipe } from "it-pipe"; import { Libp2p } from "libp2p"; @@ -49,7 +50,9 @@ export class WakuFilter { constructor(public libp2p: Libp2p) { this.subscriptions = new Map(); this.decryptionKeys = new Map(); - this.libp2p.handle(FilterCodec, this.onRequest.bind(this)); + this.libp2p + .handle(FilterCodec, this.onRequest.bind(this)) + .catch((e) => log("Failed to register filter protocol", e)); } /** @@ -84,7 +87,15 @@ export class WakuFilter { const stream = await this.newStream(peer); try { - await pipe([request.encode()], lp.encode(), stream); + const res = await pipe( + [request.encode()], + lp.encode(), + stream, + lp.decode(), + async (source) => await all(source) + ); + + log("response", res); } catch (e) { log( "Error subscribing to peer ", @@ -109,14 +120,21 @@ export class WakuFilter { private onRequest({ stream }: any): void { log("Receiving message push"); try { - pipe(stream.source, lp.decode(), async (source) => { + pipe(stream, lp.decode(), async (source) => { for await (const bytes of source) { const res = FilterRPC.decode(bytes.slice()); if (res.requestId && res.push?.messages?.length) { await this.pushMessages(res.requestId, res.push.messages); } } - }); + }).then( + () => { + log("Receiving pipe closed."); + }, + (e) => { + log("Error with receiving pipe", e); + } + ); } catch (e) { log("Error decoding message", e); } diff --git a/src/lib/waku_light_push/index.ts b/src/lib/waku_light_push/index.ts index 7c0ed36982..00ac0b35ff 100644 --- a/src/lib/waku_light_push/index.ts +++ b/src/lib/waku_light_push/index.ts @@ -1,5 +1,6 @@ import type { PeerId } from "@libp2p/interface-peer-id"; import type { Peer } from "@libp2p/interface-peer-store"; +import all from "it-all"; import * as lp from "it-length-prefixed"; import { pipe } from "it-pipe"; import { Libp2p } from "libp2p"; @@ -71,17 +72,12 @@ export class WakuLightPush { ? opts.pubSubTopic : this.pubSubTopic; const query = PushRPC.createRequest(message, pubSubTopic); - const res: Uint8Array[] = []; - await pipe( + const res = await pipe( [query.encode()], lp.encode(), stream, lp.decode(), - async (source) => { - for await (const chunk of source) { - res.push(chunk.slice()); - } - } + async (source) => await all(source) ); try { const bytes = concat(res); diff --git a/src/lib/waku_store/index.ts b/src/lib/waku_store/index.ts index 1d9e94eee8..2f4a5d1bac 100644 --- a/src/lib/waku_store/index.ts +++ b/src/lib/waku_store/index.ts @@ -1,6 +1,7 @@ import type { PeerId } from "@libp2p/interface-peer-id"; import { Peer } from "@libp2p/interface-peer-store"; import debug from "debug"; +import all from "it-all"; import * as lp from "it-length-prefixed"; import { pipe } from "it-pipe"; import { Libp2p } from "libp2p"; @@ -205,17 +206,12 @@ export class WakuStore { const historyRpcQuery = HistoryRPC.createQuery(queryOpts); dbg("Querying store peer", connections[0].remoteAddr.toString()); - const res: Uint8Array[] = []; - await pipe( + const res = await pipe( [historyRpcQuery.encode()], lp.encode(), stream, lp.decode(), - async (source) => { - for await (const chunk of source) { - res.push(chunk.slice()); - } - } + async (source) => await all(source) ); const bytes = concat(res); const reply = historyRpcQuery.decode(bytes); From bd7d01387dd2b92d6fb4aa34bb6d9cbbde607ed1 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 20 Jul 2022 12:46:40 +1000 Subject: [PATCH 23/68] chore: remove useless test --- src/lib/discovery/index.spec.ts | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/src/lib/discovery/index.spec.ts b/src/lib/discovery/index.spec.ts index f68126a033..c0eb090932 100644 --- a/src/lib/discovery/index.spec.ts +++ b/src/lib/discovery/index.spec.ts @@ -1,6 +1,5 @@ import { expect } from "chai"; -import { fleets } from "./predefined"; import { getPseudoRandomSubset } from "./random_subset"; describe("Discovery", () => { @@ -34,23 +33,3 @@ describe("Discovery", () => { expect(res.length).to.eq(2); }); }); - -describe("Discovery [live data]", function () { - before(function () { - if (process.env.CI) { - this.skip(); - } - }); - - it("Check pre-defined nodes against hosted JSON [live data]", async function () { - const res = await fetch("https://fleets.status.im/"); - const nodes = await res.json(); - - expect(fleets.fleets["wakuv2.prod"]["waku-websocket"]).to.deep.eq( - nodes.fleets["wakuv2.prod"]["waku-websocket"] - ); - expect(fleets.fleets["wakuv2.test"]["waku-websocket"]).to.deep.eq( - nodes.fleets["wakuv2.test"]["waku-websocket"] - ); - }); -}); From 1f9a12cddb70eb1e9ce85b8870ca1f5e191b5446 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 20 Jul 2022 12:50:24 +1000 Subject: [PATCH 24/68] chore: upgrade libp2p-gossipsub and libp2p-noise --- package-lock.json | 844 +++++++++++++++------------------------------- package.json | 4 +- 2 files changed, 267 insertions(+), 581 deletions(-) diff --git a/package-lock.json b/package-lock.json index f4c6e91e23..54cd41ff46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "version": "0.24.0", "license": "MIT OR Apache-2.0", "dependencies": { - "@chainsafe/libp2p-gossipsub": "^2.0.0", - "@chainsafe/libp2p-noise": "^7.0.0", + "@chainsafe/libp2p-gossipsub": "^3.2.0", + "@chainsafe/libp2p-noise": "^7.0.1", "@ethersproject/rlp": "^5.5.0", "@libp2p/crypto": "^1.0.0", "@libp2p/interface-peer-discovery": "^1.0.0", @@ -642,26 +642,30 @@ } }, "node_modules/@chainsafe/libp2p-gossipsub": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-2.0.0.tgz", - "integrity": "sha512-9tnxXdYbYEA7s4OuC/Ff5XHiKAPsfjSPdbcsdRrIanri0WI7rrwrj7xpOB60IvFIDmGRb2qQjs9qPQcy//670g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-3.2.0.tgz", + "integrity": "sha512-9rdDHVweWAZsC9Ut3MpN8nZCDkSgDJ0o0p8rxMBROsmARrFzzUmG4kHWBPqKEJ3GGC1O8QlrF53VfRJwN6ZOrA==", "dependencies": { - "@libp2p/components": "^1.0.0", + "@libp2p/components": "^2.0.0", "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-connection": "^2.0.0", "@libp2p/interface-keys": "^1.0.2", "@libp2p/interface-peer-id": "^1.0.2", "@libp2p/interface-pubsub": "^1.0.1", - "@libp2p/interface-registrar": "^1.0.0", + "@libp2p/interface-registrar": "^2.0.0", "@libp2p/interfaces": "^3.0.2", "@libp2p/logger": "^2.0.0", "@libp2p/peer-id": "^1.1.13", "@libp2p/peer-record": "^2.0.0", - "@libp2p/pubsub": "^2.0.0", - "@libp2p/topology": "^2.0.0", + "@libp2p/pubsub": "^3.0.0", + "@libp2p/topology": "^3.0.0", + "abortable-iterator": "^4.0.2", "denque": "^1.5.0", "err-code": "^3.0.1", "iso-random-stream": "^2.0.2", + "it-length-prefixed": "^7.0.1", "it-pipe": "^2.0.3", + "it-pushable": "^3.0.0", "multiformats": "^9.6.4", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0" @@ -732,29 +736,35 @@ "npm": ">=7.0.0" } }, - "node_modules/@chainsafe/libp2p-gossipsub/node_modules/abortable-iterator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", - "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/utils/node_modules/@libp2p/interface-connection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-1.0.1.tgz", + "integrity": "sha512-4MP+RvqR5xu6EWgrebLo34HWm/X+hGXtzsCKmNfmLN9bpaYhEobzL4Rm3RYi/0ICrgAZmoU8n+x8widiuwERew==", "dependencies": { - "get-iterator": "^2.0.0", - "it-stream-types": "^1.0.3" + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/@chainsafe/libp2p-gossipsub/node_modules/get-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", - "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" - }, "node_modules/@chainsafe/libp2p-gossipsub/node_modules/is-loopback-addr": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" }, + "node_modules/@chainsafe/libp2p-gossipsub/node_modules/it-pushable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", + "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" + }, "node_modules/@chainsafe/libp2p-noise": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-7.0.0.tgz", - "integrity": "sha512-oPlEqkm0W4EdT0EHtQDvbyKMO2F2HOF8wOnN6zcOJ0PTGHzR9n1xf2eauhiWmRUuXhSA9vBvMnfcQkNFrs2wzQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-7.0.1.tgz", + "integrity": "sha512-V5vYb2jKlnd9jwDcxCB48RvzqHcMZsamTAd0eXZgvCujlu5VmbyaWFcuvIwFY3dHTrVcFQKntIg5WDaqmkuhcg==", "dependencies": { "@libp2p/crypto": "^1.0.0", "@libp2p/interface-connection-encrypter": "^1.0.2", @@ -1375,21 +1385,21 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "node_modules/@libp2p/components": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/components/-/components-1.0.0.tgz", - "integrity": "sha512-FksZm+bboEWAqHmw6GBRn+ppQEUwyt7TDTEn4J6nsA8OAXRi4R0bQc9KrdTrzomdaWjBTyAtA4hA1DYxQmmEmg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/components/-/components-2.0.1.tgz", + "integrity": "sha512-3+HgBnu7MbSBcAODtMRxSbdZ54vNB2TGxmPxeNhDBFb+jTw4pUwCeXUcTkSNzsY8cME0MhsEzQ7bwpdXa9xPeQ==", "dependencies": { "@libp2p/interface-address-manager": "^1.0.1", - "@libp2p/interface-connection": "^1.0.0", + "@libp2p/interface-connection": "^2.0.0", "@libp2p/interface-connection-manager": "^1.0.0", "@libp2p/interface-content-routing": "^1.0.0", "@libp2p/interface-dht": "^1.0.0", - "@libp2p/interface-metrics": "^1.0.2", + "@libp2p/interface-metrics": "^2.0.0", "@libp2p/interface-peer-id": "^1.0.2", "@libp2p/interface-peer-routing": "^1.0.0", "@libp2p/interface-peer-store": "^1.0.0", "@libp2p/interface-pubsub": "^1.0.0", - "@libp2p/interface-registrar": "^1.0.0", + "@libp2p/interface-registrar": "^2.0.0", "@libp2p/interface-transport": "^1.0.0", "@libp2p/interfaces": "^3.0.2", "err-code": "^3.0.1", @@ -1471,9 +1481,9 @@ } }, "node_modules/@libp2p/interface-connection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-1.0.1.tgz", - "integrity": "sha512-4MP+RvqR5xu6EWgrebLo34HWm/X+hGXtzsCKmNfmLN9bpaYhEobzL4Rm3RYi/0ICrgAZmoU8n+x8widiuwERew==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", + "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", "dependencies": { "@libp2p/interface-peer-id": "^1.0.0", "@libp2p/interfaces": "^3.0.0", @@ -1512,21 +1522,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/interface-connection-manager/node_modules/@libp2p/interface-connection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", - "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", - "dependencies": { - "@libp2p/interface-peer-id": "^1.0.0", - "@libp2p/interfaces": "^3.0.0", - "@multiformats/multiaddr": "^10.2.0", - "it-stream-types": "^1.0.4" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@libp2p/interface-content-routing": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@libp2p/interface-content-routing/-/interface-content-routing-1.0.2.tgz", @@ -1567,9 +1562,9 @@ } }, "node_modules/@libp2p/interface-metrics": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@libp2p/interface-metrics/-/interface-metrics-1.0.3.tgz", - "integrity": "sha512-kPSQY/dJqeJ92YeldismoIAxWn0z13kOz0UJY7M5QE7KcW5tJAYDNzDw6sIKKbbWN7bU6KJydnYBSRzhXpLlDw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface-metrics/-/interface-metrics-2.0.0.tgz", + "integrity": "sha512-OUMspbgamrPgTQWA9zjyrcVQtXpWegSzPllDVwySBefv14l6AhpgicvVI8s+FPbzdKSj6AanlYDa7V8Ui/14CQ==", "dependencies": { "@libp2p/interface-peer-id": "^1.0.0", "it-stream-types": "^1.0.4" @@ -1662,21 +1657,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/interface-pubsub/node_modules/@libp2p/interface-connection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", - "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", - "dependencies": { - "@libp2p/interface-peer-id": "^1.0.0", - "@libp2p/interfaces": "^3.0.0", - "@multiformats/multiaddr": "^10.2.0", - "it-stream-types": "^1.0.4" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@libp2p/interface-pubsub/node_modules/it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", @@ -1695,11 +1675,11 @@ } }, "node_modules/@libp2p/interface-registrar": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@libp2p/interface-registrar/-/interface-registrar-1.1.0.tgz", - "integrity": "sha512-1Uoyn3KAecklXhsit7ANrc0FP8+mh8pVXB7c8LwGpVwKHK4IPAAfB+beUZSrHHEabp16T87FokaVYRLrGYUqRQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-registrar/-/interface-registrar-2.0.2.tgz", + "integrity": "sha512-HqDQua9J6T9KzrdYA9EhYsI0oc4CeSR1sfi0qdk073/IB3SlP+XtD7RzzVuGeyXjssqZtqf3RwjV7C+zOlHYlw==", "dependencies": { - "@libp2p/interface-connection": "^1.0.0", + "@libp2p/interface-connection": "^2.0.0", "@libp2p/interface-peer-id": "^1.0.0" }, "engines": { @@ -1721,21 +1701,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/interface-stream-muxer/node_modules/@libp2p/interface-connection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", - "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", - "dependencies": { - "@libp2p/interface-peer-id": "^1.0.0", - "@libp2p/interfaces": "^3.0.0", - "@multiformats/multiaddr": "^10.2.0", - "it-stream-types": "^1.0.4" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@libp2p/interface-transport": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@libp2p/interface-transport/-/interface-transport-1.0.2.tgz", @@ -1751,21 +1716,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/interface-transport/node_modules/@libp2p/interface-connection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", - "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", - "dependencies": { - "@libp2p/interface-peer-id": "^1.0.0", - "@libp2p/interfaces": "^3.0.0", - "@multiformats/multiaddr": "^10.2.0", - "it-stream-types": "^1.0.4" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@libp2p/interfaces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-3.0.3.tgz", @@ -1837,73 +1787,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/mplex/node_modules/@libp2p/components": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@libp2p/components/-/components-2.0.1.tgz", - "integrity": "sha512-3+HgBnu7MbSBcAODtMRxSbdZ54vNB2TGxmPxeNhDBFb+jTw4pUwCeXUcTkSNzsY8cME0MhsEzQ7bwpdXa9xPeQ==", - "dependencies": { - "@libp2p/interface-address-manager": "^1.0.1", - "@libp2p/interface-connection": "^2.0.0", - "@libp2p/interface-connection-manager": "^1.0.0", - "@libp2p/interface-content-routing": "^1.0.0", - "@libp2p/interface-dht": "^1.0.0", - "@libp2p/interface-metrics": "^2.0.0", - "@libp2p/interface-peer-id": "^1.0.2", - "@libp2p/interface-peer-routing": "^1.0.0", - "@libp2p/interface-peer-store": "^1.0.0", - "@libp2p/interface-pubsub": "^1.0.0", - "@libp2p/interface-registrar": "^2.0.0", - "@libp2p/interface-transport": "^1.0.0", - "@libp2p/interfaces": "^3.0.2", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/mplex/node_modules/@libp2p/interface-connection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", - "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", - "dependencies": { - "@libp2p/interface-peer-id": "^1.0.0", - "@libp2p/interfaces": "^3.0.0", - "@multiformats/multiaddr": "^10.2.0", - "it-stream-types": "^1.0.4" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/mplex/node_modules/@libp2p/interface-metrics": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/interface-metrics/-/interface-metrics-2.0.0.tgz", - "integrity": "sha512-OUMspbgamrPgTQWA9zjyrcVQtXpWegSzPllDVwySBefv14l6AhpgicvVI8s+FPbzdKSj6AanlYDa7V8Ui/14CQ==", - "dependencies": { - "@libp2p/interface-peer-id": "^1.0.0", - "it-stream-types": "^1.0.4" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/mplex/node_modules/@libp2p/interface-registrar": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@libp2p/interface-registrar/-/interface-registrar-2.0.2.tgz", - "integrity": "sha512-HqDQua9J6T9KzrdYA9EhYsI0oc4CeSR1sfi0qdk073/IB3SlP+XtD7RzzVuGeyXjssqZtqf3RwjV7C+zOlHYlw==", - "dependencies": { - "@libp2p/interface-connection": "^2.0.0", - "@libp2p/interface-peer-id": "^1.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@libp2p/mplex/node_modules/@libp2p/logger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", @@ -1919,20 +1802,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/mplex/node_modules/abortable-iterator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", - "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", - "dependencies": { - "get-iterator": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "node_modules/@libp2p/mplex/node_modules/get-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", - "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" - }, "node_modules/@libp2p/mplex/node_modules/it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", @@ -1980,20 +1849,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/multistream-select/node_modules/abortable-iterator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", - "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", - "dependencies": { - "get-iterator": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "node_modules/@libp2p/multistream-select/node_modules/get-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", - "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" - }, "node_modules/@libp2p/multistream-select/node_modules/it-pushable": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", @@ -2198,17 +2053,21 @@ "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" }, "node_modules/@libp2p/pubsub": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/pubsub/-/pubsub-2.0.0.tgz", - "integrity": "sha512-J10G3KMqKfnGnig1sLnLntcCVOu3wU9YqkKLFz10DqqsOFTFVXcYvvWFzCh1AAmo8jvrGBc0fBFLmT/B/fYfeA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@libp2p/pubsub/-/pubsub-3.0.3.tgz", + "integrity": "sha512-DKIkvjjX7/I+no7SAyCiK4lSs/u2FdnSaksvxkD4TocUyKqlXcDO89rYQElSHGN5HaHa59DLaClyQdzuqoLLCg==", "dependencies": { - "@libp2p/components": "^1.0.0", + "@libp2p/components": "^2.0.0", "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-pubsub": "^1.0.3", + "@libp2p/interface-registrar": "^2.0.0", "@libp2p/interfaces": "^3.0.2", - "@libp2p/logger": "^1.1.0", - "@libp2p/peer-collections": "^1.0.0", + "@libp2p/logger": "^2.0.0", + "@libp2p/peer-collections": "^2.0.0", "@libp2p/peer-id": "^1.1.0", - "@libp2p/topology": "^2.0.0", + "@libp2p/topology": "^3.0.0", "@multiformats/multiaddr": "^10.2.0", "abortable-iterator": "^4.0.2", "err-code": "^3.0.1", @@ -2225,59 +2084,47 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/pubsub/node_modules/abortable-iterator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", - "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "node_modules/@libp2p/pubsub/node_modules/@libp2p/logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", "dependencies": { - "get-iterator": "^2.0.0", - "it-stream-types": "^1.0.3" + "@libp2p/interface-peer-id": "^1.0.2", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/@libp2p/pubsub/node_modules/get-iterator": { + "node_modules/@libp2p/pubsub/node_modules/@libp2p/peer-collections": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", - "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-2.0.0.tgz", + "integrity": "sha512-A074sSs0Kv3g/1gaf3ZvMc05sLmho3c3uJtkep4L3cgHokMW0pF+3YovU5KvdgBCB8GEepXiUvYsdPYzehVl7A==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.4", + "@libp2p/peer-id": "^1.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } }, "node_modules/@libp2p/pubsub/node_modules/it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" }, - "node_modules/@libp2p/pubsub/node_modules/p-queue": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.2.0.tgz", - "integrity": "sha512-Kvv7p13M46lTYLQ/PsZdaj/1Vj6u/8oiIJgyQyx4oVkOfHdd7M2EZvXigDvcsSzRwanCzQirV5bJPQFoSQt5MA==", - "dependencies": { - "eventemitter3": "^4.0.7", - "p-timeout": "^5.0.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@libp2p/pubsub/node_modules/p-timeout": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@libp2p/topology": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/topology/-/topology-2.0.0.tgz", - "integrity": "sha512-BV6kIsDdChrjETwJsuvPf64BTScGgQEltJqZJGeEC6h12SnEX7Hh6bVPZqdIPSHzr97HpzXxP/f+fBEaLl/Ivg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/topology/-/topology-3.0.0.tgz", + "integrity": "sha512-gQMkO1j7D/7A9MfL2mtLxr0StXzjqK0V554w7hk25E66Ly0wp1K7vPEfhE9rExLSaQqe9ir4nijhbA3rNnxZng==", "dependencies": { "@libp2p/interface-peer-id": "^1.0.2", - "@libp2p/interface-registrar": "^1.0.0", - "@libp2p/logger": "^1.1.6", + "@libp2p/interface-registrar": "^2.0.0", + "@libp2p/logger": "^2.0.0", "@multiformats/multiaddr": "^10.2.0", "err-code": "^3.0.1", "it-all": "^1.0.6" @@ -2287,6 +2134,21 @@ "npm": ">=7.0.0" } }, + "node_modules/@libp2p/topology/node_modules/@libp2p/logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", + "dependencies": { + "@libp2p/interface-peer-id": "^1.0.2", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@libp2p/tracked-map": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@libp2p/tracked-map/-/tracked-map-1.0.8.tgz", @@ -2353,15 +2215,6 @@ "node": ">=12" } }, - "node_modules/@libp2p/utils/node_modules/abortable-iterator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", - "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", - "dependencies": { - "get-iterator": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, "node_modules/@libp2p/utils/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -2370,11 +2223,6 @@ "node": ">=0.3.1" } }, - "node_modules/@libp2p/utils/node_modules/get-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", - "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" - }, "node_modules/@libp2p/utils/node_modules/is-loopback-addr": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", @@ -2447,21 +2295,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/websockets/node_modules/@libp2p/interface-connection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", - "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", - "dependencies": { - "@libp2p/interface-peer-id": "^1.0.0", - "@libp2p/interfaces": "^3.0.0", - "@multiformats/multiaddr": "^10.2.0", - "it-stream-types": "^1.0.4" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@libp2p/websockets/node_modules/@libp2p/logger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", @@ -2498,20 +2331,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/websockets/node_modules/abortable-iterator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", - "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", - "dependencies": { - "get-iterator": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "node_modules/@libp2p/websockets/node_modules/get-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", - "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" - }, "node_modules/@libp2p/websockets/node_modules/is-loopback-addr": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", @@ -3825,6 +3644,15 @@ "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, + "node_modules/abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "dependencies": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, "node_modules/accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -6807,6 +6635,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -8558,20 +8391,6 @@ "npm": ">=7.0.0" } }, - "node_modules/libp2p/node_modules/abortable-iterator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", - "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", - "dependencies": { - "get-iterator": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "node_modules/libp2p/node_modules/get-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", - "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" - }, "node_modules/libp2p/node_modules/it-pushable": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", @@ -9468,21 +9287,6 @@ "npm": ">=7.0.0" } }, - "node_modules/mortice/node_modules/p-queue": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.2.0.tgz", - "integrity": "sha512-Kvv7p13M46lTYLQ/PsZdaj/1Vj6u/8oiIJgyQyx4oVkOfHdd7M2EZvXigDvcsSzRwanCzQirV5bJPQFoSQt5MA==", - "dependencies": { - "eventemitter3": "^4.0.7", - "p-timeout": "^5.0.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mortice/node_modules/p-timeout": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", @@ -10202,6 +10006,32 @@ "node": ">=8" } }, + "node_modules/p-queue": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.2.0.tgz", + "integrity": "sha512-Kvv7p13M46lTYLQ/PsZdaj/1Vj6u/8oiIJgyQyx4oVkOfHdd7M2EZvXigDvcsSzRwanCzQirV5bJPQFoSQt5MA==", + "dependencies": { + "eventemitter3": "^4.0.7", + "p-timeout": "^5.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-reflect": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-3.0.0.tgz", @@ -13848,26 +13678,30 @@ } }, "@chainsafe/libp2p-gossipsub": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-2.0.0.tgz", - "integrity": "sha512-9tnxXdYbYEA7s4OuC/Ff5XHiKAPsfjSPdbcsdRrIanri0WI7rrwrj7xpOB60IvFIDmGRb2qQjs9qPQcy//670g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-3.2.0.tgz", + "integrity": "sha512-9rdDHVweWAZsC9Ut3MpN8nZCDkSgDJ0o0p8rxMBROsmARrFzzUmG4kHWBPqKEJ3GGC1O8QlrF53VfRJwN6ZOrA==", "requires": { - "@libp2p/components": "^1.0.0", + "@libp2p/components": "^2.0.0", "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-connection": "^2.0.0", "@libp2p/interface-keys": "^1.0.2", "@libp2p/interface-peer-id": "^1.0.2", "@libp2p/interface-pubsub": "^1.0.1", - "@libp2p/interface-registrar": "^1.0.0", + "@libp2p/interface-registrar": "^2.0.0", "@libp2p/interfaces": "^3.0.2", "@libp2p/logger": "^2.0.0", "@libp2p/peer-id": "^1.1.13", "@libp2p/peer-record": "^2.0.0", - "@libp2p/pubsub": "^2.0.0", - "@libp2p/topology": "^2.0.0", + "@libp2p/pubsub": "^3.0.0", + "@libp2p/topology": "^3.0.0", + "abortable-iterator": "^4.0.2", "denque": "^1.5.0", "err-code": "^3.0.1", "iso-random-stream": "^2.0.2", + "it-length-prefixed": "^7.0.1", "it-pipe": "^2.0.3", + "it-pushable": "^3.0.0", "multiformats": "^9.6.4", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0" @@ -13924,33 +13758,37 @@ "is-loopback-addr": "^2.0.1", "it-stream-types": "^1.0.4", "private-ip": "^2.1.1" + }, + "dependencies": { + "@libp2p/interface-connection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-1.0.1.tgz", + "integrity": "sha512-4MP+RvqR5xu6EWgrebLo34HWm/X+hGXtzsCKmNfmLN9bpaYhEobzL4Rm3RYi/0ICrgAZmoU8n+x8widiuwERew==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + } + } } }, - "abortable-iterator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", - "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", - "requires": { - "get-iterator": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "get-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", - "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" - }, "is-loopback-addr": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" + }, + "it-pushable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", + "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" } } }, "@chainsafe/libp2p-noise": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-7.0.0.tgz", - "integrity": "sha512-oPlEqkm0W4EdT0EHtQDvbyKMO2F2HOF8wOnN6zcOJ0PTGHzR9n1xf2eauhiWmRUuXhSA9vBvMnfcQkNFrs2wzQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-7.0.1.tgz", + "integrity": "sha512-V5vYb2jKlnd9jwDcxCB48RvzqHcMZsamTAd0eXZgvCujlu5VmbyaWFcuvIwFY3dHTrVcFQKntIg5WDaqmkuhcg==", "requires": { "@libp2p/crypto": "^1.0.0", "@libp2p/interface-connection-encrypter": "^1.0.2", @@ -14476,21 +14314,21 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "@libp2p/components": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/components/-/components-1.0.0.tgz", - "integrity": "sha512-FksZm+bboEWAqHmw6GBRn+ppQEUwyt7TDTEn4J6nsA8OAXRi4R0bQc9KrdTrzomdaWjBTyAtA4hA1DYxQmmEmg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/components/-/components-2.0.1.tgz", + "integrity": "sha512-3+HgBnu7MbSBcAODtMRxSbdZ54vNB2TGxmPxeNhDBFb+jTw4pUwCeXUcTkSNzsY8cME0MhsEzQ7bwpdXa9xPeQ==", "requires": { "@libp2p/interface-address-manager": "^1.0.1", - "@libp2p/interface-connection": "^1.0.0", + "@libp2p/interface-connection": "^2.0.0", "@libp2p/interface-connection-manager": "^1.0.0", "@libp2p/interface-content-routing": "^1.0.0", "@libp2p/interface-dht": "^1.0.0", - "@libp2p/interface-metrics": "^1.0.2", + "@libp2p/interface-metrics": "^2.0.0", "@libp2p/interface-peer-id": "^1.0.2", "@libp2p/interface-peer-routing": "^1.0.0", "@libp2p/interface-peer-store": "^1.0.0", "@libp2p/interface-pubsub": "^1.0.0", - "@libp2p/interface-registrar": "^1.0.0", + "@libp2p/interface-registrar": "^2.0.0", "@libp2p/interface-transport": "^1.0.0", "@libp2p/interfaces": "^3.0.2", "err-code": "^3.0.1", @@ -14554,9 +14392,9 @@ } }, "@libp2p/interface-connection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-1.0.1.tgz", - "integrity": "sha512-4MP+RvqR5xu6EWgrebLo34HWm/X+hGXtzsCKmNfmLN9bpaYhEobzL4Rm3RYi/0ICrgAZmoU8n+x8widiuwERew==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", + "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", "requires": { "@libp2p/interface-peer-id": "^1.0.0", "@libp2p/interfaces": "^3.0.0", @@ -14581,19 +14419,6 @@ "@libp2p/interface-connection": "^2.0.0", "@libp2p/interface-peer-id": "^1.0.0", "@libp2p/interfaces": "^3.0.0" - }, - "dependencies": { - "@libp2p/interface-connection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", - "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", - "requires": { - "@libp2p/interface-peer-id": "^1.0.0", - "@libp2p/interfaces": "^3.0.0", - "@multiformats/multiaddr": "^10.2.0", - "it-stream-types": "^1.0.4" - } - } } }, "@libp2p/interface-content-routing": { @@ -14624,9 +14449,9 @@ "integrity": "sha512-K8/HlRl/swbVTWuGHNHF28EytszYfUhKgUHfv8CdbMk9ZA/bgO4uU+d9rcrg/Dhw3511U3aRz2bwl2psn6rJfg==" }, "@libp2p/interface-metrics": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@libp2p/interface-metrics/-/interface-metrics-1.0.3.tgz", - "integrity": "sha512-kPSQY/dJqeJ92YeldismoIAxWn0z13kOz0UJY7M5QE7KcW5tJAYDNzDw6sIKKbbWN7bU6KJydnYBSRzhXpLlDw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface-metrics/-/interface-metrics-2.0.0.tgz", + "integrity": "sha512-OUMspbgamrPgTQWA9zjyrcVQtXpWegSzPllDVwySBefv14l6AhpgicvVI8s+FPbzdKSj6AanlYDa7V8Ui/14CQ==", "requires": { "@libp2p/interface-peer-id": "^1.0.0", "it-stream-types": "^1.0.4" @@ -14691,17 +14516,6 @@ "it-pushable": "^3.0.0" }, "dependencies": { - "@libp2p/interface-connection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", - "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", - "requires": { - "@libp2p/interface-peer-id": "^1.0.0", - "@libp2p/interfaces": "^3.0.0", - "@multiformats/multiaddr": "^10.2.0", - "it-stream-types": "^1.0.4" - } - }, "it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", @@ -14718,11 +14532,11 @@ } }, "@libp2p/interface-registrar": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@libp2p/interface-registrar/-/interface-registrar-1.1.0.tgz", - "integrity": "sha512-1Uoyn3KAecklXhsit7ANrc0FP8+mh8pVXB7c8LwGpVwKHK4IPAAfB+beUZSrHHEabp16T87FokaVYRLrGYUqRQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface-registrar/-/interface-registrar-2.0.2.tgz", + "integrity": "sha512-HqDQua9J6T9KzrdYA9EhYsI0oc4CeSR1sfi0qdk073/IB3SlP+XtD7RzzVuGeyXjssqZtqf3RwjV7C+zOlHYlw==", "requires": { - "@libp2p/interface-connection": "^1.0.0", + "@libp2p/interface-connection": "^2.0.0", "@libp2p/interface-peer-id": "^1.0.0" } }, @@ -14734,19 +14548,6 @@ "@libp2p/interface-connection": "^2.0.0", "@libp2p/interfaces": "^3.0.0", "it-stream-types": "^1.0.4" - }, - "dependencies": { - "@libp2p/interface-connection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", - "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", - "requires": { - "@libp2p/interface-peer-id": "^1.0.0", - "@libp2p/interfaces": "^3.0.0", - "@multiformats/multiaddr": "^10.2.0", - "it-stream-types": "^1.0.4" - } - } } }, "@libp2p/interface-transport": { @@ -14758,19 +14559,6 @@ "@libp2p/interfaces": "^3.0.0", "@multiformats/multiaddr": "^10.2.0", "it-stream-types": "^1.0.4" - }, - "dependencies": { - "@libp2p/interface-connection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", - "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", - "requires": { - "@libp2p/interface-peer-id": "^1.0.0", - "@libp2p/interfaces": "^3.0.0", - "@multiformats/multiaddr": "^10.2.0", - "it-stream-types": "^1.0.4" - } - } } }, "@libp2p/interfaces": { @@ -14830,57 +14618,6 @@ "varint": "^6.0.0" }, "dependencies": { - "@libp2p/components": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@libp2p/components/-/components-2.0.1.tgz", - "integrity": "sha512-3+HgBnu7MbSBcAODtMRxSbdZ54vNB2TGxmPxeNhDBFb+jTw4pUwCeXUcTkSNzsY8cME0MhsEzQ7bwpdXa9xPeQ==", - "requires": { - "@libp2p/interface-address-manager": "^1.0.1", - "@libp2p/interface-connection": "^2.0.0", - "@libp2p/interface-connection-manager": "^1.0.0", - "@libp2p/interface-content-routing": "^1.0.0", - "@libp2p/interface-dht": "^1.0.0", - "@libp2p/interface-metrics": "^2.0.0", - "@libp2p/interface-peer-id": "^1.0.2", - "@libp2p/interface-peer-routing": "^1.0.0", - "@libp2p/interface-peer-store": "^1.0.0", - "@libp2p/interface-pubsub": "^1.0.0", - "@libp2p/interface-registrar": "^2.0.0", - "@libp2p/interface-transport": "^1.0.0", - "@libp2p/interfaces": "^3.0.2", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0" - } - }, - "@libp2p/interface-connection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", - "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", - "requires": { - "@libp2p/interface-peer-id": "^1.0.0", - "@libp2p/interfaces": "^3.0.0", - "@multiformats/multiaddr": "^10.2.0", - "it-stream-types": "^1.0.4" - } - }, - "@libp2p/interface-metrics": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/interface-metrics/-/interface-metrics-2.0.0.tgz", - "integrity": "sha512-OUMspbgamrPgTQWA9zjyrcVQtXpWegSzPllDVwySBefv14l6AhpgicvVI8s+FPbzdKSj6AanlYDa7V8Ui/14CQ==", - "requires": { - "@libp2p/interface-peer-id": "^1.0.0", - "it-stream-types": "^1.0.4" - } - }, - "@libp2p/interface-registrar": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@libp2p/interface-registrar/-/interface-registrar-2.0.2.tgz", - "integrity": "sha512-HqDQua9J6T9KzrdYA9EhYsI0oc4CeSR1sfi0qdk073/IB3SlP+XtD7RzzVuGeyXjssqZtqf3RwjV7C+zOlHYlw==", - "requires": { - "@libp2p/interface-connection": "^2.0.0", - "@libp2p/interface-peer-id": "^1.0.0" - } - }, "@libp2p/logger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", @@ -14892,20 +14629,6 @@ "multiformats": "^9.6.3" } }, - "abortable-iterator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", - "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", - "requires": { - "get-iterator": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "get-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", - "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" - }, "it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", @@ -14947,20 +14670,6 @@ "multiformats": "^9.6.3" } }, - "abortable-iterator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", - "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", - "requires": { - "get-iterator": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "get-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", - "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" - }, "it-pushable": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", @@ -15131,17 +14840,21 @@ } }, "@libp2p/pubsub": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/pubsub/-/pubsub-2.0.0.tgz", - "integrity": "sha512-J10G3KMqKfnGnig1sLnLntcCVOu3wU9YqkKLFz10DqqsOFTFVXcYvvWFzCh1AAmo8jvrGBc0fBFLmT/B/fYfeA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@libp2p/pubsub/-/pubsub-3.0.3.tgz", + "integrity": "sha512-DKIkvjjX7/I+no7SAyCiK4lSs/u2FdnSaksvxkD4TocUyKqlXcDO89rYQElSHGN5HaHa59DLaClyQdzuqoLLCg==", "requires": { - "@libp2p/components": "^1.0.0", + "@libp2p/components": "^2.0.0", "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-pubsub": "^1.0.3", + "@libp2p/interface-registrar": "^2.0.0", "@libp2p/interfaces": "^3.0.2", - "@libp2p/logger": "^1.1.0", - "@libp2p/peer-collections": "^1.0.0", + "@libp2p/logger": "^2.0.0", + "@libp2p/peer-collections": "^2.0.0", "@libp2p/peer-id": "^1.1.0", - "@libp2p/topology": "^2.0.0", + "@libp2p/topology": "^3.0.0", "@multiformats/multiaddr": "^10.2.0", "abortable-iterator": "^4.0.2", "err-code": "^3.0.1", @@ -15154,52 +14867,57 @@ "uint8arrays": "^3.0.0" }, "dependencies": { - "abortable-iterator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", - "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "@libp2p/logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", "requires": { - "get-iterator": "^2.0.0", - "it-stream-types": "^1.0.3" + "@libp2p/interface-peer-id": "^1.0.2", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" } }, - "get-iterator": { + "@libp2p/peer-collections": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", - "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-2.0.0.tgz", + "integrity": "sha512-A074sSs0Kv3g/1gaf3ZvMc05sLmho3c3uJtkep4L3cgHokMW0pF+3YovU5KvdgBCB8GEepXiUvYsdPYzehVl7A==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.4", + "@libp2p/peer-id": "^1.1.0" + } }, "it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" - }, - "p-queue": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.2.0.tgz", - "integrity": "sha512-Kvv7p13M46lTYLQ/PsZdaj/1Vj6u/8oiIJgyQyx4oVkOfHdd7M2EZvXigDvcsSzRwanCzQirV5bJPQFoSQt5MA==", - "requires": { - "eventemitter3": "^4.0.7", - "p-timeout": "^5.0.2" - } - }, - "p-timeout": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==" } } }, "@libp2p/topology": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/topology/-/topology-2.0.0.tgz", - "integrity": "sha512-BV6kIsDdChrjETwJsuvPf64BTScGgQEltJqZJGeEC6h12SnEX7Hh6bVPZqdIPSHzr97HpzXxP/f+fBEaLl/Ivg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/topology/-/topology-3.0.0.tgz", + "integrity": "sha512-gQMkO1j7D/7A9MfL2mtLxr0StXzjqK0V554w7hk25E66Ly0wp1K7vPEfhE9rExLSaQqe9ir4nijhbA3rNnxZng==", "requires": { "@libp2p/interface-peer-id": "^1.0.2", - "@libp2p/interface-registrar": "^1.0.0", - "@libp2p/logger": "^1.1.6", + "@libp2p/interface-registrar": "^2.0.0", + "@libp2p/logger": "^2.0.0", "@multiformats/multiaddr": "^10.2.0", "err-code": "^3.0.1", "it-all": "^1.0.6" + }, + "dependencies": { + "@libp2p/logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", + "requires": { + "@libp2p/interface-peer-id": "^1.0.2", + "debug": "^4.3.3", + "interface-datastore": "^6.1.0", + "multiformats": "^9.6.3" + } + } } }, "@libp2p/tracked-map": { @@ -15255,25 +14973,11 @@ "@jridgewell/trace-mapping": "0.3.9" } }, - "abortable-iterator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", - "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", - "requires": { - "get-iterator": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" }, - "get-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", - "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" - }, "is-loopback-addr": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", @@ -15322,17 +15026,6 @@ "wherearewe": "^1.0.0" }, "dependencies": { - "@libp2p/interface-connection": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-2.1.1.tgz", - "integrity": "sha512-gjugaMsZvfo3r4tCc/yPifVQsfLogmEmJtW+eXMNiNDna3ZfmwWD9Z+KyEwuVsXKs0C4GESXei2y4SJSCEfkbA==", - "requires": { - "@libp2p/interface-peer-id": "^1.0.0", - "@libp2p/interfaces": "^3.0.0", - "@multiformats/multiaddr": "^10.2.0", - "it-stream-types": "^1.0.4" - } - }, "@libp2p/logger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", @@ -15361,20 +15054,6 @@ "private-ip": "^2.1.1" } }, - "abortable-iterator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", - "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", - "requires": { - "get-iterator": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "get-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", - "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" - }, "is-loopback-addr": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", @@ -16412,6 +16091,15 @@ "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, + "abortable-iterator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", + "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", + "requires": { + "get-iterator": "^2.0.0", + "it-stream-types": "^1.0.3" + } + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -18655,6 +18343,11 @@ "has-symbols": "^1.0.1" } }, + "get-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", + "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" + }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -19975,20 +19668,6 @@ "multiformats": "^9.6.3" } }, - "abortable-iterator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-4.0.2.tgz", - "integrity": "sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==", - "requires": { - "get-iterator": "^2.0.0", - "it-stream-types": "^1.0.3" - } - }, - "get-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", - "integrity": "sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==" - }, "it-pushable": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", @@ -20649,15 +20328,6 @@ "p-timeout": "^5.0.2" }, "dependencies": { - "p-queue": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.2.0.tgz", - "integrity": "sha512-Kvv7p13M46lTYLQ/PsZdaj/1Vj6u/8oiIJgyQyx4oVkOfHdd7M2EZvXigDvcsSzRwanCzQirV5bJPQFoSQt5MA==", - "requires": { - "eventemitter3": "^4.0.7", - "p-timeout": "^5.0.2" - } - }, "p-timeout": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", @@ -21208,6 +20878,22 @@ "aggregate-error": "^3.0.0" } }, + "p-queue": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.2.0.tgz", + "integrity": "sha512-Kvv7p13M46lTYLQ/PsZdaj/1Vj6u/8oiIJgyQyx4oVkOfHdd7M2EZvXigDvcsSzRwanCzQirV5bJPQFoSQt5MA==", + "requires": { + "eventemitter3": "^4.0.7", + "p-timeout": "^5.0.2" + }, + "dependencies": { + "p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==" + } + } + }, "p-reflect": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-3.0.0.tgz", diff --git a/package.json b/package.json index e87d9813ea..ffa6ae21c1 100644 --- a/package.json +++ b/package.json @@ -66,8 +66,8 @@ "node": ">=16" }, "dependencies": { - "@chainsafe/libp2p-gossipsub": "^2.0.0", - "@chainsafe/libp2p-noise": "^7.0.0", + "@chainsafe/libp2p-gossipsub": "^3.2.0", + "@chainsafe/libp2p-noise": "^7.0.1", "@ethersproject/rlp": "^5.5.0", "@libp2p/crypto": "^1.0.0", "@libp2p/interface-peer-discovery": "^1.0.0", From 61e6ec8ed4a08fbc0751c3a5eb70c012e1900167 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 20 Jul 2022 13:11:25 +1000 Subject: [PATCH 25/68] chore: upgrade rollup-plugin-polyfill-node --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54cd41ff46..87197e838f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -85,7 +85,7 @@ "protons": "^3.0.4", "puppeteer": "^13.0.1", "rollup": "^2.75.0", - "rollup-plugin-polyfill-node": "^0.9.0", + "rollup-plugin-polyfill-node": "^0.10.1", "size-limit": "^7.0.8", "stream-browserify": "^3.0.0", "tail": "^2.2.0", @@ -11214,9 +11214,9 @@ } }, "node_modules/rollup-plugin-polyfill-node": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.9.0.tgz", - "integrity": "sha512-cVqm7LjgBqtZ77M9hLYayXrLz18nLIVPp3MPqNi2suStrFDg1LsA2cSdMIighr2yeuAQrphu8ymXTAsJNVABow==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.10.1.tgz", + "integrity": "sha512-PT9OfHuOya8juO0YJZE0JDyeZGXjY0SOhFGvvldzR6JwwzCVoJFMWK44pEuzdoDoOodEYD9ltwLVJ+3JnrPpRQ==", "dev": true, "dependencies": { "@rollup/plugin-inject": "^4.0.0" @@ -21726,9 +21726,9 @@ } }, "rollup-plugin-polyfill-node": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.9.0.tgz", - "integrity": "sha512-cVqm7LjgBqtZ77M9hLYayXrLz18nLIVPp3MPqNi2suStrFDg1LsA2cSdMIighr2yeuAQrphu8ymXTAsJNVABow==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.10.1.tgz", + "integrity": "sha512-PT9OfHuOya8juO0YJZE0JDyeZGXjY0SOhFGvvldzR6JwwzCVoJFMWK44pEuzdoDoOodEYD9ltwLVJ+3JnrPpRQ==", "dev": true, "requires": { "@rollup/plugin-inject": "^4.0.0" diff --git a/package.json b/package.json index ffa6ae21c1..501865f6ff 100644 --- a/package.json +++ b/package.json @@ -142,7 +142,7 @@ "protons": "^3.0.4", "puppeteer": "^13.0.1", "rollup": "^2.75.0", - "rollup-plugin-polyfill-node": "^0.9.0", + "rollup-plugin-polyfill-node": "^0.10.1", "size-limit": "^7.0.8", "stream-browserify": "^3.0.0", "tail": "^2.2.0", From 4669c4d1493bf0f51b30ebe16ba51d28408c1635 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Thu, 21 Jul 2022 12:31:49 +1000 Subject: [PATCH 26/68] chore: upgrade @chainsafe/libp2p-gossipsub to 3.3.0 --- package-lock.json | 16 +++++++--------- package.json | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 87197e838f..2f40ea4662 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.24.0", "license": "MIT OR Apache-2.0", "dependencies": { - "@chainsafe/libp2p-gossipsub": "^3.2.0", + "@chainsafe/libp2p-gossipsub": "^3.3.0", "@chainsafe/libp2p-noise": "^7.0.1", "@ethersproject/rlp": "^5.5.0", "@libp2p/crypto": "^1.0.0", @@ -642,9 +642,9 @@ } }, "node_modules/@chainsafe/libp2p-gossipsub": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-3.2.0.tgz", - "integrity": "sha512-9rdDHVweWAZsC9Ut3MpN8nZCDkSgDJ0o0p8rxMBROsmARrFzzUmG4kHWBPqKEJ3GGC1O8QlrF53VfRJwN6ZOrA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-3.3.0.tgz", + "integrity": "sha512-eZJD1WsMTVhZ3E4OAD6oRGIjJ39gwrhp/QiU+dGeD7PC3YW8K3TyyqgIBccQ2eUdJFVy7p79AmCKgIjBvx9yyw==", "dependencies": { "@libp2p/components": "^2.0.0", "@libp2p/crypto": "^1.0.0", @@ -662,7 +662,6 @@ "abortable-iterator": "^4.0.2", "denque": "^1.5.0", "err-code": "^3.0.1", - "iso-random-stream": "^2.0.2", "it-length-prefixed": "^7.0.1", "it-pipe": "^2.0.3", "it-pushable": "^3.0.0", @@ -13678,9 +13677,9 @@ } }, "@chainsafe/libp2p-gossipsub": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-3.2.0.tgz", - "integrity": "sha512-9rdDHVweWAZsC9Ut3MpN8nZCDkSgDJ0o0p8rxMBROsmARrFzzUmG4kHWBPqKEJ3GGC1O8QlrF53VfRJwN6ZOrA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-3.3.0.tgz", + "integrity": "sha512-eZJD1WsMTVhZ3E4OAD6oRGIjJ39gwrhp/QiU+dGeD7PC3YW8K3TyyqgIBccQ2eUdJFVy7p79AmCKgIjBvx9yyw==", "requires": { "@libp2p/components": "^2.0.0", "@libp2p/crypto": "^1.0.0", @@ -13698,7 +13697,6 @@ "abortable-iterator": "^4.0.2", "denque": "^1.5.0", "err-code": "^3.0.1", - "iso-random-stream": "^2.0.2", "it-length-prefixed": "^7.0.1", "it-pipe": "^2.0.3", "it-pushable": "^3.0.0", diff --git a/package.json b/package.json index 501865f6ff..fc37ee8843 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "node": ">=16" }, "dependencies": { - "@chainsafe/libp2p-gossipsub": "^3.2.0", + "@chainsafe/libp2p-gossipsub": "^3.3.0", "@chainsafe/libp2p-noise": "^7.0.1", "@ethersproject/rlp": "^5.5.0", "@libp2p/crypto": "^1.0.0", From c346361940bf546e5ff01a211669942edceb7ecd Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Fri, 22 Jul 2022 15:25:31 +1000 Subject: [PATCH 27/68] chore: bump @libp2p/mplex to 4.0.0 --- package-lock.json | 54 ++++++++++++++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f40ea4662..5a9aa05949 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@libp2p/interface-peer-info": "^1.0.1", "@libp2p/interface-peer-store": "^1.0.0", "@libp2p/interfaces": "^3.0.2", - "@libp2p/mplex": "^3.0.0", + "@libp2p/mplex": "^4.0.0", "@libp2p/peer-id": "^1.1.10", "@libp2p/websockets": "^3.0.0", "@multiformats/multiaddr": "^10.2.0", @@ -1687,9 +1687,9 @@ } }, "node_modules/@libp2p/interface-stream-muxer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@libp2p/interface-stream-muxer/-/interface-stream-muxer-1.1.0.tgz", - "integrity": "sha512-RvljPB4VIUwewAFyI23ldjmnjeh6b3grxjyqSFZvghtDrVgJqpEIHlm1F1pT2rdGG6vC0NIzSJGQ5p/rVPfUvA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-stream-muxer/-/interface-stream-muxer-2.0.1.tgz", + "integrity": "sha512-DDh9DT6kgN6Uo/EkydHh0/MqLMuM7eg9AyoUV4X/tt6kWulXr/Xq5i4Ho3PsPGPEz+o+75cgZkzywOIenD0VWA==", "dependencies": { "@libp2p/interface-connection": "^2.0.0", "@libp2p/interfaces": "^3.0.0", @@ -1762,15 +1762,15 @@ "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" }, "node_modules/@libp2p/mplex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-3.0.0.tgz", - "integrity": "sha512-vF8gUlGQfs6j2BmRdaKbKoyiB6ye9dP5rUO4Q2Ihy7wa3IyIJg4mYE8HpN7wr7LaFjspyS/ZgDXvtaJA1qSvUg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-4.0.0.tgz", + "integrity": "sha512-Y9D0p1B7DBWpBL1RGOCPGcj9YzT4yNtzaX0uAMYVLPL97CAPSc84ZMUfPpVjqVpXrdFmZOVpBZ0r00tnIPQXjQ==", "dependencies": { "@libp2p/components": "^2.0.0", "@libp2p/interface-connection": "^2.0.0", - "@libp2p/interface-stream-muxer": "^1.0.1", + "@libp2p/interface-stream-muxer": "^2.0.0", "@libp2p/logger": "^2.0.0", - "@libp2p/tracked-map": "^1.0.5", + "@libp2p/tracked-map": "^2.0.0", "abortable-iterator": "^4.0.2", "any-signal": "^3.0.0", "err-code": "^3.0.1", @@ -1801,6 +1801,18 @@ "npm": ">=7.0.0" } }, + "node_modules/@libp2p/mplex/node_modules/@libp2p/tracked-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/tracked-map/-/tracked-map-2.0.1.tgz", + "integrity": "sha512-T0/m67VAZuEw+AO9U+rlLFkHUqB1w0Dy9Pqw2+f0XL6uplv2xXKSJeU0yUAjiOGsfrJ4pUPPQbgsz2Xr3WNoIQ==", + "dependencies": { + "@libp2p/interface-metrics": "^2.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@libp2p/mplex/node_modules/it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", @@ -14539,9 +14551,9 @@ } }, "@libp2p/interface-stream-muxer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@libp2p/interface-stream-muxer/-/interface-stream-muxer-1.1.0.tgz", - "integrity": "sha512-RvljPB4VIUwewAFyI23ldjmnjeh6b3grxjyqSFZvghtDrVgJqpEIHlm1F1pT2rdGG6vC0NIzSJGQ5p/rVPfUvA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-stream-muxer/-/interface-stream-muxer-2.0.1.tgz", + "integrity": "sha512-DDh9DT6kgN6Uo/EkydHh0/MqLMuM7eg9AyoUV4X/tt6kWulXr/Xq5i4Ho3PsPGPEz+o+75cgZkzywOIenD0VWA==", "requires": { "@libp2p/interface-connection": "^2.0.0", "@libp2p/interfaces": "^3.0.0", @@ -14596,15 +14608,15 @@ } }, "@libp2p/mplex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-3.0.0.tgz", - "integrity": "sha512-vF8gUlGQfs6j2BmRdaKbKoyiB6ye9dP5rUO4Q2Ihy7wa3IyIJg4mYE8HpN7wr7LaFjspyS/ZgDXvtaJA1qSvUg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-4.0.0.tgz", + "integrity": "sha512-Y9D0p1B7DBWpBL1RGOCPGcj9YzT4yNtzaX0uAMYVLPL97CAPSc84ZMUfPpVjqVpXrdFmZOVpBZ0r00tnIPQXjQ==", "requires": { "@libp2p/components": "^2.0.0", "@libp2p/interface-connection": "^2.0.0", - "@libp2p/interface-stream-muxer": "^1.0.1", + "@libp2p/interface-stream-muxer": "^2.0.0", "@libp2p/logger": "^2.0.0", - "@libp2p/tracked-map": "^1.0.5", + "@libp2p/tracked-map": "^2.0.0", "abortable-iterator": "^4.0.2", "any-signal": "^3.0.0", "err-code": "^3.0.1", @@ -14627,6 +14639,14 @@ "multiformats": "^9.6.3" } }, + "@libp2p/tracked-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/tracked-map/-/tracked-map-2.0.1.tgz", + "integrity": "sha512-T0/m67VAZuEw+AO9U+rlLFkHUqB1w0Dy9Pqw2+f0XL6uplv2xXKSJeU0yUAjiOGsfrJ4pUPPQbgsz2Xr3WNoIQ==", + "requires": { + "@libp2p/interface-metrics": "^2.0.0" + } + }, "it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", diff --git a/package.json b/package.json index fc37ee8843..cea1bf6e62 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "@libp2p/interface-peer-info": "^1.0.1", "@libp2p/interface-peer-store": "^1.0.0", "@libp2p/interfaces": "^3.0.2", - "@libp2p/mplex": "^3.0.0", + "@libp2p/mplex": "^4.0.0", "@libp2p/peer-id": "^1.1.10", "@libp2p/websockets": "^3.0.0", "@multiformats/multiaddr": "^10.2.0", From 4eeca93d471c0f8a68005a84c0c03963d93cc4cd Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Fri, 22 Jul 2022 15:26:43 +1000 Subject: [PATCH 28/68] chore: bump libp2p to next (0.38.0 rc) --- package-lock.json | 2050 +++++++++++++----------------- package.json | 2 +- src/lib/waku.ts | 8 +- src/lib/waku_filter/index.ts | 14 +- src/lib/waku_light_push/index.ts | 2 +- src/lib/waku_store/index.ts | 2 +- 6 files changed, 927 insertions(+), 1151 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5a9aa05949..bafeea8710 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "it-length-prefixed": "^7.0.1", "it-pipe": "^2.0.3", "js-sha3": "^0.8.0", - "libp2p": "^0.37.3", + "libp2p": "next", "multiformats": "^9.6.5", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", @@ -137,32 +137,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@achingbrain/nat-port-mapper/node_modules/@libp2p/logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", - "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", - "dependencies": { - "@libp2p/interface-peer-id": "^1.0.2", - "debug": "^4.3.3", - "interface-datastore": "^6.1.0", - "multiformats": "^9.6.3" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@achingbrain/nat-port-mapper/node_modules/p-defer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", - "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@achingbrain/nat-port-mapper/node_modules/p-timeout": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", @@ -670,21 +644,6 @@ "uint8arrays": "^3.0.0" } }, - "node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", - "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", - "dependencies": { - "@libp2p/interface-peer-id": "^1.0.2", - "debug": "^4.3.3", - "interface-datastore": "^6.1.0", - "multiformats": "^9.6.3" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/peer-record": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-2.0.2.tgz", @@ -750,11 +709,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@chainsafe/libp2p-gossipsub/node_modules/is-loopback-addr": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", - "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" - }, "node_modules/@chainsafe/libp2p-gossipsub/node_modules/it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", @@ -789,21 +743,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", - "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", - "dependencies": { - "@libp2p/interface-peer-id": "^1.0.2", - "debug": "^4.3.3", - "interface-datastore": "^6.1.0", - "multiformats": "^9.6.3" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@cspell/cspell-bundled-dicts": { "version": "5.14.0", "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-5.14.0.tgz", @@ -1324,28 +1263,6 @@ "node": ">=8" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@leichtgewicht/base64-codec": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@leichtgewicht/base64-codec/-/base64-codec-1.0.0.tgz", @@ -1410,12 +1327,14 @@ } }, "node_modules/@libp2p/connection": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/connection/-/connection-2.0.4.tgz", - "integrity": "sha512-YGMa0ZTbKdyu4b58mLdVT3XKgfBGp/R5h2FTT/8sB3fHTkJ6Crl3Ad5a+cVuqsWfJhrHDncU3SJaqFH4fxhLmg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/connection/-/connection-4.0.0.tgz", + "integrity": "sha512-fBiyKzuFQ4jeKK0fQ2tCHjpRgGO/wPM0W4dHCLnb+LB94Jv9mIlMmKbaDnju8+K1Pd67/Y1/L3OQElHtwYJOsA==", "dependencies": { - "@libp2p/interfaces": "^2.0.0", - "@libp2p/logger": "^1.1.0", + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interfaces": "^3.0.2", + "@libp2p/logger": "^2.0.0", "@multiformats/multiaddr": "^10.1.5", "err-code": "^3.0.1" }, @@ -1424,28 +1343,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/connection/node_modules/@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", - "dependencies": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", - "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/connection/node_modules/it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - }, "node_modules/@libp2p/crypto": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-1.0.0.tgz", @@ -1725,11 +1622,11 @@ } }, "node_modules/@libp2p/logger": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-1.1.6.tgz", - "integrity": "sha512-ZKoRUt7cyHlbxHYDZ1Fn3A+ByqGABdmd4z07+1TfVvpEQSpn2IVcV0mt6ff5kUUtGuVeSrqK1/ZDzWqhgg56vg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", "dependencies": { - "@libp2p/interfaces": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.2", "debug": "^4.3.3", "interface-datastore": "^6.1.0", "multiformats": "^9.6.3" @@ -1739,28 +1636,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/logger/node_modules/@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", - "dependencies": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", - "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/logger/node_modules/it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - }, "node_modules/@libp2p/mplex": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-4.0.0.tgz", @@ -1786,56 +1661,29 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/mplex/node_modules/@libp2p/logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", - "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", - "dependencies": { - "@libp2p/interface-peer-id": "^1.0.2", - "debug": "^4.3.3", - "interface-datastore": "^6.1.0", - "multiformats": "^9.6.3" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/mplex/node_modules/@libp2p/tracked-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@libp2p/tracked-map/-/tracked-map-2.0.1.tgz", - "integrity": "sha512-T0/m67VAZuEw+AO9U+rlLFkHUqB1w0Dy9Pqw2+f0XL6uplv2xXKSJeU0yUAjiOGsfrJ4pUPPQbgsz2Xr3WNoIQ==", - "dependencies": { - "@libp2p/interface-metrics": "^2.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@libp2p/mplex/node_modules/it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" }, "node_modules/@libp2p/multistream-select": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-1.0.6.tgz", - "integrity": "sha512-8veeiZDrh7aCvILjNGps4ZLKSKTdBxJZS4SZkuhbCKmq7eX6aJoYoQ5G5MBxEFiBKtgwTKHaSroH3jfvizwDoA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-2.0.2.tgz", + "integrity": "sha512-xW8BVHXw4JDSLFC+/3PxctwkPxPHfEYdq1hiB7F7adVp65ERg+65TEd0RD/knNOj+aMQkrQl0DUsldSTRNTWkw==", "dependencies": { - "@libp2p/interfaces": "^2.0.0", - "@libp2p/logger": "^1.1.0", + "@libp2p/interfaces": "^3.0.2", + "@libp2p/logger": "^2.0.0", "abortable-iterator": "^4.0.2", "err-code": "^3.0.1", "it-first": "^1.0.6", - "it-handshake": "^3.0.1", - "it-length-prefixed": "^7.0.1", + "it-handshake": "^4.0.1", + "it-length-prefixed": "^8.0.2", "it-pipe": "^2.0.3", - "it-pushable": "^2.0.1", - "it-reader": "^5.0.0", + "it-pushable": "^3.0.0", + "it-reader": "^6.0.1", "it-stream-types": "^1.0.4", "p-defer": "^4.0.0", - "uint8arraylist": "^1.5.1", + "uint8arraylist": "^2.0.0", "uint8arrays": "^3.0.0" }, "engines": { @@ -1843,17 +1691,32 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/multistream-select/node_modules/@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "node_modules/@libp2p/multistream-select/node_modules/it-handshake": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-4.0.1.tgz", + "integrity": "sha512-80dJPkxA77iTy172OnTWg5pjiOQ7KO0+o2FGCyJn3Vb/NJQKQiWL7LJY50uT5n8EYzv8SV5dDNF234PwMsQAXw==", "dependencies": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", + "it-map": "^1.0.6", + "it-pushable": "^3.0.0", + "it-reader": "^6.0.1", "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" + "p-defer": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/multistream-select/node_modules/it-length-prefixed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-8.0.2.tgz", + "integrity": "sha512-qYCGZ6lTaI6lcuTXUrJmVpE6clq63ULrkq1FGTxHrzexjB2cCrS/CZ5HCRDZ5IRPw33tSDUDK91S7X5S64dPyQ==", + "dependencies": { + "err-code": "^3.0.1", + "it-stream-types": "^1.0.4", + "uint8-varint": "^1.0.1", + "uint8arraylist": "^2.0.0", + "uint8arrays": "^3.0.0" }, "engines": { "node": ">=16.0.0", @@ -1861,19 +1724,33 @@ } }, "node_modules/@libp2p/multistream-select/node_modules/it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", + "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" }, - "node_modules/@libp2p/multistream-select/node_modules/p-defer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", - "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", - "engines": { - "node": ">=12" + "node_modules/@libp2p/multistream-select/node_modules/it-reader": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-6.0.1.tgz", + "integrity": "sha512-C+YRk3OTufbKSJMNEonfEw+9F38llmwwZvqhkjb0xIgob7l4L3p01Yt43+bHRI8SSppAOgk5AKLqas7ea0UTAw==", + "dependencies": { + "it-stream-types": "^1.0.4", + "uint8arraylist": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/multistream-select/node_modules/uint8arraylist": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.0.0.tgz", + "integrity": "sha512-OOx2TiInuBOlvDDhS0um83DWVTvgvazvo96xkMVBV3RbDI5HPxdqudzsIKMzh2lklP52diJ/tVhAhlxHS2f0jA==", + "dependencies": { + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, "node_modules/@libp2p/peer-collections": { @@ -1945,15 +1822,16 @@ } }, "node_modules/@libp2p/peer-record": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-1.0.12.tgz", - "integrity": "sha512-1b4aeU4sduRBUH4RKDtYBHKOEXwohrlOoBrrNPKb1WFweLMnG3oznhGusMvKQ8YuXSOTpbNPHrbJ/iJnrBbVUQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-3.0.0.tgz", + "integrity": "sha512-JN7Q78G1lg9fRiaghbzN0ZlerkOE646XaMrtUtAmMWsumrs75tTuZHgcYLsoAxiL6WmzJ4I9uCoY+jUl3O7l/Q==", "dependencies": { - "@libp2p/crypto": "^0.22.8", - "@libp2p/interfaces": "^2.0.0", - "@libp2p/logger": "^1.1.0", - "@libp2p/peer-id": "^1.1.0", - "@libp2p/utils": "^1.0.9", + "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-record": "^1.0.1", + "@libp2p/logger": "^2.0.0", + "@libp2p/peer-id": "^1.1.13", + "@libp2p/utils": "^3.0.0", "@multiformats/multiaddr": "^10.1.5", "err-code": "^3.0.1", "interface-datastore": "^6.1.0", @@ -1972,58 +1850,21 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/peer-record/node_modules/@libp2p/crypto": { - "version": "0.22.14", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-0.22.14.tgz", - "integrity": "sha512-5RyGh5ovfqrDD8Io3n5rvVnsTHBf1exIMZ/5eBw7Eoy21xkmzdF1Hy701SoSNmiCuTPXYmxT5WMy2VUDBUG6oQ==", - "dependencies": { - "@libp2p/interfaces": "^2.0.1", - "@noble/ed25519": "^1.6.0", - "@noble/secp256k1": "^1.5.4", - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "multiformats": "^9.4.5", - "node-forge": "^1.1.0", - "protons-runtime": "^1.0.4", - "uint8arrays": "^3.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/peer-record/node_modules/@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", - "dependencies": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", - "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/peer-record/node_modules/it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - }, "node_modules/@libp2p/peer-store": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-1.0.17.tgz", - "integrity": "sha512-1uvwjJ2dRQyQnms+vBY3CgWpZe+0EYSoCNo7UUE6dhJHIA3q1Syl4kZWukA081m1eFzmMLG2VjsrzUQAfmy+Sw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-3.1.0.tgz", + "integrity": "sha512-GYOK/kTjrDxVW2CIQII60zGgLx4EDG1CLXHOOcsdob8MCw/A23UwKEdIxsw2YAJvQBExDWPZjZvbG1ewPHtrFQ==", "dependencies": { - "@libp2p/interfaces": "^2.0.0", - "@libp2p/logger": "^1.1.0", + "@libp2p/components": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-peer-info": "^1.0.1", + "@libp2p/interface-peer-store": "^1.1.0", + "@libp2p/interface-record": "^1.0.1", + "@libp2p/interfaces": "^3.0.2", + "@libp2p/logger": "^2.0.0", "@libp2p/peer-id": "^1.1.0", - "@libp2p/peer-record": "^1.0.0", - "@multiformats/multiaddr": "^10.1.5", + "@libp2p/peer-record": "^2.0.0", + "@multiformats/multiaddr": "^10.2.0", "err-code": "^3.0.1", "interface-datastore": "^6.1.0", "it-all": "^1.0.6", @@ -2041,27 +1882,70 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/peer-store/node_modules/@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "node_modules/@libp2p/peer-store/node_modules/@libp2p/interface-connection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-1.0.1.tgz", + "integrity": "sha512-4MP+RvqR5xu6EWgrebLo34HWm/X+hGXtzsCKmNfmLN9bpaYhEobzL4Rm3RYi/0ICrgAZmoU8n+x8widiuwERew==", "dependencies": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", - "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" }, "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, - "node_modules/@libp2p/peer-store/node_modules/it-pushable": { + "node_modules/@libp2p/peer-store/node_modules/@libp2p/peer-record": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-2.0.2.tgz", + "integrity": "sha512-JkH9fBpBpGQYqDMJP3+LNtXLyjNCf0fVcBkdjyfPTSwUXTPJ5NxsluJAH+MZkkrJG9YJG22NgrZO5784GSLAaA==", + "dependencies": { + "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-record": "^1.0.1", + "@libp2p/logger": "^2.0.0", + "@libp2p/peer-id": "^1.1.13", + "@libp2p/utils": "^2.0.0", + "@multiformats/multiaddr": "^10.1.5", + "err-code": "^3.0.1", + "interface-datastore": "^6.1.0", + "it-all": "^1.0.6", + "it-filter": "^1.0.3", + "it-foreach": "^0.1.1", + "it-map": "^1.0.6", + "it-pipe": "^2.0.3", + "multiformats": "^9.6.3", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/peer-store/node_modules/@libp2p/utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-2.0.1.tgz", + "integrity": "sha512-R0r9fkskuTmm5jMrlRXWpTdYJeDYcNQ1KdfSEmoVlCs5AlTeWn31+cdaHQihSEbkpEKtVCExfsZkwa3f7C1l8A==", + "dependencies": { + "@achingbrain/ip-address": "^8.1.0", + "@libp2p/interface-connection": "^1.0.1", + "@libp2p/interface-peer-store": "^1.0.0", + "@libp2p/logger": "^2.0.0", + "@multiformats/multiaddr": "^10.1.1", + "abortable-iterator": "^4.0.2", + "err-code": "^3.0.1", + "is-loopback-addr": "^2.0.1", + "it-stream-types": "^1.0.4", + "private-ip": "^2.1.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } }, "node_modules/@libp2p/pubsub": { "version": "3.0.3", @@ -2095,21 +1979,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/pubsub/node_modules/@libp2p/logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", - "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", - "dependencies": { - "@libp2p/interface-peer-id": "^1.0.2", - "debug": "^4.3.3", - "interface-datastore": "^6.1.0", - "multiformats": "^9.6.3" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@libp2p/pubsub/node_modules/@libp2p/peer-collections": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-2.0.0.tgz", @@ -2145,142 +2014,39 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/topology/node_modules/@libp2p/logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", - "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", - "dependencies": { - "@libp2p/interface-peer-id": "^1.0.2", - "debug": "^4.3.3", - "interface-datastore": "^6.1.0", - "multiformats": "^9.6.3" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@libp2p/tracked-map": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@libp2p/tracked-map/-/tracked-map-1.0.8.tgz", - "integrity": "sha512-tN56iEdSbDuUhDApQV0k93aIQu/vACN8fNHsaWZrFpvwPaXmLb//jn3m34pwnSyaTPjUSendP25+JDzg/2U/mw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/tracked-map/-/tracked-map-2.0.1.tgz", + "integrity": "sha512-T0/m67VAZuEw+AO9U+rlLFkHUqB1w0Dy9Pqw2+f0XL6uplv2xXKSJeU0yUAjiOGsfrJ4pUPPQbgsz2Xr3WNoIQ==", "dependencies": { - "@libp2p/interfaces": "^2.0.0" + "@libp2p/interface-metrics": "^2.0.0" }, "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, - "node_modules/@libp2p/tracked-map/node_modules/@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", - "dependencies": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", - "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/tracked-map/node_modules/it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - }, "node_modules/@libp2p/utils": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-1.0.10.tgz", - "integrity": "sha512-jlVLfac1IoBlgXL8V+XZYxNw0SOAkKweiLhXWolUbKOgRtMDquJzbwG1n8y9GtdiFKPlkiBwOB7l9xighcOR6w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-3.0.0.tgz", + "integrity": "sha512-ik2IjnoO+73/5b3gSfXyMS3+eQAhNpzhzvvqQNOI8gcU6jcLvliStldwt1LKiMe9M3ZUOy6LHeB/3vF1dO9CSA==", "dependencies": { "@achingbrain/ip-address": "^8.1.0", - "@libp2p/logger": "^1.0.1", + "@libp2p/interface-connection": "^2.1.0", + "@libp2p/interface-peer-store": "^1.0.0", + "@libp2p/logger": "^2.0.0", "@multiformats/multiaddr": "^10.1.1", "abortable-iterator": "^4.0.2", "err-code": "^3.0.1", "is-loopback-addr": "^2.0.1", "it-stream-types": "^1.0.4", - "private-ip": "^2.1.1", - "ts-mocha": "^9.0.2", - "ts-node": "^10.7.0" + "private-ip": "^2.1.1" }, "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, - "node_modules/@libp2p/utils/node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@libp2p/utils/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/@libp2p/utils/node_modules/is-loopback-addr": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", - "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" - }, - "node_modules/@libp2p/utils/node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, "node_modules/@libp2p/websockets": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-3.0.1.tgz", @@ -2306,47 +2072,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/websockets/node_modules/@libp2p/logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", - "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", - "dependencies": { - "@libp2p/interface-peer-id": "^1.0.2", - "debug": "^4.3.3", - "interface-datastore": "^6.1.0", - "multiformats": "^9.6.3" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/websockets/node_modules/@libp2p/utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-3.0.0.tgz", - "integrity": "sha512-ik2IjnoO+73/5b3gSfXyMS3+eQAhNpzhzvvqQNOI8gcU6jcLvliStldwt1LKiMe9M3ZUOy6LHeB/3vF1dO9CSA==", - "dependencies": { - "@achingbrain/ip-address": "^8.1.0", - "@libp2p/interface-connection": "^2.1.0", - "@libp2p/interface-peer-store": "^1.0.0", - "@libp2p/logger": "^2.0.0", - "@multiformats/multiaddr": "^10.1.1", - "abortable-iterator": "^4.0.2", - "err-code": "^3.0.1", - "is-loopback-addr": "^2.0.1", - "it-stream-types": "^1.0.4", - "private-ip": "^2.1.1" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@libp2p/websockets/node_modules/is-loopback-addr": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", - "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" - }, "node_modules/@libp2p/websockets/node_modules/it-ws": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/it-ws/-/it-ws-5.0.2.tgz", @@ -2363,17 +2088,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@libp2p/websockets/node_modules/p-defer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", - "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@libp2p/websockets/node_modules/p-timeout": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", @@ -2920,22 +2634,26 @@ "node_modules/@tsconfig/node10": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true }, "node_modules/@tsconfig/node12": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==" + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true }, "node_modules/@tsconfig/node14": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true }, "node_modules/@tsconfig/node16": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true }, "node_modules/@types/app-root-path": { "version": "1.2.4", @@ -3012,7 +2730,7 @@ "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "devOptional": true + "dev": true }, "node_modules/@types/long": { "version": "4.0.1", @@ -3041,7 +2759,8 @@ "node_modules/@types/node": { "version": "17.0.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.6.tgz", - "integrity": "sha512-+XBAjfZmmivILUzO0HwBJoYkAyyySSLg5KCGBDFLomJo0sV6szvVLAf4ANZZ0pfWzgEds5KmGLG9D5hfEqOhaA==" + "integrity": "sha512-+XBAjfZmmivILUzO0HwBJoYkAyyySSLg5KCGBDFLomJo0sV6szvVLAf4ANZZ0pfWzgEds5KmGLG9D5hfEqOhaA==", + "dev": true }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -3453,7 +3172,8 @@ "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", @@ -3681,6 +3401,7 @@ "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -3732,6 +3453,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", + "dev": true, "engines": { "node": ">=0.4.0" } @@ -3790,6 +3512,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, "engines": { "node": ">=6" } @@ -3825,6 +3548,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -3833,6 +3557,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3852,6 +3577,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3890,7 +3616,8 @@ "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, "node_modules/argparse": { "version": "1.0.10", @@ -3965,6 +3692,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4005,7 +3733,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-arraybuffer": { "version": "1.0.1", @@ -4049,6 +3778,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, "engines": { "node": ">=8" } @@ -4145,6 +3875,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4154,6 +3885,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -4170,7 +3902,8 @@ "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "node_modules/browserslist": { "version": "4.16.7", @@ -4207,7 +3940,8 @@ "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, "node_modules/builtin-modules": { "version": "3.3.0", @@ -4221,6 +3955,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/byte-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/byte-access/-/byte-access-1.0.1.tgz", + "integrity": "sha512-GKYa+lvxnzhgHWj9X+LCsQ4s2/C5uvib573eAOiQKywXMkzFFErY2+yQdzmdE5iWVpmqecsRx3bOtOY4/1eINw==", + "dependencies": { + "uint8arraylist": "^2.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/byte-access/node_modules/uint8arraylist": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.0.0.tgz", + "integrity": "sha512-OOx2TiInuBOlvDDhS0um83DWVTvgvazvo96xkMVBV3RbDI5HPxdqudzsIKMzh2lklP52diJ/tVhAhlxHS2f0jA==", + "dependencies": { + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/bytes-iec": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/bytes-iec/-/bytes-iec-3.1.1.tgz", @@ -4355,6 +4113,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4379,6 +4138,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, "funding": [ { "type": "individual", @@ -4491,6 +4251,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -4501,6 +4262,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -4509,6 +4271,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4536,6 +4299,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -4546,7 +4310,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/colorette": { "version": "1.2.2", @@ -4615,7 +4380,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "node_modules/configstore": { "version": "5.0.1", @@ -4729,7 +4495,8 @@ "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true }, "node_modules/cross-fetch": { "version": "3.1.5", @@ -5077,9 +4844,9 @@ } }, "node_modules/datastore-core": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-7.0.0.tgz", - "integrity": "sha512-FdudjeH+GHjbuU8X1mIKIv8uHAErF6qtjqWFJiVKOdITk6KdiSKis4Hsfu80RWDEFQ9l9s47XIVf5FMKTtoeWA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-7.0.3.tgz", + "integrity": "sha512-DmPsUux63daOfCszxLkcp6LjdJ0k/BQNhIMtoAi5mbraYQnEQkFtKORmTu6XmDX6ujbtaBkeuJAiCBNI7MZklw==", "dependencies": { "debug": "^4.1.1", "err-code": "^3.0.1", @@ -5290,6 +5057,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, "engines": { "node": ">=0.3.1" } @@ -5396,7 +5164,8 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/encodeurl": { "version": "1.0.2", @@ -5594,6 +5363,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } @@ -5608,6 +5378,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { "node": ">=10" }, @@ -6394,6 +6165,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6476,6 +6248,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, "bin": { "flat": "cli.js" } @@ -6570,12 +6343,14 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -6619,6 +6394,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -6800,6 +6576,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6819,6 +6596,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -6898,6 +6676,7 @@ "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, "engines": { "node": ">=4.x" } @@ -6936,6 +6715,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -7010,6 +6790,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, "bin": { "he": "bin/he" } @@ -7220,6 +7001,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7309,6 +7091,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -7388,6 +7171,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -7408,6 +7192,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -7426,6 +7211,11 @@ "node": ">=8" } }, + "node_modules/is-loopback-addr": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", + "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" + }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -7448,6 +7238,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -7581,6 +7372,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "engines": { "node": ">=10" }, @@ -7834,17 +7626,6 @@ "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" }, - "node_modules/it-handshake/node_modules/p-defer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", - "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/it-length-prefixed": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-7.0.1.tgz", @@ -7882,17 +7663,6 @@ "p-defer": "^4.0.0" } }, - "node_modules/it-pair/node_modules/p-defer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", - "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/it-pb-stream": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/it-pb-stream/-/it-pb-stream-1.0.2.tgz", @@ -8304,23 +8074,39 @@ } }, "node_modules/libp2p": { - "version": "0.37.3", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.37.3.tgz", - "integrity": "sha512-G+0tWT6jZr05XE9bG8Kw1SqFrkt1X3bM9TDDXkqWqHvUVjBHWGNDysOvTp7p3jxoSj4J/Z2w9wGbdDsz1kfPlw==", + "version": "0.37.3-05e8e7e", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.37.3-05e8e7e.tgz", + "integrity": "sha512-0RR5X6Cjkt8odz6MTw/Y5eOgtg8YHLwHZt0uETKiS6MRhebgwl3ytlIuZDjT8WsvKVBqGeDGtXtWSEHvy3SlSw==", "dependencies": { "@achingbrain/nat-port-mapper": "^1.0.3", - "@libp2p/connection": "^2.0.2", - "@libp2p/crypto": "^0.22.11", - "@libp2p/interfaces": "^2.0.2", - "@libp2p/logger": "^1.1.4", - "@libp2p/multistream-select": "^1.0.4", - "@libp2p/peer-collections": "^1.0.2", + "@libp2p/components": "^2.0.1", + "@libp2p/connection": "^4.0.0", + "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-address-manager": "^1.0.1", + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-connection-encrypter": "^1.0.2", + "@libp2p/interface-content-routing": "^1.0.1", + "@libp2p/interface-dht": "^1.0.0", + "@libp2p/interface-metrics": "^2.0.0", + "@libp2p/interface-peer-discovery": "^1.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-peer-info": "^1.0.1", + "@libp2p/interface-peer-routing": "^1.0.0", + "@libp2p/interface-peer-store": "^1.2.0", + "@libp2p/interface-pubsub": "^1.0.3", + "@libp2p/interface-registrar": "^2.0.0", + "@libp2p/interface-stream-muxer": "^2.0.1", + "@libp2p/interface-transport": "^1.0.0", + "@libp2p/interfaces": "^3.0.2", + "@libp2p/logger": "^2.0.0", + "@libp2p/multistream-select": "^2.0.1", + "@libp2p/peer-collections": "^2.0.0", "@libp2p/peer-id": "^1.1.10", "@libp2p/peer-id-factory": "^1.0.9", - "@libp2p/peer-record": "^1.0.8", - "@libp2p/peer-store": "^1.0.10", - "@libp2p/tracked-map": "^1.0.5", - "@libp2p/utils": "^1.0.10", + "@libp2p/peer-record": "^3.0.0", + "@libp2p/peer-store": "^3.0.0", + "@libp2p/tracked-map": "^2.0.1", + "@libp2p/utils": "^3.0.0", "@multiformats/mafmt": "^11.0.2", "@multiformats/multiaddr": "^10.1.8", "abortable-iterator": "^4.0.2", @@ -8335,7 +8121,7 @@ "it-filter": "^1.0.3", "it-first": "^1.0.6", "it-foreach": "^0.1.1", - "it-handshake": "^3.0.1", + "it-handshake": "^4.0.0", "it-length-prefixed": "^7.0.1", "it-map": "^1.0.6", "it-merge": "^1.0.3", @@ -8365,37 +8151,29 @@ "npm": ">=7.0.0" } }, - "node_modules/libp2p/node_modules/@libp2p/crypto": { - "version": "0.22.14", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-0.22.14.tgz", - "integrity": "sha512-5RyGh5ovfqrDD8Io3n5rvVnsTHBf1exIMZ/5eBw7Eoy21xkmzdF1Hy701SoSNmiCuTPXYmxT5WMy2VUDBUG6oQ==", + "node_modules/libp2p/node_modules/@libp2p/peer-collections": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-2.0.0.tgz", + "integrity": "sha512-A074sSs0Kv3g/1gaf3ZvMc05sLmho3c3uJtkep4L3cgHokMW0pF+3YovU5KvdgBCB8GEepXiUvYsdPYzehVl7A==", "dependencies": { - "@libp2p/interfaces": "^2.0.1", - "@noble/ed25519": "^1.6.0", - "@noble/secp256k1": "^1.5.4", - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "multiformats": "^9.4.5", - "node-forge": "^1.1.0", - "protons-runtime": "^1.0.4", - "uint8arrays": "^3.0.0" + "@libp2p/interface-peer-id": "^1.0.4", + "@libp2p/peer-id": "^1.1.0" }, "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, - "node_modules/libp2p/node_modules/@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "node_modules/libp2p/node_modules/it-handshake": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-4.0.1.tgz", + "integrity": "sha512-80dJPkxA77iTy172OnTWg5pjiOQ7KO0+o2FGCyJn3Vb/NJQKQiWL7LJY50uT5n8EYzv8SV5dDNF234PwMsQAXw==", "dependencies": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", + "it-map": "^1.0.6", + "it-pushable": "^3.0.0", + "it-reader": "^6.0.1", "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" + "p-defer": "^4.0.0" }, "engines": { "node": ">=16.0.0", @@ -8403,9 +8181,34 @@ } }, "node_modules/libp2p/node_modules/it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", + "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" + }, + "node_modules/libp2p/node_modules/it-reader": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-6.0.1.tgz", + "integrity": "sha512-C+YRk3OTufbKSJMNEonfEw+9F38llmwwZvqhkjb0xIgob7l4L3p01Yt43+bHRI8SSppAOgk5AKLqas7ea0UTAw==", + "dependencies": { + "it-stream-types": "^1.0.4", + "uint8arraylist": "^2.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/libp2p/node_modules/uint8arraylist": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.0.0.tgz", + "integrity": "sha512-OOx2TiInuBOlvDDhS0um83DWVTvgvazvo96xkMVBV3RbDI5HPxdqudzsIKMzh2lklP52diJ/tVhAhlxHS2f0jA==", + "dependencies": { + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } }, "node_modules/lilconfig": { "version": "2.0.4", @@ -8680,6 +8483,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -8785,6 +8589,31 @@ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", "dev": true }, + "node_modules/longbits": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/longbits/-/longbits-1.1.0.tgz", + "integrity": "sha512-22U2exkkYy7sr7nuQJYx2NEZ2kEMsC69+BxM5h8auLvkVIJa+LwAB5mFIExnuW2dFuYXFOWsFMKXjaWiq/htYQ==", + "dependencies": { + "byte-access": "^1.0.1", + "uint8arraylist": "^2.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/longbits/node_modules/uint8arraylist": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.0.0.tgz", + "integrity": "sha512-OOx2TiInuBOlvDDhS0um83DWVTvgvazvo96xkMVBV3RbDI5HPxdqudzsIKMzh2lklP52diJ/tVhAhlxHS2f0jA==", + "dependencies": { + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -8860,7 +8689,8 @@ "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, "node_modules/map-obj": { "version": "4.3.0", @@ -9082,6 +8912,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9092,7 +8923,8 @@ "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "node_modules/minimist-options": { "version": "4.1.0", @@ -9121,6 +8953,7 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, "dependencies": { "minimist": "^1.2.5" }, @@ -9138,6 +8971,7 @@ "version": "9.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", + "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", @@ -9179,12 +9013,14 @@ "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/mocha/node_modules/debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -9200,12 +9036,14 @@ "node_modules/mocha/node_modules/debug/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -9221,6 +9059,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -9232,6 +9071,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -9245,12 +9085,14 @@ "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/mocha/node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -9265,6 +9107,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { "node": ">=8" } @@ -9273,6 +9116,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -9444,6 +9288,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -9906,6 +9751,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "dependencies": { "wrappy": "1" } @@ -9942,11 +9788,14 @@ } }, "node_modules/p-defer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", - "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-fifo": { @@ -9958,10 +9807,19 @@ "p-defer": "^3.0.0" } }, + "node_modules/p-fifo/node_modules/p-defer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", + "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==", + "engines": { + "node": ">=8" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -10044,9 +9902,9 @@ } }, "node_modules/p-reflect": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-3.0.0.tgz", - "integrity": "sha512-rOgYyrvUxnJdSYKGSK7UnO7RxFSnT/IJYFPiosuQ2/AtRWIryIrv8lecWqJXWbKnMcUjJvxiHDMp80m0Yj4eLA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-3.1.0.tgz", + "integrity": "sha512-3sG3UlpisPSaX+o7u2q01hIQmrpkvdl5GSO1ZwL7pfc5kHB2bPF0eFNCfYTrW1/LTUdgmPwBAvmT0Zr8eSmaAQ==", "engines": { "node": ">=12" }, @@ -10070,12 +9928,12 @@ } }, "node_modules/p-settle": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-5.0.0.tgz", - "integrity": "sha512-P+cL1wECSDqI49JAiHlgG0HlqqL0CBsMP3f8vrVx6Yy8pMngmJqn8UjzAHr5CPkcDIzeBxugDLDMWTK8fqrFGw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-5.1.0.tgz", + "integrity": "sha512-ujR6UFfh09ziOKyC5aaJak5ZclsjlLw57SYtFZg6yllMofyygnaibQRZ4jf6QPWqoOCGUXyb1cxUKELeAyKO7g==", "dependencies": { "p-limit": "^4.0.0", - "p-reflect": "^3.0.0" + "p-reflect": "^3.1.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -10200,6 +10058,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -10252,6 +10111,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -10742,6 +10602,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -10998,6 +10859,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -11090,6 +10952,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -11271,7 +11134,8 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -11341,6 +11205,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, "dependencies": { "randombytes": "^2.1.0" } @@ -11550,6 +11415,7 @@ "version": "0.5.20", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -11559,6 +11425,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -11804,6 +11671,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11847,6 +11715,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { "node": ">=8" }, @@ -11879,6 +11748,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -12155,6 +12025,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -12219,7 +12090,7 @@ "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "dependencies": { "utf8-byte-length": "^1.0.1" } @@ -12243,63 +12114,6 @@ "webpack": "^5.0.0" } }, - "node_modules/ts-mocha": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-9.0.2.tgz", - "integrity": "sha512-WyQjvnzwrrubl0JT7EC1yWmNpcsU3fOuBFfdps30zbmFBgKniSaSOyZMZx+Wq7kytUs5CY+pEbSYEbGfIKnXTw==", - "dependencies": { - "ts-node": "7.0.1" - }, - "bin": { - "ts-mocha": "bin/ts-mocha" - }, - "engines": { - "node": ">= 6.X.X" - }, - "optionalDependencies": { - "tsconfig-paths": "^3.5.0" - }, - "peerDependencies": { - "mocha": "^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X" - } - }, - "node_modules/ts-mocha/node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/ts-mocha/node_modules/ts-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", - "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", - "dependencies": { - "arrify": "^1.0.0", - "buffer-from": "^1.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", - "yn": "^2.0.0" - }, - "bin": { - "ts-node": "dist/bin.js" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ts-mocha/node_modules/yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==", - "engines": { - "node": ">=4" - } - }, "node_modules/ts-node": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", @@ -12354,7 +12168,7 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "devOptional": true, + "dev": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.1", @@ -12366,7 +12180,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "devOptional": true, + "dev": true, "dependencies": { "minimist": "^1.2.0" }, @@ -12378,7 +12192,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "devOptional": true, + "dev": true, "engines": { "node": ">=4" } @@ -12500,6 +12314,7 @@ "version": "4.5.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12527,6 +12342,32 @@ "node": "*" } }, + "node_modules/uint8-varint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-1.0.2.tgz", + "integrity": "sha512-IubsiyUyX2snBV+XmTa+Q9hjGejhDznwIzXMyl3ZjVWog3h/mDijB8s/s/9ujQpJ2Yskj51hWAvbeS7B7Em61g==", + "dependencies": { + "byte-access": "^1.0.0", + "longbits": "^1.1.0", + "uint8arraylist": "^2.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/uint8-varint/node_modules/uint8arraylist": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.0.0.tgz", + "integrity": "sha512-OOx2TiInuBOlvDDhS0um83DWVTvgvazvo96xkMVBV3RbDI5HPxdqudzsIKMzh2lklP52diJ/tVhAhlxHS2f0jA==", + "dependencies": { + "uint8arrays": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/uint8arraylist": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-1.5.1.tgz", @@ -12647,7 +12488,7 @@ "node_modules/utf8-byte-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=" + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" }, "node_modules/utf8-bytes": { "version": "0.0.1", @@ -12697,11 +12538,6 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -13029,12 +12865,14 @@ "node_modules/workerpool": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -13051,6 +12889,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -13059,6 +12898,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13071,7 +12911,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -13130,14 +12971,15 @@ "dev": true }, "node_modules/xsalsa20": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.1.0.tgz", - "integrity": "sha512-zd3ytX2cm+tcSndRU+krm0eL4TMMpZE7evs5hLRAoOy6gviqLfe3qOlkjF3i5SeAkQUCeJk0lJZrEU56kHRfWw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.2.0.tgz", + "integrity": "sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w==" }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "engines": { "node": ">=10" } @@ -13161,6 +13003,7 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -13178,6 +13021,7 @@ "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, "engines": { "node": ">=10" } @@ -13186,6 +13030,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -13200,6 +13045,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, "engines": { "node": ">=10" }, @@ -13211,6 +13057,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -13222,6 +13069,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -13230,6 +13078,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13253,6 +13102,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, "engines": { "node": ">=6" } @@ -13261,6 +13111,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "engines": { "node": ">=10" }, @@ -13301,22 +13152,6 @@ "xml2js": "^0.4.23" }, "dependencies": { - "@libp2p/logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", - "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", - "requires": { - "@libp2p/interface-peer-id": "^1.0.2", - "debug": "^4.3.3", - "interface-datastore": "^6.1.0", - "multiformats": "^9.6.3" - } - }, - "p-defer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", - "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==" - }, "p-timeout": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", @@ -13717,17 +13552,6 @@ "uint8arrays": "^3.0.0" }, "dependencies": { - "@libp2p/logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", - "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", - "requires": { - "@libp2p/interface-peer-id": "^1.0.2", - "debug": "^4.3.3", - "interface-datastore": "^6.1.0", - "multiformats": "^9.6.3" - } - }, "@libp2p/peer-record": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-2.0.2.tgz", @@ -13783,11 +13607,6 @@ } } }, - "is-loopback-addr": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", - "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" - }, "it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", @@ -13818,19 +13637,6 @@ "protons-runtime": "^1.0.3", "uint8arraylist": "^1.4.0", "uint8arrays": "^3.0.0" - }, - "dependencies": { - "@libp2p/logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", - "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", - "requires": { - "@libp2p/interface-peer-id": "^1.0.2", - "debug": "^4.3.3", - "interface-datastore": "^6.1.0", - "multiformats": "^9.6.3" - } - } } }, "@cspell/cspell-bundled-dicts": { @@ -14273,25 +14079,6 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "@leichtgewicht/base64-codec": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@leichtgewicht/base64-codec/-/base64-codec-1.0.0.tgz", @@ -14346,34 +14133,16 @@ } }, "@libp2p/connection": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/connection/-/connection-2.0.4.tgz", - "integrity": "sha512-YGMa0ZTbKdyu4b58mLdVT3XKgfBGp/R5h2FTT/8sB3fHTkJ6Crl3Ad5a+cVuqsWfJhrHDncU3SJaqFH4fxhLmg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/connection/-/connection-4.0.0.tgz", + "integrity": "sha512-fBiyKzuFQ4jeKK0fQ2tCHjpRgGO/wPM0W4dHCLnb+LB94Jv9mIlMmKbaDnju8+K1Pd67/Y1/L3OQElHtwYJOsA==", "requires": { - "@libp2p/interfaces": "^2.0.0", - "@libp2p/logger": "^1.1.0", + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interfaces": "^3.0.2", + "@libp2p/logger": "^2.0.0", "@multiformats/multiaddr": "^10.1.5", "err-code": "^3.0.1" - }, - "dependencies": { - "@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", - "requires": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", - "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" - } - }, - "it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - } } }, "@libp2p/crypto": { @@ -14577,34 +14346,14 @@ "integrity": "sha512-8IIxw7TKpaYTtVfZN3jePLlm/E/VzqPpqerN+jhA+1s86akRSeyxVBYi3W9SWDSf0oIauHJSDE8KNxLceAfeag==" }, "@libp2p/logger": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-1.1.6.tgz", - "integrity": "sha512-ZKoRUt7cyHlbxHYDZ1Fn3A+ByqGABdmd4z07+1TfVvpEQSpn2IVcV0mt6ff5kUUtGuVeSrqK1/ZDzWqhgg56vg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", + "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", "requires": { - "@libp2p/interfaces": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.2", "debug": "^4.3.3", "interface-datastore": "^6.1.0", "multiformats": "^9.6.3" - }, - "dependencies": { - "@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", - "requires": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", - "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" - } - }, - "it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - } } }, "@libp2p/mplex": { @@ -14628,25 +14377,6 @@ "varint": "^6.0.0" }, "dependencies": { - "@libp2p/logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", - "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", - "requires": { - "@libp2p/interface-peer-id": "^1.0.2", - "debug": "^4.3.3", - "interface-datastore": "^6.1.0", - "multiformats": "^9.6.3" - } - }, - "@libp2p/tracked-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@libp2p/tracked-map/-/tracked-map-2.0.1.tgz", - "integrity": "sha512-T0/m67VAZuEw+AO9U+rlLFkHUqB1w0Dy9Pqw2+f0XL6uplv2xXKSJeU0yUAjiOGsfrJ4pUPPQbgsz2Xr3WNoIQ==", - "requires": { - "@libp2p/interface-metrics": "^2.0.0" - } - }, "it-pushable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", @@ -14655,48 +14385,71 @@ } }, "@libp2p/multistream-select": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-1.0.6.tgz", - "integrity": "sha512-8veeiZDrh7aCvILjNGps4ZLKSKTdBxJZS4SZkuhbCKmq7eX6aJoYoQ5G5MBxEFiBKtgwTKHaSroH3jfvizwDoA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-2.0.2.tgz", + "integrity": "sha512-xW8BVHXw4JDSLFC+/3PxctwkPxPHfEYdq1hiB7F7adVp65ERg+65TEd0RD/knNOj+aMQkrQl0DUsldSTRNTWkw==", "requires": { - "@libp2p/interfaces": "^2.0.0", - "@libp2p/logger": "^1.1.0", + "@libp2p/interfaces": "^3.0.2", + "@libp2p/logger": "^2.0.0", "abortable-iterator": "^4.0.2", "err-code": "^3.0.1", "it-first": "^1.0.6", - "it-handshake": "^3.0.1", - "it-length-prefixed": "^7.0.1", + "it-handshake": "^4.0.1", + "it-length-prefixed": "^8.0.2", "it-pipe": "^2.0.3", - "it-pushable": "^2.0.1", - "it-reader": "^5.0.0", + "it-pushable": "^3.0.0", + "it-reader": "^6.0.1", "it-stream-types": "^1.0.4", "p-defer": "^4.0.0", - "uint8arraylist": "^1.5.1", + "uint8arraylist": "^2.0.0", "uint8arrays": "^3.0.0" }, "dependencies": { - "@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "it-handshake": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-4.0.1.tgz", + "integrity": "sha512-80dJPkxA77iTy172OnTWg5pjiOQ7KO0+o2FGCyJn3Vb/NJQKQiWL7LJY50uT5n8EYzv8SV5dDNF234PwMsQAXw==", "requires": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", + "it-map": "^1.0.6", + "it-pushable": "^3.0.0", + "it-reader": "^6.0.1", "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" + "p-defer": "^4.0.0" + } + }, + "it-length-prefixed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-8.0.2.tgz", + "integrity": "sha512-qYCGZ6lTaI6lcuTXUrJmVpE6clq63ULrkq1FGTxHrzexjB2cCrS/CZ5HCRDZ5IRPw33tSDUDK91S7X5S64dPyQ==", + "requires": { + "err-code": "^3.0.1", + "it-stream-types": "^1.0.4", + "uint8-varint": "^1.0.1", + "uint8arraylist": "^2.0.0", + "uint8arrays": "^3.0.0" } }, "it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", + "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" }, - "p-defer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", - "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==" + "it-reader": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-6.0.1.tgz", + "integrity": "sha512-C+YRk3OTufbKSJMNEonfEw+9F38llmwwZvqhkjb0xIgob7l4L3p01Yt43+bHRI8SSppAOgk5AKLqas7ea0UTAw==", + "requires": { + "it-stream-types": "^1.0.4", + "uint8arraylist": "^2.0.0" + } + }, + "uint8arraylist": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.0.0.tgz", + "integrity": "sha512-OOx2TiInuBOlvDDhS0um83DWVTvgvazvo96xkMVBV3RbDI5HPxdqudzsIKMzh2lklP52diJ/tVhAhlxHS2f0jA==", + "requires": { + "uint8arrays": "^3.0.0" + } } } }, @@ -14755,15 +14508,16 @@ } }, "@libp2p/peer-record": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-1.0.12.tgz", - "integrity": "sha512-1b4aeU4sduRBUH4RKDtYBHKOEXwohrlOoBrrNPKb1WFweLMnG3oznhGusMvKQ8YuXSOTpbNPHrbJ/iJnrBbVUQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-3.0.0.tgz", + "integrity": "sha512-JN7Q78G1lg9fRiaghbzN0ZlerkOE646XaMrtUtAmMWsumrs75tTuZHgcYLsoAxiL6WmzJ4I9uCoY+jUl3O7l/Q==", "requires": { - "@libp2p/crypto": "^0.22.8", - "@libp2p/interfaces": "^2.0.0", - "@libp2p/logger": "^1.1.0", - "@libp2p/peer-id": "^1.1.0", - "@libp2p/utils": "^1.0.9", + "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-record": "^1.0.1", + "@libp2p/logger": "^2.0.0", + "@libp2p/peer-id": "^1.1.13", + "@libp2p/utils": "^3.0.0", "@multiformats/multiaddr": "^10.1.5", "err-code": "^3.0.1", "interface-datastore": "^6.1.0", @@ -14776,54 +14530,23 @@ "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", "varint": "^6.0.0" - }, - "dependencies": { - "@libp2p/crypto": { - "version": "0.22.14", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-0.22.14.tgz", - "integrity": "sha512-5RyGh5ovfqrDD8Io3n5rvVnsTHBf1exIMZ/5eBw7Eoy21xkmzdF1Hy701SoSNmiCuTPXYmxT5WMy2VUDBUG6oQ==", - "requires": { - "@libp2p/interfaces": "^2.0.1", - "@noble/ed25519": "^1.6.0", - "@noble/secp256k1": "^1.5.4", - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "multiformats": "^9.4.5", - "node-forge": "^1.1.0", - "protons-runtime": "^1.0.4", - "uint8arrays": "^3.0.0" - } - }, - "@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", - "requires": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", - "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" - } - }, - "it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - } } }, "@libp2p/peer-store": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-1.0.17.tgz", - "integrity": "sha512-1uvwjJ2dRQyQnms+vBY3CgWpZe+0EYSoCNo7UUE6dhJHIA3q1Syl4kZWukA081m1eFzmMLG2VjsrzUQAfmy+Sw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-3.1.0.tgz", + "integrity": "sha512-GYOK/kTjrDxVW2CIQII60zGgLx4EDG1CLXHOOcsdob8MCw/A23UwKEdIxsw2YAJvQBExDWPZjZvbG1ewPHtrFQ==", "requires": { - "@libp2p/interfaces": "^2.0.0", - "@libp2p/logger": "^1.1.0", + "@libp2p/components": "^2.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-peer-info": "^1.0.1", + "@libp2p/interface-peer-store": "^1.1.0", + "@libp2p/interface-record": "^1.0.1", + "@libp2p/interfaces": "^3.0.2", + "@libp2p/logger": "^2.0.0", "@libp2p/peer-id": "^1.1.0", - "@libp2p/peer-record": "^1.0.0", - "@multiformats/multiaddr": "^10.1.5", + "@libp2p/peer-record": "^2.0.0", + "@multiformats/multiaddr": "^10.2.0", "err-code": "^3.0.1", "interface-datastore": "^6.1.0", "it-all": "^1.0.6", @@ -14837,23 +14560,58 @@ "uint8arrays": "^3.0.0" }, "dependencies": { - "@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "@libp2p/interface-connection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-1.0.1.tgz", + "integrity": "sha512-4MP+RvqR5xu6EWgrebLo34HWm/X+hGXtzsCKmNfmLN9bpaYhEobzL4Rm3RYi/0ICrgAZmoU8n+x8widiuwERew==", "requires": { + "@libp2p/interface-peer-id": "^1.0.0", + "@libp2p/interfaces": "^3.0.0", + "@multiformats/multiaddr": "^10.2.0", + "it-stream-types": "^1.0.4" + } + }, + "@libp2p/peer-record": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-2.0.2.tgz", + "integrity": "sha512-JkH9fBpBpGQYqDMJP3+LNtXLyjNCf0fVcBkdjyfPTSwUXTPJ5NxsluJAH+MZkkrJG9YJG22NgrZO5784GSLAaA==", + "requires": { + "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-record": "^1.0.1", + "@libp2p/logger": "^2.0.0", + "@libp2p/peer-id": "^1.1.13", + "@libp2p/utils": "^2.0.0", "@multiformats/multiaddr": "^10.1.5", "err-code": "^3.0.1", "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", - "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" + "it-all": "^1.0.6", + "it-filter": "^1.0.3", + "it-foreach": "^0.1.1", + "it-map": "^1.0.6", + "it-pipe": "^2.0.3", + "multiformats": "^9.6.3", + "protons-runtime": "^1.0.4", + "uint8arrays": "^3.0.0", + "varint": "^6.0.0" } }, - "it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + "@libp2p/utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-2.0.1.tgz", + "integrity": "sha512-R0r9fkskuTmm5jMrlRXWpTdYJeDYcNQ1KdfSEmoVlCs5AlTeWn31+cdaHQihSEbkpEKtVCExfsZkwa3f7C1l8A==", + "requires": { + "@achingbrain/ip-address": "^8.1.0", + "@libp2p/interface-connection": "^1.0.1", + "@libp2p/interface-peer-store": "^1.0.0", + "@libp2p/logger": "^2.0.0", + "@multiformats/multiaddr": "^10.1.1", + "abortable-iterator": "^4.0.2", + "err-code": "^3.0.1", + "is-loopback-addr": "^2.0.1", + "it-stream-types": "^1.0.4", + "private-ip": "^2.1.1" + } } } }, @@ -14885,17 +14643,6 @@ "uint8arrays": "^3.0.0" }, "dependencies": { - "@libp2p/logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", - "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", - "requires": { - "@libp2p/interface-peer-id": "^1.0.2", - "debug": "^4.3.3", - "interface-datastore": "^6.1.0", - "multiformats": "^9.6.3" - } - }, "@libp2p/peer-collections": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-2.0.0.tgz", @@ -14923,104 +14670,31 @@ "@multiformats/multiaddr": "^10.2.0", "err-code": "^3.0.1", "it-all": "^1.0.6" - }, - "dependencies": { - "@libp2p/logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", - "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", - "requires": { - "@libp2p/interface-peer-id": "^1.0.2", - "debug": "^4.3.3", - "interface-datastore": "^6.1.0", - "multiformats": "^9.6.3" - } - } } }, "@libp2p/tracked-map": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@libp2p/tracked-map/-/tracked-map-1.0.8.tgz", - "integrity": "sha512-tN56iEdSbDuUhDApQV0k93aIQu/vACN8fNHsaWZrFpvwPaXmLb//jn3m34pwnSyaTPjUSendP25+JDzg/2U/mw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/tracked-map/-/tracked-map-2.0.1.tgz", + "integrity": "sha512-T0/m67VAZuEw+AO9U+rlLFkHUqB1w0Dy9Pqw2+f0XL6uplv2xXKSJeU0yUAjiOGsfrJ4pUPPQbgsz2Xr3WNoIQ==", "requires": { - "@libp2p/interfaces": "^2.0.0" - }, - "dependencies": { - "@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", - "requires": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", - "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" - } - }, - "it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - } + "@libp2p/interface-metrics": "^2.0.0" } }, "@libp2p/utils": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-1.0.10.tgz", - "integrity": "sha512-jlVLfac1IoBlgXL8V+XZYxNw0SOAkKweiLhXWolUbKOgRtMDquJzbwG1n8y9GtdiFKPlkiBwOB7l9xighcOR6w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-3.0.0.tgz", + "integrity": "sha512-ik2IjnoO+73/5b3gSfXyMS3+eQAhNpzhzvvqQNOI8gcU6jcLvliStldwt1LKiMe9M3ZUOy6LHeB/3vF1dO9CSA==", "requires": { "@achingbrain/ip-address": "^8.1.0", - "@libp2p/logger": "^1.0.1", + "@libp2p/interface-connection": "^2.1.0", + "@libp2p/interface-peer-store": "^1.0.0", + "@libp2p/logger": "^2.0.0", "@multiformats/multiaddr": "^10.1.1", "abortable-iterator": "^4.0.2", "err-code": "^3.0.1", "is-loopback-addr": "^2.0.1", "it-stream-types": "^1.0.4", - "private-ip": "^2.1.1", - "ts-mocha": "^9.0.2", - "ts-node": "^10.7.0" - }, - "dependencies": { - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - }, - "is-loopback-addr": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", - "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - } - } + "private-ip": "^2.1.1" } }, "@libp2p/websockets": { @@ -15044,39 +14718,6 @@ "wherearewe": "^1.0.0" }, "dependencies": { - "@libp2p/logger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.0.tgz", - "integrity": "sha512-aC1Yz4bni8Cui1tKCL5PzQSlS3BE/hhvyVnEHhcUz+GCo+MpbmyrZSPAb/m1e7bHrDDKkT1f9DSr7vgmS/NkuQ==", - "requires": { - "@libp2p/interface-peer-id": "^1.0.2", - "debug": "^4.3.3", - "interface-datastore": "^6.1.0", - "multiformats": "^9.6.3" - } - }, - "@libp2p/utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-3.0.0.tgz", - "integrity": "sha512-ik2IjnoO+73/5b3gSfXyMS3+eQAhNpzhzvvqQNOI8gcU6jcLvliStldwt1LKiMe9M3ZUOy6LHeB/3vF1dO9CSA==", - "requires": { - "@achingbrain/ip-address": "^8.1.0", - "@libp2p/interface-connection": "^2.1.0", - "@libp2p/interface-peer-store": "^1.0.0", - "@libp2p/logger": "^2.0.0", - "@multiformats/multiaddr": "^10.1.1", - "abortable-iterator": "^4.0.2", - "err-code": "^3.0.1", - "is-loopback-addr": "^2.0.1", - "it-stream-types": "^1.0.4", - "private-ip": "^2.1.1" - } - }, - "is-loopback-addr": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", - "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" - }, "it-ws": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/it-ws/-/it-ws-5.0.2.tgz", @@ -15089,11 +14730,6 @@ "ws": "^8.4.0" } }, - "p-defer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", - "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==" - }, "p-timeout": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", @@ -15536,22 +15172,26 @@ "@tsconfig/node10": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true }, "@tsconfig/node12": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==" + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true }, "@tsconfig/node14": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true }, "@tsconfig/node16": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true }, "@types/app-root-path": { "version": "1.2.4", @@ -15628,7 +15268,7 @@ "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "devOptional": true + "dev": true }, "@types/long": { "version": "4.0.1", @@ -15657,7 +15297,8 @@ "@types/node": { "version": "17.0.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.6.tgz", - "integrity": "sha512-+XBAjfZmmivILUzO0HwBJoYkAyyySSLg5KCGBDFLomJo0sV6szvVLAf4ANZZ0pfWzgEds5KmGLG9D5hfEqOhaA==" + "integrity": "sha512-+XBAjfZmmivILUzO0HwBJoYkAyyySSLg5KCGBDFLomJo0sV6szvVLAf4ANZZ0pfWzgEds5KmGLG9D5hfEqOhaA==", + "dev": true }, "@types/normalize-package-data": { "version": "2.4.1", @@ -15920,7 +15561,8 @@ "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true }, "@webassemblyjs/ast": { "version": "1.11.1", @@ -16131,7 +15773,8 @@ "acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true }, "acorn-globals": { "version": "6.0.0", @@ -16167,7 +15810,8 @@ "acorn-walk": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", - "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==" + "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", + "dev": true }, "agent-base": { "version": "6.0.2", @@ -16210,7 +15854,8 @@ "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true }, "ansi-escapes": { "version": "4.3.2", @@ -16232,12 +15877,14 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -16251,6 +15898,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -16280,7 +15928,8 @@ "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, "argparse": { "version": "1.0.10", @@ -16336,7 +15985,8 @@ "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true }, "assertion-error": { "version": "1.1.0", @@ -16368,7 +16018,8 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "base64-arraybuffer": { "version": "1.0.1", @@ -16391,7 +16042,8 @@ "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true }, "body-parser": { "version": "1.19.0", @@ -16472,6 +16124,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -16481,6 +16134,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -16494,7 +16148,8 @@ "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "browserslist": { "version": "4.16.7", @@ -16518,7 +16173,8 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, "builtin-modules": { "version": "3.3.0", @@ -16526,6 +16182,24 @@ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, + "byte-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/byte-access/-/byte-access-1.0.1.tgz", + "integrity": "sha512-GKYa+lvxnzhgHWj9X+LCsQ4s2/C5uvib573eAOiQKywXMkzFFErY2+yQdzmdE5iWVpmqecsRx3bOtOY4/1eINw==", + "requires": { + "uint8arraylist": "^2.0.0" + }, + "dependencies": { + "uint8arraylist": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.0.0.tgz", + "integrity": "sha512-OOx2TiInuBOlvDDhS0um83DWVTvgvazvo96xkMVBV3RbDI5HPxdqudzsIKMzh2lklP52diJ/tVhAhlxHS2f0jA==", + "requires": { + "uint8arrays": "^3.0.0" + } + } + } + }, "bytes-iec": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/bytes-iec/-/bytes-iec-3.1.1.tgz", @@ -16622,6 +16296,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16637,6 +16312,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -16716,6 +16392,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -16725,12 +16402,14 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -16754,6 +16433,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -16761,7 +16441,8 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "colorette": { "version": "1.2.2", @@ -16818,7 +16499,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "configstore": { "version": "5.0.1", @@ -16916,7 +16598,8 @@ "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true }, "cross-fetch": { "version": "3.1.5", @@ -17181,9 +16864,9 @@ } }, "datastore-core": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-7.0.0.tgz", - "integrity": "sha512-FdudjeH+GHjbuU8X1mIKIv8uHAErF6qtjqWFJiVKOdITk6KdiSKis4Hsfu80RWDEFQ9l9s47XIVf5FMKTtoeWA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-7.0.3.tgz", + "integrity": "sha512-DmPsUux63daOfCszxLkcp6LjdJ0k/BQNhIMtoAi5mbraYQnEQkFtKORmTu6XmDX6ujbtaBkeuJAiCBNI7MZklw==", "requires": { "debug": "^4.1.1", "err-code": "^3.0.1", @@ -17345,7 +17028,8 @@ "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true }, "dir-glob": { "version": "3.0.1", @@ -17434,7 +17118,8 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "encodeurl": { "version": "1.0.2", @@ -17586,7 +17271,8 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, "escape-html": { "version": "1.0.3", @@ -17597,7 +17283,8 @@ "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, "escodegen": { "version": "2.0.0", @@ -18188,6 +17875,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -18253,7 +17941,8 @@ "flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true }, "flat-cache": { "version": "3.0.4", @@ -18307,12 +17996,14 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "optional": true }, "function-bind": { @@ -18342,7 +18033,8 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "get-func-name": { "version": "2.0.0", @@ -18474,6 +18166,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -18487,6 +18180,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -18546,7 +18240,8 @@ "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true }, "hard-rejection": { "version": "2.1.0", @@ -18572,7 +18267,8 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "has-own-prop": { "version": "2.0.0", @@ -18621,7 +18317,8 @@ "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true }, "hi-base32": { "version": "0.5.1", @@ -18763,6 +18460,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -18837,6 +18535,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -18888,7 +18587,8 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-fullwidth-code-point": { "version": "4.0.0", @@ -18900,6 +18600,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -18912,6 +18613,11 @@ "ip-regex": "^4.0.0" } }, + "is-loopback-addr": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.1.tgz", + "integrity": "sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==" + }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -18927,7 +18633,8 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-number-object": { "version": "1.0.5", @@ -19018,7 +18725,8 @@ "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true }, "is-weakref": { "version": "1.0.2", @@ -19215,11 +18923,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" - }, - "p-defer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", - "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==" } } }, @@ -19254,13 +18957,6 @@ "requires": { "it-stream-types": "^1.0.3", "p-defer": "^4.0.0" - }, - "dependencies": { - "p-defer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", - "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==" - } } }, "it-pb-stream": { @@ -19600,23 +19296,39 @@ } }, "libp2p": { - "version": "0.37.3", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.37.3.tgz", - "integrity": "sha512-G+0tWT6jZr05XE9bG8Kw1SqFrkt1X3bM9TDDXkqWqHvUVjBHWGNDysOvTp7p3jxoSj4J/Z2w9wGbdDsz1kfPlw==", + "version": "0.37.3-05e8e7e", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.37.3-05e8e7e.tgz", + "integrity": "sha512-0RR5X6Cjkt8odz6MTw/Y5eOgtg8YHLwHZt0uETKiS6MRhebgwl3ytlIuZDjT8WsvKVBqGeDGtXtWSEHvy3SlSw==", "requires": { "@achingbrain/nat-port-mapper": "^1.0.3", - "@libp2p/connection": "^2.0.2", - "@libp2p/crypto": "^0.22.11", - "@libp2p/interfaces": "^2.0.2", - "@libp2p/logger": "^1.1.4", - "@libp2p/multistream-select": "^1.0.4", - "@libp2p/peer-collections": "^1.0.2", + "@libp2p/components": "^2.0.1", + "@libp2p/connection": "^4.0.0", + "@libp2p/crypto": "^1.0.0", + "@libp2p/interface-address-manager": "^1.0.1", + "@libp2p/interface-connection": "^2.0.0", + "@libp2p/interface-connection-encrypter": "^1.0.2", + "@libp2p/interface-content-routing": "^1.0.1", + "@libp2p/interface-dht": "^1.0.0", + "@libp2p/interface-metrics": "^2.0.0", + "@libp2p/interface-peer-discovery": "^1.0.0", + "@libp2p/interface-peer-id": "^1.0.2", + "@libp2p/interface-peer-info": "^1.0.1", + "@libp2p/interface-peer-routing": "^1.0.0", + "@libp2p/interface-peer-store": "^1.2.0", + "@libp2p/interface-pubsub": "^1.0.3", + "@libp2p/interface-registrar": "^2.0.0", + "@libp2p/interface-stream-muxer": "^2.0.1", + "@libp2p/interface-transport": "^1.0.0", + "@libp2p/interfaces": "^3.0.2", + "@libp2p/logger": "^2.0.0", + "@libp2p/multistream-select": "^2.0.1", + "@libp2p/peer-collections": "^2.0.0", "@libp2p/peer-id": "^1.1.10", "@libp2p/peer-id-factory": "^1.0.9", - "@libp2p/peer-record": "^1.0.8", - "@libp2p/peer-store": "^1.0.10", - "@libp2p/tracked-map": "^1.0.5", - "@libp2p/utils": "^1.0.10", + "@libp2p/peer-record": "^3.0.0", + "@libp2p/peer-store": "^3.0.0", + "@libp2p/tracked-map": "^2.0.1", + "@libp2p/utils": "^3.0.0", "@multiformats/mafmt": "^11.0.2", "@multiformats/multiaddr": "^10.1.8", "abortable-iterator": "^4.0.2", @@ -19631,7 +19343,7 @@ "it-filter": "^1.0.3", "it-first": "^1.0.6", "it-foreach": "^0.1.1", - "it-handshake": "^3.0.1", + "it-handshake": "^4.0.0", "it-length-prefixed": "^7.0.1", "it-map": "^1.0.6", "it-merge": "^1.0.3", @@ -19657,39 +19369,48 @@ "xsalsa20": "^1.1.0" }, "dependencies": { - "@libp2p/crypto": { - "version": "0.22.14", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-0.22.14.tgz", - "integrity": "sha512-5RyGh5ovfqrDD8Io3n5rvVnsTHBf1exIMZ/5eBw7Eoy21xkmzdF1Hy701SoSNmiCuTPXYmxT5WMy2VUDBUG6oQ==", + "@libp2p/peer-collections": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-2.0.0.tgz", + "integrity": "sha512-A074sSs0Kv3g/1gaf3ZvMc05sLmho3c3uJtkep4L3cgHokMW0pF+3YovU5KvdgBCB8GEepXiUvYsdPYzehVl7A==", "requires": { - "@libp2p/interfaces": "^2.0.1", - "@noble/ed25519": "^1.6.0", - "@noble/secp256k1": "^1.5.4", - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "multiformats": "^9.4.5", - "node-forge": "^1.1.0", - "protons-runtime": "^1.0.4", - "uint8arrays": "^3.0.0" + "@libp2p/interface-peer-id": "^1.0.4", + "@libp2p/peer-id": "^1.1.0" } }, - "@libp2p/interfaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-2.0.4.tgz", - "integrity": "sha512-MfwkTFyHJtvwNxkjOjzkXyIVvKFtEW2Q3IGRJPyPQMrtB6ll0rGMTlyJ3BQS1bcD0YkNhggFm+8XiU2/0LCBhQ==", + "it-handshake": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-4.0.1.tgz", + "integrity": "sha512-80dJPkxA77iTy172OnTWg5pjiOQ7KO0+o2FGCyJn3Vb/NJQKQiWL7LJY50uT5n8EYzv8SV5dDNF234PwMsQAXw==", "requires": { - "@multiformats/multiaddr": "^10.1.5", - "err-code": "^3.0.1", - "interface-datastore": "^6.1.0", - "it-pushable": "^2.0.1", + "it-map": "^1.0.6", + "it-pushable": "^3.0.0", + "it-reader": "^6.0.1", "it-stream-types": "^1.0.4", - "multiformats": "^9.6.3" + "p-defer": "^4.0.0" } }, "it-pushable": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-2.0.2.tgz", - "integrity": "sha512-f/n6HqXGDbHvuMR/3UN+S6W4y/bS1Pxg6Lb0oVc5dbflxy5f3NKkizKs86B8vzqHnB9hm1YpE0pgcEvI3FKDQw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.0.0.tgz", + "integrity": "sha512-Lpo9Q6wghDDoX8RyA2vIkpNckd5E0EY7RzIKwgiTPakrTmwDw7tKMx6DDJ1ZXrunYnHdKHnKSHYJL3Csya5U2w==" + }, + "it-reader": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-6.0.1.tgz", + "integrity": "sha512-C+YRk3OTufbKSJMNEonfEw+9F38llmwwZvqhkjb0xIgob7l4L3p01Yt43+bHRI8SSppAOgk5AKLqas7ea0UTAw==", + "requires": { + "it-stream-types": "^1.0.4", + "uint8arraylist": "^2.0.0" + } + }, + "uint8arraylist": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.0.0.tgz", + "integrity": "sha512-OOx2TiInuBOlvDDhS0um83DWVTvgvazvo96xkMVBV3RbDI5HPxdqudzsIKMzh2lklP52diJ/tVhAhlxHS2f0jA==", + "requires": { + "uint8arrays": "^3.0.0" + } } } }, @@ -19898,6 +19619,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -19975,6 +19697,25 @@ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", "dev": true }, + "longbits": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/longbits/-/longbits-1.1.0.tgz", + "integrity": "sha512-22U2exkkYy7sr7nuQJYx2NEZ2kEMsC69+BxM5h8auLvkVIJa+LwAB5mFIExnuW2dFuYXFOWsFMKXjaWiq/htYQ==", + "requires": { + "byte-access": "^1.0.1", + "uint8arraylist": "^2.0.0" + }, + "dependencies": { + "uint8arraylist": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.0.0.tgz", + "integrity": "sha512-OOx2TiInuBOlvDDhS0um83DWVTvgvazvo96xkMVBV3RbDI5HPxdqudzsIKMzh2lklP52diJ/tVhAhlxHS2f0jA==", + "requires": { + "uint8arrays": "^3.0.0" + } + } + } + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -20037,7 +19778,8 @@ "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, "map-obj": { "version": "4.3.0", @@ -20189,6 +19931,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -20196,7 +19939,8 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "minimist-options": { "version": "4.1.0", @@ -20221,6 +19965,7 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, "requires": { "minimist": "^1.2.5" } @@ -20235,6 +19980,7 @@ "version": "9.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", + "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", @@ -20265,12 +20011,14 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, "requires": { "ms": "2.1.2" }, @@ -20278,7 +20026,8 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, @@ -20286,6 +20035,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -20295,6 +20045,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "requires": { "argparse": "^2.0.1" } @@ -20303,6 +20054,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "requires": { "p-locate": "^5.0.0" } @@ -20310,12 +20062,14 @@ "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "requires": { "p-limit": "^3.0.2" } @@ -20323,12 +20077,14 @@ "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -20460,7 +20216,8 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "npm-run-all": { "version": "4.1.5", @@ -20813,6 +20570,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -20840,9 +20598,9 @@ } }, "p-defer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", - "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==" }, "p-fifo": { "version": "1.0.0", @@ -20851,12 +20609,20 @@ "requires": { "fast-fifo": "^1.0.0", "p-defer": "^3.0.0" + }, + "dependencies": { + "p-defer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", + "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==" + } } }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "requires": { "yocto-queue": "^0.1.0" } @@ -20913,9 +20679,9 @@ } }, "p-reflect": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-3.0.0.tgz", - "integrity": "sha512-rOgYyrvUxnJdSYKGSK7UnO7RxFSnT/IJYFPiosuQ2/AtRWIryIrv8lecWqJXWbKnMcUjJvxiHDMp80m0Yj4eLA==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-3.1.0.tgz", + "integrity": "sha512-3sG3UlpisPSaX+o7u2q01hIQmrpkvdl5GSO1ZwL7pfc5kHB2bPF0eFNCfYTrW1/LTUdgmPwBAvmT0Zr8eSmaAQ==" }, "p-retry": { "version": "5.1.1", @@ -20927,12 +20693,12 @@ } }, "p-settle": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-5.0.0.tgz", - "integrity": "sha512-P+cL1wECSDqI49JAiHlgG0HlqqL0CBsMP3f8vrVx6Yy8pMngmJqn8UjzAHr5CPkcDIzeBxugDLDMWTK8fqrFGw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-5.1.0.tgz", + "integrity": "sha512-ujR6UFfh09ziOKyC5aaJak5ZclsjlLw57SYtFZg6yllMofyygnaibQRZ4jf6QPWqoOCGUXyb1cxUKELeAyKO7g==", "requires": { "p-limit": "^4.0.0", - "p-reflect": "^3.0.0" + "p-reflect": "^3.1.0" }, "dependencies": { "p-limit": { @@ -21016,7 +20782,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { "version": "3.1.1", @@ -21056,7 +20823,8 @@ "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true }, "pidtree": { "version": "0.3.1", @@ -21392,6 +21160,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -21582,6 +21351,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -21645,7 +21415,8 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "require-main-filename": { "version": "2.0.0", @@ -21773,7 +21544,8 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -21827,6 +21599,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, "requires": { "randombytes": "^2.1.0" } @@ -21992,6 +21765,7 @@ "version": "0.5.20", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -22000,7 +21774,8 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -22192,6 +21967,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -22219,7 +21995,8 @@ "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true }, "strip-outer": { "version": "1.0.1", @@ -22242,6 +22019,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -22450,6 +22228,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "requires": { "is-number": "^7.0.0" } @@ -22495,7 +22274,7 @@ "truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "requires": { "utf8-byte-length": "^1.0.1" } @@ -22512,42 +22291,6 @@ "semver": "^7.3.4" } }, - "ts-mocha": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-9.0.2.tgz", - "integrity": "sha512-WyQjvnzwrrubl0JT7EC1yWmNpcsU3fOuBFfdps30zbmFBgKniSaSOyZMZx+Wq7kytUs5CY+pEbSYEbGfIKnXTw==", - "requires": { - "ts-node": "7.0.1", - "tsconfig-paths": "^3.5.0" - }, - "dependencies": { - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" - }, - "ts-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", - "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", - "requires": { - "arrify": "^1.0.0", - "buffer-from": "^1.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", - "yn": "^2.0.0" - } - }, - "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==" - } - } - }, "ts-node": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", @@ -22580,7 +22323,7 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "devOptional": true, + "dev": true, "requires": { "@types/json5": "^0.0.29", "json5": "^1.0.1", @@ -22592,7 +22335,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "devOptional": true, + "dev": true, "requires": { "minimist": "^1.2.0" } @@ -22601,7 +22344,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "devOptional": true + "dev": true } } }, @@ -22691,7 +22434,8 @@ "typescript": { "version": "4.5.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "dev": true }, "ua-parser-js": { "version": "0.7.31", @@ -22699,6 +22443,26 @@ "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", "dev": true }, + "uint8-varint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-1.0.2.tgz", + "integrity": "sha512-IubsiyUyX2snBV+XmTa+Q9hjGejhDznwIzXMyl3ZjVWog3h/mDijB8s/s/9ujQpJ2Yskj51hWAvbeS7B7Em61g==", + "requires": { + "byte-access": "^1.0.0", + "longbits": "^1.1.0", + "uint8arraylist": "^2.0.0" + }, + "dependencies": { + "uint8arraylist": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.0.0.tgz", + "integrity": "sha512-OOx2TiInuBOlvDDhS0um83DWVTvgvazvo96xkMVBV3RbDI5HPxdqudzsIKMzh2lklP52diJ/tVhAhlxHS2f0jA==", + "requires": { + "uint8arrays": "^3.0.0" + } + } + } + }, "uint8arraylist": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-1.5.1.tgz", @@ -22788,7 +22552,7 @@ "utf8-byte-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=" + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" }, "utf8-bytes": { "version": "0.0.1", @@ -22832,11 +22596,6 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -23082,12 +22841,14 @@ "workerpool": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -23097,12 +22858,14 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -23114,7 +22877,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write-file-atomic": { "version": "3.0.3", @@ -23161,14 +22925,15 @@ "dev": true }, "xsalsa20": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.1.0.tgz", - "integrity": "sha512-zd3ytX2cm+tcSndRU+krm0eL4TMMpZE7evs5hLRAoOy6gviqLfe3qOlkjF3i5SeAkQUCeJk0lJZrEU56kHRfWw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.2.0.tgz", + "integrity": "sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w==" }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true }, "yallist": { "version": "4.0.0", @@ -23186,6 +22951,7 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -23199,12 +22965,14 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -23216,12 +22984,14 @@ "yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true }, "yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, "requires": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -23232,12 +23002,14 @@ "camelcase": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true }, "decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true } } }, @@ -23254,12 +23026,14 @@ "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index cea1bf6e62..fe85651a53 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "it-length-prefixed": "^7.0.1", "it-pipe": "^2.0.3", "js-sha3": "^0.8.0", - "libp2p": "^0.37.3", + "libp2p": "next", "multiformats": "^9.6.5", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", diff --git a/src/lib/waku.ts b/src/lib/waku.ts index 867216a388..6676d8db39 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -1,4 +1,5 @@ import { Noise } from "@chainsafe/libp2p-noise"; +import type { Stream } from "@libp2p/interface-connection"; import type { PeerId } from "@libp2p/interface-peer-id"; import { PeerProtocolsChangeData } from "@libp2p/interface-peer-store"; import { Mplex } from "@libp2p/mplex"; @@ -175,9 +176,10 @@ export class Waku { * @param peer The peer to dial * @param protocols Waku protocols we expect from the peer; Default to Relay */ - // TODO: Any to be removed once libp2p uses @libp2p/interface-connection for - // dialProtocol - async dial(peer: PeerId | Multiaddr, protocols?: Protocols[]): Promise { + async dial( + peer: PeerId | Multiaddr, + protocols?: Protocols[] + ): Promise { const _protocols = protocols ?? [Protocols.Relay]; const codecs: string[] = []; diff --git a/src/lib/waku_filter/index.ts b/src/lib/waku_filter/index.ts index ab80118e2f..e8cf13e255 100644 --- a/src/lib/waku_filter/index.ts +++ b/src/lib/waku_filter/index.ts @@ -1,10 +1,12 @@ +import type { Stream } from "@libp2p/interface-connection"; import type { PeerId } from "@libp2p/interface-peer-id"; import type { Peer } from "@libp2p/interface-peer-store"; +import type { IncomingStreamData } from "@libp2p/interface-registrar"; import debug from "debug"; import all from "it-all"; import * as lp from "it-length-prefixed"; import { pipe } from "it-pipe"; -import { Libp2p } from "libp2p"; +import type { Libp2p } from "libp2p"; import { WakuMessage as WakuMessageProto } from "../../proto/message"; import { DefaultPubSubTopic } from "../constants"; @@ -116,11 +118,10 @@ export class WakuFilter { }; } - // `any` can be removed at the next libp2p release >0.37.3 - private onRequest({ stream }: any): void { + private onRequest(streamData: IncomingStreamData): void { log("Receiving message push"); try { - pipe(stream, lp.decode(), async (source) => { + pipe(streamData.stream, lp.decode(), async (source) => { for await (const bytes of source) { const res = FilterRPC.decode(bytes.slice()); if (res.requestId && res.push?.messages?.length) { @@ -201,15 +202,14 @@ export class WakuFilter { } // Should be able to remove any at next libp2p release >0.37.3 - private async newStream(peer: Peer): Promise { + private async newStream(peer: Peer): Promise { const connections = this.libp2p.connectionManager.getConnections(peer.id); if (!connections) { throw new Error("Failed to get a connection to the peer"); } // TODO: Appropriate connection selection - const { stream } = await connections[0].newStream(FilterCodec); - return stream; + return connections[0].newStream(FilterCodec); } private async getPeer(peerId?: PeerId): Promise { diff --git a/src/lib/waku_light_push/index.ts b/src/lib/waku_light_push/index.ts index 00ac0b35ff..e598087fed 100644 --- a/src/lib/waku_light_push/index.ts +++ b/src/lib/waku_light_push/index.ts @@ -66,7 +66,7 @@ export class WakuLightPush { if (!connections) throw "Failed to get a connection to the peer"; // TODO: Appropriate connection management - const { stream } = await connections[0].newStream(LightPushCodec); + const stream = await connections[0].newStream(LightPushCodec); try { const pubSubTopic = opts?.pubSubTopic ? opts.pubSubTopic diff --git a/src/lib/waku_store/index.ts b/src/lib/waku_store/index.ts index 2f4a5d1bac..3fa4d2dfe6 100644 --- a/src/lib/waku_store/index.ts +++ b/src/lib/waku_store/index.ts @@ -201,7 +201,7 @@ export class WakuStore { let cursor = undefined; while (true) { // TODO: Some connection selection logic? - const { stream } = await connections[0].newStream(storeCodec); + const stream = await connections[0].newStream(storeCodec); const queryOpts = Object.assign(opts, { cursor }); const historyRpcQuery = HistoryRPC.createQuery(queryOpts); dbg("Querying store peer", connections[0].remoteAddr.toString()); From da9b7b31f5dd88d0ca1b3410dac73b7317835092 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 11:56:21 +1000 Subject: [PATCH 29/68] chore: bump @chainsafe/libp2p-gossipsub to 3.4.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index bafeea8710..e09cd2d4f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.24.0", "license": "MIT OR Apache-2.0", "dependencies": { - "@chainsafe/libp2p-gossipsub": "^3.3.0", + "@chainsafe/libp2p-gossipsub": "^3.4.0", "@chainsafe/libp2p-noise": "^7.0.1", "@ethersproject/rlp": "^5.5.0", "@libp2p/crypto": "^1.0.0", @@ -616,9 +616,9 @@ } }, "node_modules/@chainsafe/libp2p-gossipsub": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-3.3.0.tgz", - "integrity": "sha512-eZJD1WsMTVhZ3E4OAD6oRGIjJ39gwrhp/QiU+dGeD7PC3YW8K3TyyqgIBccQ2eUdJFVy7p79AmCKgIjBvx9yyw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-3.4.0.tgz", + "integrity": "sha512-vN73j3t69TXy82Zx3guPB1AZa/8hHyDvgeHrjmegadugs6eywuR+BJTsmD3vd7FAZvD9g6Bdekt1VuE2GG8GOw==", "dependencies": { "@libp2p/components": "^2.0.0", "@libp2p/crypto": "^1.0.0", @@ -13524,9 +13524,9 @@ } }, "@chainsafe/libp2p-gossipsub": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-3.3.0.tgz", - "integrity": "sha512-eZJD1WsMTVhZ3E4OAD6oRGIjJ39gwrhp/QiU+dGeD7PC3YW8K3TyyqgIBccQ2eUdJFVy7p79AmCKgIjBvx9yyw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-3.4.0.tgz", + "integrity": "sha512-vN73j3t69TXy82Zx3guPB1AZa/8hHyDvgeHrjmegadugs6eywuR+BJTsmD3vd7FAZvD9g6Bdekt1VuE2GG8GOw==", "requires": { "@libp2p/components": "^2.0.0", "@libp2p/crypto": "^1.0.0", diff --git a/package.json b/package.json index fe85651a53..16e0dec3eb 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "node": ">=16" }, "dependencies": { - "@chainsafe/libp2p-gossipsub": "^3.3.0", + "@chainsafe/libp2p-gossipsub": "^3.4.0", "@chainsafe/libp2p-noise": "^7.0.1", "@ethersproject/rlp": "^5.5.0", "@libp2p/crypto": "^1.0.0", From 811685e0418a7e78b0e24cb36f286658111d47b0 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 12:33:08 +1000 Subject: [PATCH 30/68] refactor!: Move `waitForRemotePeer` to own file --- src/index.ts | 2 + src/lib/enr/enr.node.spec.ts | 7 +- src/lib/wait_for_remote_peer.node.spec.ts | 171 ++++++++++++++++++++ src/lib/wait_for_remote_peer.ts | 144 +++++++++++++++++ src/lib/waku.node.spec.ts | 172 +-------------------- src/lib/waku.ts | 137 ---------------- src/lib/waku_filter/index.node.spec.ts | 3 +- src/lib/waku_light_push/index.node.spec.ts | 5 +- src/lib/waku_message/index.node.spec.ts | 3 +- src/lib/waku_relay/index.node.spec.ts | 15 +- src/lib/waku_store/index.node.spec.ts | 21 +-- 11 files changed, 351 insertions(+), 329 deletions(-) create mode 100644 src/lib/wait_for_remote_peer.node.spec.ts create mode 100644 src/lib/wait_for_remote_peer.ts diff --git a/src/index.ts b/src/index.ts index 5788df3c26..e06c6c38fe 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,6 +13,8 @@ export * as enr from "./lib/enr"; export * as utils from "./lib/utils"; +export { waitForRemotePeer } from "./lib/wait_for_remote_peer"; + export * as waku from "./lib/waku"; export { Waku, Protocols } from "./lib/waku"; diff --git a/src/lib/enr/enr.node.spec.ts b/src/lib/enr/enr.node.spec.ts index 475129b9e4..81c45c1c24 100644 --- a/src/lib/enr/enr.node.spec.ts +++ b/src/lib/enr/enr.node.spec.ts @@ -1,6 +1,7 @@ import { expect } from "chai"; import { makeLogFileName, NOISE_KEY_1, Nwaku } from "../../test_utils"; +import { waitForRemotePeer } from "../wait_for_remote_peer"; import { createWaku, Protocols, Waku } from "../waku"; import { ENR } from "./enr"; @@ -30,7 +31,7 @@ describe("ENR Interop: nwaku", function () { }); await waku.start(); await waku.dial(multiAddrWithId); - await waku.waitForRemotePeer([Protocols.Relay]); + await waitForRemotePeer(waku, [Protocols.Relay]); const nwakuInfo = await nwaku.info(); const nimPeerId = await nwaku.getPeerId(); @@ -62,7 +63,7 @@ describe("ENR Interop: nwaku", function () { }); await waku.start(); await waku.dial(multiAddrWithId); - await waku.waitForRemotePeer([Protocols.Relay]); + await waitForRemotePeer(waku, [Protocols.Relay]); const nwakuInfo = await nwaku.info(); const nimPeerId = await nwaku.getPeerId(); @@ -94,7 +95,7 @@ describe("ENR Interop: nwaku", function () { }); await waku.start(); await waku.dial(multiAddrWithId); - await waku.waitForRemotePeer([Protocols.Relay]); + await waitForRemotePeer(waku, [Protocols.Relay]); const nwakuInfo = await nwaku.info(); const nimPeerId = await nwaku.getPeerId(); diff --git a/src/lib/wait_for_remote_peer.node.spec.ts b/src/lib/wait_for_remote_peer.node.spec.ts new file mode 100644 index 0000000000..57b0a7c357 --- /dev/null +++ b/src/lib/wait_for_remote_peer.node.spec.ts @@ -0,0 +1,171 @@ +import { expect } from "chai"; + +import { makeLogFileName, NOISE_KEY_1, Nwaku } from "../test_utils"; +import { delay } from "../test_utils/delay"; + +import { waitForRemotePeer } from "./wait_for_remote_peer"; +import { createWaku, Protocols, Waku } from "./waku"; + +describe("Wait for remote peer", function () { + let waku: Waku; + let nwaku: Nwaku | undefined; + + afterEach(async function () { + if (nwaku) { + nwaku.stop(); + nwaku = undefined; + } + !!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e)); + }); + + it("Relay - dialed first", async function () { + this.timeout(20_000); + nwaku = new Nwaku(makeLogFileName(this)); + await nwaku.start(); + const multiAddrWithId = await nwaku.getMultiaddrWithId(); + + waku = await createWaku({ + staticNoiseKey: NOISE_KEY_1, + }); + await waku.start(); + await waku.dial(multiAddrWithId); + await delay(1000); + await waitForRemotePeer(waku, [Protocols.Relay]); + const peers = waku.relay.getPeers(); + const nimPeerId = multiAddrWithId.getPeerId(); + + expect(nimPeerId).to.not.be.undefined; + expect(peers).to.includes(nimPeerId); + }); + + it("Relay - dialed after", async function () { + this.timeout(20_000); + nwaku = new Nwaku(makeLogFileName(this)); + await nwaku.start(); + const multiAddrWithId = await nwaku.getMultiaddrWithId(); + + waku = await createWaku({ + staticNoiseKey: NOISE_KEY_1, + }); + await waku.start(); + + const waitPromise = waitForRemotePeer(waku, [Protocols.Relay]); + await delay(1000); + await waku.dial(multiAddrWithId); + await waitPromise; + + // TODO: Should getMeshPeers be used instead? + const peers = waku.relay.getPeers(); + const nimPeerId = multiAddrWithId.getPeerId(); + + expect(nimPeerId).to.not.be.undefined; + expect(peers).includes(nimPeerId); + }); + + it("Relay - times out", function (done) { + this.timeout(5000); + createWaku({ + staticNoiseKey: NOISE_KEY_1, + }) + .then((waku) => waku.start().then(() => waku)) + .then((waku) => { + waitForRemotePeer(waku, [Protocols.Relay], 200).then( + () => { + throw "Promise expected to reject on time out"; + }, + (reason) => { + expect(reason).to.eq("Timed out waiting for a remote peer."); + done(); + } + ); + }); + }); + + it("Store - dialed first", async function () { + this.timeout(20_000); + nwaku = new Nwaku(makeLogFileName(this)); + await nwaku.start({ persistMessages: true }); + const multiAddrWithId = await nwaku.getMultiaddrWithId(); + + waku = await createWaku({ + staticNoiseKey: NOISE_KEY_1, + }); + await waku.start(); + await waku.dial(multiAddrWithId); + await delay(1000); + await waitForRemotePeer(waku, [Protocols.Store]); + + const peers = (await waku.store.peers()).map((peer) => peer.id.toString()); + const nimPeerId = multiAddrWithId.getPeerId(); + + expect(nimPeerId).to.not.be.undefined; + expect(peers.includes(nimPeerId as string)).to.be.true; + }); + + it("Store - dialed after - with timeout", async function () { + this.timeout(20_000); + nwaku = new Nwaku(makeLogFileName(this)); + await nwaku.start({ persistMessages: true }); + const multiAddrWithId = await nwaku.getMultiaddrWithId(); + + waku = await createWaku({ + staticNoiseKey: NOISE_KEY_1, + }); + await waku.start(); + const waitPromise = waitForRemotePeer(waku, [Protocols.Store], 2000); + await delay(1000); + await waku.dial(multiAddrWithId); + await waitPromise; + + const peers = (await waku.store.peers()).map((peer) => peer.id.toString()); + + const nimPeerId = multiAddrWithId.getPeerId(); + + expect(nimPeerId).to.not.be.undefined; + expect(peers.includes(nimPeerId as string)).to.be.true; + }); + + it("LightPush", async function () { + this.timeout(20_000); + nwaku = new Nwaku(makeLogFileName(this)); + await nwaku.start({ lightpush: true }); + const multiAddrWithId = await nwaku.getMultiaddrWithId(); + + waku = await createWaku({ + staticNoiseKey: NOISE_KEY_1, + }); + await waku.start(); + await waku.dial(multiAddrWithId); + await waitForRemotePeer(waku, [Protocols.LightPush]); + + const peers = (await waku.lightPush.peers()).map((peer) => + peer.id.toString() + ); + + const nimPeerId = multiAddrWithId.getPeerId(); + + expect(nimPeerId).to.not.be.undefined; + expect(peers.includes(nimPeerId as string)).to.be.true; + }); + + it("Filter", async function () { + this.timeout(20_000); + nwaku = new Nwaku(makeLogFileName(this)); + await nwaku.start({ filter: true }); + const multiAddrWithId = await nwaku.getMultiaddrWithId(); + + waku = await createWaku({ + staticNoiseKey: NOISE_KEY_1, + }); + await waku.start(); + await waku.dial(multiAddrWithId); + await waitForRemotePeer(waku, [Protocols.Filter]); + + const peers = (await waku.filter.peers()).map((peer) => peer.id.toString()); + + const nimPeerId = multiAddrWithId.getPeerId(); + + expect(nimPeerId).to.not.be.undefined; + expect(peers.includes(nimPeerId as string)).to.be.true; + }); +}); diff --git a/src/lib/wait_for_remote_peer.ts b/src/lib/wait_for_remote_peer.ts new file mode 100644 index 0000000000..1c040c1902 --- /dev/null +++ b/src/lib/wait_for_remote_peer.ts @@ -0,0 +1,144 @@ +import { PeerProtocolsChangeData } from "@libp2p/interface-peer-store"; +import debug from "debug"; + +import { StoreCodecs } from "./constants"; +import { Protocols, Waku } from "./waku"; +import { FilterCodec } from "./waku_filter"; +import { LightPushCodec } from "./waku_light_push"; + +const log = debug("waku:wait-for-remote-peer"); + +/** + * Wait for a remote peer to be ready given the passed protocols. + * Useful when using the [[CreateOptions.bootstrap]] with [[Waku.create]]. + * + * @param waku The Waku Node + * @param protocols The protocols that need to be enabled by remote peers. + * @param timeoutMs A timeout value in milliseconds.. + * + * @returns A promise that **resolves** if all desired protocols are fulfilled by + * remote nodes, **rejects** if the timeoutMs is reached. + * + * @default Remote peer must have Waku Relay enabled and no time out is applied. + */ +export async function waitForRemotePeer( + waku: Waku, + protocols?: Protocols[], + timeoutMs?: number +): Promise { + protocols = protocols ?? [Protocols.Relay]; + + const promises: Promise[] = []; + + if (protocols.includes(Protocols.Relay)) { + const peers = waku.relay.getMeshPeers(waku.relay.pubSubTopic); + + if (peers.length == 0) { + // No peer yet available, wait for a subscription + const promise = new Promise((resolve) => { + // TODO: Remove listeners once done + waku.relay.addEventListener("subscription-change", () => { + // Remote peer subscribed to topic, now wait for a heartbeat + // so that the mesh is updated and the remote peer added to it + waku.relay.addEventListener("gossipsub:heartbeat", () => resolve()); + }); + }); + promises.push(promise); + } + } + + // TODO: This can be factored in one helper function + // Probably need to add a "string" protocol to each class to make it easier + if (protocols.includes(Protocols.Store)) { + const storePromise = (async (): Promise => { + const peers = await waku.store.peers(); + + if (peers.length) { + log("Store peer found: ", peers[0].id.toString()); + return; + } + + await new Promise((resolve) => { + const cb = (evt: CustomEvent): void => { + for (const codec of Object.values(StoreCodecs)) { + if (evt.detail.protocols.includes(codec)) { + log("Resolving for", StoreCodecs, evt.detail.protocols); + waku.libp2p.peerStore.removeEventListener("change:protocols", cb); + resolve(); + break; + } + } + }; + waku.libp2p.peerStore.addEventListener("change:protocols", cb); + }); + })(); + promises.push(storePromise); + } + + if (protocols.includes(Protocols.LightPush)) { + const lightPushPromise = (async (): Promise => { + const peers = await waku.lightPush.peers(); + + if (peers.length) { + log("Light Push peer found: ", peers[0].id.toString()); + return; + } + + await new Promise((resolve) => { + const cb = (evt: CustomEvent): void => { + if (evt.detail.protocols.includes(LightPushCodec)) { + log("Resolving for", LightPushCodec, evt.detail.protocols); + waku.libp2p.peerStore.removeEventListener("change:protocols", cb); + resolve(); + } + }; + waku.libp2p.peerStore.addEventListener("change:protocols", cb); + }); + })(); + promises.push(lightPushPromise); + } + + if (protocols.includes(Protocols.Filter)) { + const filterPromise = (async (): Promise => { + const peers = await waku.filter.peers(); + + if (peers.length) { + log("Filter peer found: ", peers[0].id.toString()); + return; + } + + await new Promise((resolve) => { + const cb = (evt: CustomEvent): void => { + if (evt.detail.protocols.includes(FilterCodec)) { + log("Resolving for", FilterCodec, evt.detail.protocols); + waku.libp2p.peerStore.removeEventListener("change:protocols", cb); + resolve(); + } + }; + waku.libp2p.peerStore.addEventListener("change:protocols", cb); + }); + })(); + promises.push(filterPromise); + } + + if (timeoutMs) { + await rejectOnTimeout( + Promise.all(promises), + timeoutMs, + "Timed out waiting for a remote peer." + ); + } else { + await Promise.all(promises); + } +} + +const awaitTimeout = (ms: number, rejectReason: string): Promise => + new Promise((_resolve, reject) => setTimeout(() => reject(rejectReason), ms)); + +async function rejectOnTimeout( + promise: Promise, + timeoutMs: number, + rejectReason: string +): Promise { + await Promise.race([promise, awaitTimeout(timeoutMs, rejectReason)]); +} diff --git a/src/lib/waku.node.spec.ts b/src/lib/waku.node.spec.ts index 40986c2c45..76fae32f26 100644 --- a/src/lib/waku.node.spec.ts +++ b/src/lib/waku.node.spec.ts @@ -7,9 +7,9 @@ import { NOISE_KEY_2, Nwaku, } from "../test_utils/"; -import { delay } from "../test_utils/delay"; import { generateSymmetricKey } from "./crypto"; +import { waitForRemotePeer } from "./wait_for_remote_peer"; import { createWaku, Protocols, Waku } from "./waku"; import { WakuMessage } from "./waku_message"; @@ -36,7 +36,7 @@ describe("Waku Dial [node only]", function () { }); await waku.start(); await waku.dial(multiAddrWithId); - await waku.waitForRemotePeer([Protocols.Relay]); + await waitForRemotePeer(waku, [Protocols.Relay]); const nimPeerId = await nwaku.getPeerId(); expect(await waku.libp2p.peerStore.has(nimPeerId)).to.be.true; @@ -135,8 +135,8 @@ describe("Decryption Keys", () => { ); await Promise.all([ - waku1.waitForRemotePeer([Protocols.Relay]), - waku2.waitForRemotePeer([Protocols.Relay]), + waitForRemotePeer(waku1, [Protocols.Relay]), + waitForRemotePeer(waku2, [Protocols.Relay]), ]); }); @@ -177,167 +177,3 @@ describe("Decryption Keys", () => { expect(receivedMsg.timestamp?.valueOf()).to.eq(messageTimestamp.valueOf()); }); }); - -describe("Wait for remote peer / get peers", function () { - let waku: Waku; - let nwaku: Nwaku | undefined; - - afterEach(async function () { - if (nwaku) { - nwaku.stop(); - nwaku = undefined; - } - !!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e)); - }); - - it("Relay - dialed first", async function () { - this.timeout(20_000); - nwaku = new Nwaku(makeLogFileName(this)); - await nwaku.start(); - const multiAddrWithId = await nwaku.getMultiaddrWithId(); - - waku = await createWaku({ - staticNoiseKey: NOISE_KEY_1, - }); - await waku.start(); - await waku.dial(multiAddrWithId); - await delay(1000); - await waku.waitForRemotePeer([Protocols.Relay]); - const peers = waku.relay.getPeers(); - const nimPeerId = multiAddrWithId.getPeerId(); - - expect(nimPeerId).to.not.be.undefined; - expect(peers).to.includes(nimPeerId); - }); - - it("Relay - dialed after", async function () { - this.timeout(20_000); - nwaku = new Nwaku(makeLogFileName(this)); - await nwaku.start(); - const multiAddrWithId = await nwaku.getMultiaddrWithId(); - - waku = await createWaku({ - staticNoiseKey: NOISE_KEY_1, - }); - await waku.start(); - - const waitPromise = waku.waitForRemotePeer([Protocols.Relay]); - await delay(1000); - await waku.dial(multiAddrWithId); - await waitPromise; - - // TODO: Should getMeshPeers be used instead? - const peers = waku.relay.getPeers(); - const nimPeerId = multiAddrWithId.getPeerId(); - - expect(nimPeerId).to.not.be.undefined; - expect(peers).includes(nimPeerId); - }); - - it("Relay - times out", function (done) { - this.timeout(5000); - createWaku({ - staticNoiseKey: NOISE_KEY_1, - }) - .then((waku) => waku.start().then(() => waku)) - .then((waku) => { - waku.waitForRemotePeer([Protocols.Relay], 200).then( - () => { - throw "Promise expected to reject on time out"; - }, - (reason) => { - expect(reason).to.eq("Timed out waiting for a remote peer."); - done(); - } - ); - }); - }); - - it("Store - dialed first", async function () { - this.timeout(20_000); - nwaku = new Nwaku(makeLogFileName(this)); - await nwaku.start({ persistMessages: true }); - const multiAddrWithId = await nwaku.getMultiaddrWithId(); - - waku = await createWaku({ - staticNoiseKey: NOISE_KEY_1, - }); - await waku.start(); - await waku.dial(multiAddrWithId); - await delay(1000); - await waku.waitForRemotePeer([Protocols.Store]); - - const peers = (await waku.store.peers()).map((peer) => peer.id.toString()); - const nimPeerId = multiAddrWithId.getPeerId(); - - expect(nimPeerId).to.not.be.undefined; - expect(peers.includes(nimPeerId as string)).to.be.true; - }); - - it("Store - dialed after - with timeout", async function () { - this.timeout(20_000); - nwaku = new Nwaku(makeLogFileName(this)); - await nwaku.start({ persistMessages: true }); - const multiAddrWithId = await nwaku.getMultiaddrWithId(); - - waku = await createWaku({ - staticNoiseKey: NOISE_KEY_1, - }); - await waku.start(); - const waitPromise = waku.waitForRemotePeer([Protocols.Store], 2000); - await delay(1000); - await waku.dial(multiAddrWithId); - await waitPromise; - - const peers = (await waku.store.peers()).map((peer) => peer.id.toString()); - - const nimPeerId = multiAddrWithId.getPeerId(); - - expect(nimPeerId).to.not.be.undefined; - expect(peers.includes(nimPeerId as string)).to.be.true; - }); - - it("LightPush", async function () { - this.timeout(20_000); - nwaku = new Nwaku(makeLogFileName(this)); - await nwaku.start({ lightpush: true }); - const multiAddrWithId = await nwaku.getMultiaddrWithId(); - - waku = await createWaku({ - staticNoiseKey: NOISE_KEY_1, - }); - await waku.start(); - await waku.dial(multiAddrWithId); - await waku.waitForRemotePeer([Protocols.LightPush]); - - const peers = (await waku.lightPush.peers()).map((peer) => - peer.id.toString() - ); - - const nimPeerId = multiAddrWithId.getPeerId(); - - expect(nimPeerId).to.not.be.undefined; - expect(peers.includes(nimPeerId as string)).to.be.true; - }); - - it("Filter", async function () { - this.timeout(20_000); - nwaku = new Nwaku(makeLogFileName(this)); - await nwaku.start({ filter: true }); - const multiAddrWithId = await nwaku.getMultiaddrWithId(); - - waku = await createWaku({ - staticNoiseKey: NOISE_KEY_1, - }); - await waku.start(); - await waku.dial(multiAddrWithId); - await waku.waitForRemotePeer([Protocols.Filter]); - - const peers = (await waku.filter.peers()).map((peer) => peer.id.toString()); - - const nimPeerId = multiAddrWithId.getPeerId(); - - expect(nimPeerId).to.not.be.undefined; - expect(peers.includes(nimPeerId as string)).to.be.true; - }); -}); diff --git a/src/lib/waku.ts b/src/lib/waku.ts index 6676d8db39..dc44e705b7 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -1,7 +1,6 @@ import { Noise } from "@chainsafe/libp2p-noise"; import type { Stream } from "@libp2p/interface-connection"; import type { PeerId } from "@libp2p/interface-peer-id"; -import { PeerProtocolsChangeData } from "@libp2p/interface-peer-store"; import { Mplex } from "@libp2p/mplex"; import { peerIdFromString } from "@libp2p/peer-id"; import { WebSockets } from "@libp2p/websockets"; @@ -276,131 +275,6 @@ export class Waku { return localMultiaddr + "/p2p/" + this.libp2p.peerId.toString(); } - /** - * Wait for a remote peer to be ready given the passed protocols. - * Useful when using the [[CreateOptions.bootstrap]] with [[Waku.create]]. - * - * @param protocols The protocols that need to be enabled by remote peers. - * @param timeoutMs A timeout value in milliseconds.. - * - * @returns A promise that **resolves** if all desired protocols are fulfilled by - * remote nodes, **rejects** if the timeoutMs is reached. - * - * @default Remote peer must have Waku Relay enabled and no time out is applied. - */ - async waitForRemotePeer( - protocols?: Protocols[], - timeoutMs?: number - ): Promise { - protocols = protocols ?? [Protocols.Relay]; - - const promises: Promise[] = []; - - if (protocols.includes(Protocols.Relay)) { - const peers = this.relay.getMeshPeers(this.relay.pubSubTopic); - - if (peers.length == 0) { - // No peer yet available, wait for a subscription - const promise = new Promise((resolve) => { - // TODO: Remove listeners once done - this.relay.addEventListener("subscription-change", () => { - // Remote peer subscribed to topic, now wait for a heartbeat - // so that the mesh is updated and the remote peer added to it - this.relay.addEventListener("gossipsub:heartbeat", () => resolve()); - }); - }); - promises.push(promise); - } - } - - // TODO: This can be factored in one helper function - // Probably need to add a "string" protocol to each class to make it easier - if (protocols.includes(Protocols.Store)) { - const storePromise = (async (): Promise => { - const peers = await this.store.peers(); - - if (peers.length) { - log("Store peer found: ", peers[0].id.toString()); - return; - } - - await new Promise((resolve) => { - const cb = (evt: CustomEvent): void => { - for (const codec of Object.values(StoreCodecs)) { - if (evt.detail.protocols.includes(codec)) { - log("Resolving for", StoreCodecs, evt.detail.protocols); - this.libp2p.peerStore.removeEventListener( - "change:protocols", - cb - ); - resolve(); - break; - } - } - }; - this.libp2p.peerStore.addEventListener("change:protocols", cb); - }); - })(); - promises.push(storePromise); - } - - if (protocols.includes(Protocols.LightPush)) { - const lightPushPromise = (async (): Promise => { - const peers = await this.lightPush.peers(); - - if (peers.length) { - log("Light Push peer found: ", peers[0].id.toString()); - return; - } - - await new Promise((resolve) => { - const cb = (evt: CustomEvent): void => { - if (evt.detail.protocols.includes(LightPushCodec)) { - log("Resolving for", LightPushCodec, evt.detail.protocols); - this.libp2p.peerStore.removeEventListener("change:protocols", cb); - resolve(); - } - }; - this.libp2p.peerStore.addEventListener("change:protocols", cb); - }); - })(); - promises.push(lightPushPromise); - } - - if (protocols.includes(Protocols.Filter)) { - const filterPromise = (async (): Promise => { - const peers = await this.filter.peers(); - - if (peers.length) { - log("Filter peer found: ", peers[0].id.toString()); - return; - } - - await new Promise((resolve) => { - const cb = (evt: CustomEvent): void => { - if (evt.detail.protocols.includes(FilterCodec)) { - log("Resolving for", FilterCodec, evt.detail.protocols); - this.libp2p.peerStore.removeEventListener("change:protocols", cb); - resolve(); - } - }; - this.libp2p.peerStore.addEventListener("change:protocols", cb); - }); - })(); - promises.push(filterPromise); - } - - if (timeoutMs) { - await rejectOnTimeout( - Promise.all(promises), - timeoutMs, - "Timed out waiting for a remote peer." - ); - } else { - await Promise.all(promises); - } - } - private startKeepAlive( peerId: PeerId, pingPeriodSecs: number, @@ -454,14 +328,3 @@ export class Waku { this.relayKeepAliveTimers = {}; } } - -const awaitTimeout = (ms: number, rejectReason: string): Promise => - new Promise((_resolve, reject) => setTimeout(() => reject(rejectReason), ms)); - -async function rejectOnTimeout( - promise: Promise, - timeoutMs: number, - rejectReason: string -): Promise { - await Promise.race([promise, awaitTimeout(timeoutMs, rejectReason)]); -} diff --git a/src/lib/waku_filter/index.node.spec.ts b/src/lib/waku_filter/index.node.spec.ts index ff15aadcf2..05054e31f3 100644 --- a/src/lib/waku_filter/index.node.spec.ts +++ b/src/lib/waku_filter/index.node.spec.ts @@ -3,6 +3,7 @@ import debug from "debug"; import { makeLogFileName, NOISE_KEY_1, Nwaku } from "../../test_utils"; import { delay } from "../../test_utils/delay"; +import { waitForRemotePeer } from "../wait_for_remote_peer"; import { createWaku, Protocols, Waku } from "../waku"; import { WakuMessage } from "../waku_message"; @@ -29,7 +30,7 @@ describe("Waku Filter", () => { }); await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); - await waku.waitForRemotePeer([Protocols.Filter, Protocols.LightPush]); + await waitForRemotePeer(waku, [Protocols.Filter, Protocols.LightPush]); }); it("creates a subscription", async function () { diff --git a/src/lib/waku_light_push/index.node.spec.ts b/src/lib/waku_light_push/index.node.spec.ts index 2d5e888f55..d67a59c223 100644 --- a/src/lib/waku_light_push/index.node.spec.ts +++ b/src/lib/waku_light_push/index.node.spec.ts @@ -3,6 +3,7 @@ import debug from "debug"; import { makeLogFileName, NOISE_KEY_1, Nwaku } from "../../test_utils"; import { delay } from "../../test_utils/delay"; +import { waitForRemotePeer } from "../wait_for_remote_peer"; import { createWaku, Protocols, Waku } from "../waku"; import { WakuMessage } from "../waku_message"; @@ -30,7 +31,7 @@ describe("Waku Light Push [node only]", () => { }); await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); - await waku.waitForRemotePeer([Protocols.LightPush]); + await waitForRemotePeer(waku, [Protocols.LightPush]); const messageText = "Light Push works!"; const message = await WakuMessage.fromUtf8String( @@ -67,7 +68,7 @@ describe("Waku Light Push [node only]", () => { }); await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); - await waku.waitForRemotePeer([Protocols.LightPush]); + await waitForRemotePeer(waku, [Protocols.LightPush]); const nimPeerId = await nwaku.getPeerId(); diff --git a/src/lib/waku_message/index.node.spec.ts b/src/lib/waku_message/index.node.spec.ts index db23835753..e26843b505 100644 --- a/src/lib/waku_message/index.node.spec.ts +++ b/src/lib/waku_message/index.node.spec.ts @@ -14,6 +14,7 @@ import { getPublicKey, } from "../crypto"; import { bytesToHex, bytesToUtf8, hexToBytes, utf8ToBytes } from "../utils"; +import { waitForRemotePeer } from "../wait_for_remote_peer"; import { createWaku, Protocols, Waku } from "../waku"; import { DecryptionMethod, WakuMessage } from "./index"; @@ -41,7 +42,7 @@ describe("Waku Message [node only]", function () { dbg("Dialing to nwaku node"); await waku.dial(await nwaku.getMultiaddrWithId()); dbg("Wait for remote peer"); - await waku.waitForRemotePeer([Protocols.Relay]); + await waitForRemotePeer(waku, [Protocols.Relay]); dbg("Remote peer ready"); // As this test uses the nwaku RPC API, we somehow often face // Race conditions where the nwaku node does not have the js-waku diff --git a/src/lib/waku_relay/index.node.spec.ts b/src/lib/waku_relay/index.node.spec.ts index e2a99665b8..d99ee00a5c 100644 --- a/src/lib/waku_relay/index.node.spec.ts +++ b/src/lib/waku_relay/index.node.spec.ts @@ -15,6 +15,7 @@ import { generateSymmetricKey, getPublicKey, } from "../crypto"; +import { waitForRemotePeer } from "../wait_for_remote_peer"; import { createWaku, Protocols, Waku } from "../waku"; import { DecryptionMethod, WakuMessage } from "../waku_message"; @@ -55,8 +56,8 @@ describe("Waku Relay [node only]", () => { log("Wait for mutual pubsub subscription"); await Promise.all([ - waku1.waitForRemotePeer([Protocols.Relay]), - waku2.waitForRemotePeer([Protocols.Relay]), + waitForRemotePeer(waku1, [Protocols.Relay]), + waitForRemotePeer(waku2, [Protocols.Relay]), ]); log("before each hook done"); }); @@ -284,8 +285,8 @@ describe("Waku Relay [node only]", () => { ); await Promise.all([ - waku1.waitForRemotePeer([Protocols.Relay]), - waku2.waitForRemotePeer([Protocols.Relay]), + waitForRemotePeer(waku1, [Protocols.Relay]), + waitForRemotePeer(waku2, [Protocols.Relay]), // No subscription change expected for Waku 3 ]); @@ -334,7 +335,7 @@ describe("Waku Relay [node only]", () => { await nwaku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); - await waku.waitForRemotePeer([Protocols.Relay]); + await waitForRemotePeer(waku, [Protocols.Relay]); }); afterEach(async function () { @@ -437,8 +438,8 @@ describe("Waku Relay [node only]", () => { // Wait for identify protocol to finish await Promise.all([ - waku1.waitForRemotePeer([Protocols.Relay]), - waku2.waitForRemotePeer([Protocols.Relay]), + waitForRemotePeer(waku1, [Protocols.Relay]), + waitForRemotePeer(waku2, [Protocols.Relay]), ]); await delay(2000); diff --git a/src/lib/waku_store/index.node.spec.ts b/src/lib/waku_store/index.node.spec.ts index 2a99e5c896..e814819865 100644 --- a/src/lib/waku_store/index.node.spec.ts +++ b/src/lib/waku_store/index.node.spec.ts @@ -12,6 +12,7 @@ import { generateSymmetricKey, getPublicKey, } from "../crypto"; +import { waitForRemotePeer } from "../wait_for_remote_peer"; import { createWaku, Protocols, Waku } from "../waku"; import { DecryptionMethod, WakuMessage } from "../waku_message"; @@ -51,7 +52,7 @@ describe("Waku Store", () => { }); await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); - await waku.waitForRemotePeer([Protocols.Store]); + await waitForRemotePeer(waku, [Protocols.Store]); const messages = await waku.store.queryHistory([]); expect(messages?.length).eq(2); @@ -84,7 +85,7 @@ describe("Waku Store", () => { }); await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); - await waku.waitForRemotePeer([Protocols.Store]); + await waitForRemotePeer(waku, [Protocols.Store]); let messages: WakuMessage[] = []; @@ -124,7 +125,7 @@ describe("Waku Store", () => { }); await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); - await waku.waitForRemotePeer([Protocols.Store]); + await waitForRemotePeer(waku, [Protocols.Store]); let messages: WakuMessage[] = []; const desiredMsgs = 14; @@ -161,7 +162,7 @@ describe("Waku Store", () => { }); await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); - await waku.waitForRemotePeer([Protocols.Store]); + await waitForRemotePeer(waku, [Protocols.Store]); const messages = await waku.store.queryHistory([], { pageDirection: PageDirection.FORWARD, @@ -201,7 +202,7 @@ describe("Waku Store", () => { }); await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); - await waku.waitForRemotePeer([Protocols.Store]); + await waitForRemotePeer(waku, [Protocols.Store]); const nimPeerId = await nwaku.getPeerId(); @@ -282,7 +283,7 @@ describe("Waku Store", () => { dbg("Waku nodes connected to nwaku"); - await waku1.waitForRemotePeer([Protocols.LightPush]); + await waitForRemotePeer(waku1, [Protocols.LightPush]); dbg("Sending messages using light push"); await Promise.all([ @@ -292,7 +293,7 @@ describe("Waku Store", () => { waku1.lightPush.push(clearMessage), ]); - await waku2.waitForRemotePeer([Protocols.Store]); + await waitForRemotePeer(waku2, [Protocols.Store]); waku2.store.addDecryptionKey(symKey); @@ -386,7 +387,7 @@ describe("Waku Store", () => { dbg("Waku nodes connected to nwaku"); - await waku1.waitForRemotePeer([Protocols.LightPush]); + await waitForRemotePeer(waku1, [Protocols.LightPush]); dbg("Sending messages using light push"); await Promise.all([ @@ -396,7 +397,7 @@ describe("Waku Store", () => { waku1.lightPush.push(clearMessage), ]); - await waku2.waitForRemotePeer([Protocols.Store]); + await waitForRemotePeer(waku2, [Protocols.Store]); waku2.addDecryptionKey(symKey, { contentTopics: [encryptedSymmetricContentTopic], @@ -460,7 +461,7 @@ describe("Waku Store", () => { }); await waku.start(); await waku.dial(await nwaku.getMultiaddrWithId()); - await waku.waitForRemotePeer([Protocols.Store]); + await waitForRemotePeer(waku, [Protocols.Store]); const nwakuPeerId = await nwaku.getPeerId(); From 4c3da7bad29afa6b8bc38959dc5ea32d9e900a59 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 12:43:17 +1000 Subject: [PATCH 31/68] refactor: Use common code for filter and light push --- src/lib/wait_for_remote_peer.ts | 76 +++++++++++++++------------------ 1 file changed, 35 insertions(+), 41 deletions(-) diff --git a/src/lib/wait_for_remote_peer.ts b/src/lib/wait_for_remote_peer.ts index 1c040c1902..9ccee6d542 100644 --- a/src/lib/wait_for_remote_peer.ts +++ b/src/lib/wait_for_remote_peer.ts @@ -1,5 +1,6 @@ -import { PeerProtocolsChangeData } from "@libp2p/interface-peer-store"; +import { Peer, PeerProtocolsChangeData } from "@libp2p/interface-peer-store"; import debug from "debug"; +import type { Libp2p } from "libp2p"; import { StoreCodecs } from "./constants"; import { Protocols, Waku } from "./waku"; @@ -8,6 +9,11 @@ import { LightPushCodec } from "./waku_light_push"; const log = debug("waku:wait-for-remote-peer"); +interface WakuProtocol { + libp2p: Libp2p; + peers: () => Promise; +} + /** * Wait for a remote peer to be ready given the passed protocols. * Useful when using the [[CreateOptions.bootstrap]] with [[Waku.create]]. @@ -76,49 +82,11 @@ export async function waitForRemotePeer( } if (protocols.includes(Protocols.LightPush)) { - const lightPushPromise = (async (): Promise => { - const peers = await waku.lightPush.peers(); - - if (peers.length) { - log("Light Push peer found: ", peers[0].id.toString()); - return; - } - - await new Promise((resolve) => { - const cb = (evt: CustomEvent): void => { - if (evt.detail.protocols.includes(LightPushCodec)) { - log("Resolving for", LightPushCodec, evt.detail.protocols); - waku.libp2p.peerStore.removeEventListener("change:protocols", cb); - resolve(); - } - }; - waku.libp2p.peerStore.addEventListener("change:protocols", cb); - }); - })(); - promises.push(lightPushPromise); + promises.push(waitForConnectedPeer(waku.lightPush, LightPushCodec)); } if (protocols.includes(Protocols.Filter)) { - const filterPromise = (async (): Promise => { - const peers = await waku.filter.peers(); - - if (peers.length) { - log("Filter peer found: ", peers[0].id.toString()); - return; - } - - await new Promise((resolve) => { - const cb = (evt: CustomEvent): void => { - if (evt.detail.protocols.includes(FilterCodec)) { - log("Resolving for", FilterCodec, evt.detail.protocols); - waku.libp2p.peerStore.removeEventListener("change:protocols", cb); - resolve(); - } - }; - waku.libp2p.peerStore.addEventListener("change:protocols", cb); - }); - })(); - promises.push(filterPromise); + promises.push(waitForConnectedPeer(waku.lightPush, FilterCodec)); } if (timeoutMs) { @@ -132,6 +100,32 @@ export async function waitForRemotePeer( } } +/** + * Wait for a peer with the given protocol to be connected. + */ +async function waitForConnectedPeer( + waku: WakuProtocol, + codec: string +): Promise { + const peers = await waku.peers(); + + if (peers.length) { + log(`${codec} peer found: `, peers[0].id.toString()); + return; + } + + await new Promise((resolve) => { + const cb = (evt: CustomEvent): void => { + if (evt.detail.protocols.includes(codec)) { + log("Resolving for", codec, evt.detail.protocols); + waku.libp2p.peerStore.removeEventListener("change:protocols", cb); + resolve(); + } + }; + waku.libp2p.peerStore.addEventListener("change:protocols", cb); + }); +} + const awaitTimeout = (ms: number, rejectReason: string): Promise => new Promise((_resolve, reject) => setTimeout(() => reject(rejectReason), ms)); From 0a505659b7a34fe3a6478a96e562799746ed4b8e Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 12:48:48 +1000 Subject: [PATCH 32/68] fix: ensure node only enable protocol we are testing --- src/lib/wait_for_remote_peer.node.spec.ts | 42 +++++++++++++++++++---- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/src/lib/wait_for_remote_peer.node.spec.ts b/src/lib/wait_for_remote_peer.node.spec.ts index 57b0a7c357..06bf3e92b3 100644 --- a/src/lib/wait_for_remote_peer.node.spec.ts +++ b/src/lib/wait_for_remote_peer.node.spec.ts @@ -21,7 +21,12 @@ describe("Wait for remote peer", function () { it("Relay - dialed first", async function () { this.timeout(20_000); nwaku = new Nwaku(makeLogFileName(this)); - await nwaku.start(); + await nwaku.start({ + relay: true, + store: false, + filter: false, + lightpush: false, + }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); waku = await createWaku({ @@ -41,7 +46,12 @@ describe("Wait for remote peer", function () { it("Relay - dialed after", async function () { this.timeout(20_000); nwaku = new Nwaku(makeLogFileName(this)); - await nwaku.start(); + await nwaku.start({ + relay: true, + store: false, + filter: false, + lightpush: false, + }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); waku = await createWaku({ @@ -84,7 +94,12 @@ describe("Wait for remote peer", function () { it("Store - dialed first", async function () { this.timeout(20_000); nwaku = new Nwaku(makeLogFileName(this)); - await nwaku.start({ persistMessages: true }); + await nwaku.start({ + store: true, + relay: false, + lightpush: false, + filter: false, + }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); waku = await createWaku({ @@ -105,7 +120,12 @@ describe("Wait for remote peer", function () { it("Store - dialed after - with timeout", async function () { this.timeout(20_000); nwaku = new Nwaku(makeLogFileName(this)); - await nwaku.start({ persistMessages: true }); + await nwaku.start({ + store: true, + relay: false, + lightpush: false, + filter: false, + }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); waku = await createWaku({ @@ -128,7 +148,12 @@ describe("Wait for remote peer", function () { it("LightPush", async function () { this.timeout(20_000); nwaku = new Nwaku(makeLogFileName(this)); - await nwaku.start({ lightpush: true }); + await nwaku.start({ + lightpush: true, + filter: false, + relay: false, + store: false, + }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); waku = await createWaku({ @@ -151,7 +176,12 @@ describe("Wait for remote peer", function () { it("Filter", async function () { this.timeout(20_000); nwaku = new Nwaku(makeLogFileName(this)); - await nwaku.start({ filter: true }); + await nwaku.start({ + filter: true, + lightpush: false, + relay: false, + store: false, + }); const multiAddrWithId = await nwaku.getMultiaddrWithId(); waku = await createWaku({ From 2265a0099f0eddb49ec27f7a3d299b57422be57a Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 12:51:41 +1000 Subject: [PATCH 33/68] refactor: Use same code for store, lightpush and filter --- src/lib/wait_for_remote_peer.ts | 45 +++++++++------------------------ 1 file changed, 12 insertions(+), 33 deletions(-) diff --git a/src/lib/wait_for_remote_peer.ts b/src/lib/wait_for_remote_peer.ts index 9ccee6d542..826e2ea0b9 100644 --- a/src/lib/wait_for_remote_peer.ts +++ b/src/lib/wait_for_remote_peer.ts @@ -53,40 +53,16 @@ export async function waitForRemotePeer( } } - // TODO: This can be factored in one helper function - // Probably need to add a "string" protocol to each class to make it easier if (protocols.includes(Protocols.Store)) { - const storePromise = (async (): Promise => { - const peers = await waku.store.peers(); - - if (peers.length) { - log("Store peer found: ", peers[0].id.toString()); - return; - } - - await new Promise((resolve) => { - const cb = (evt: CustomEvent): void => { - for (const codec of Object.values(StoreCodecs)) { - if (evt.detail.protocols.includes(codec)) { - log("Resolving for", StoreCodecs, evt.detail.protocols); - waku.libp2p.peerStore.removeEventListener("change:protocols", cb); - resolve(); - break; - } - } - }; - waku.libp2p.peerStore.addEventListener("change:protocols", cb); - }); - })(); - promises.push(storePromise); + promises.push(waitForConnectedPeer(waku.store, Object.values(StoreCodecs))); } if (protocols.includes(Protocols.LightPush)) { - promises.push(waitForConnectedPeer(waku.lightPush, LightPushCodec)); + promises.push(waitForConnectedPeer(waku.lightPush, [LightPushCodec])); } if (protocols.includes(Protocols.Filter)) { - promises.push(waitForConnectedPeer(waku.lightPush, FilterCodec)); + promises.push(waitForConnectedPeer(waku.filter, [FilterCodec])); } if (timeoutMs) { @@ -105,21 +81,24 @@ export async function waitForRemotePeer( */ async function waitForConnectedPeer( waku: WakuProtocol, - codec: string + codecs: string[] ): Promise { const peers = await waku.peers(); if (peers.length) { - log(`${codec} peer found: `, peers[0].id.toString()); + log(`${codecs} peer found: `, peers[0].id.toString()); return; } await new Promise((resolve) => { const cb = (evt: CustomEvent): void => { - if (evt.detail.protocols.includes(codec)) { - log("Resolving for", codec, evt.detail.protocols); - waku.libp2p.peerStore.removeEventListener("change:protocols", cb); - resolve(); + for (const codec of codecs) { + if (evt.detail.protocols.includes(codec)) { + log("Resolving for", codec, evt.detail.protocols); + waku.libp2p.peerStore.removeEventListener("change:protocols", cb); + resolve(); + break; + } } }; waku.libp2p.peerStore.addEventListener("change:protocols", cb); From d7b08f7e2440050a53c072561b81da4e1275f79a Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 13:13:47 +1000 Subject: [PATCH 34/68] fix: Wait for remote peer for Waku Relay The promise resolves only if a remote peer is added to the gossipsub mesh. --- package-lock.json | 41 ++++++++++++++++++++++ package.json | 1 + src/lib/wait_for_remote_peer.node.spec.ts | 5 ++- src/lib/wait_for_remote_peer.ts | 42 +++++++++++++++-------- src/lib/waku_relay/index.ts | 5 +-- 5 files changed, 72 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index e09cd2d4f8..0447bd7b3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "js-sha3": "^0.8.0", "libp2p": "next", "multiformats": "^9.6.5", + "p-event": "^5.0.1", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", "uuid": "^8.3.2" @@ -9798,6 +9799,31 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-event": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", + "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", + "dependencies": { + "p-timeout": "^5.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-event/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-fifo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-fifo/-/p-fifo-1.0.0.tgz", @@ -20602,6 +20628,21 @@ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==" }, + "p-event": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", + "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", + "requires": { + "p-timeout": "^5.0.2" + }, + "dependencies": { + "p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==" + } + } + }, "p-fifo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-fifo/-/p-fifo-1.0.0.tgz", diff --git a/package.json b/package.json index 16e0dec3eb..2d545fc25d 100644 --- a/package.json +++ b/package.json @@ -89,6 +89,7 @@ "js-sha3": "^0.8.0", "libp2p": "next", "multiformats": "^9.6.5", + "p-event": "^5.0.1", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", "uuid": "^8.3.2" diff --git a/src/lib/wait_for_remote_peer.node.spec.ts b/src/lib/wait_for_remote_peer.node.spec.ts index 06bf3e92b3..92c1ea489a 100644 --- a/src/lib/wait_for_remote_peer.node.spec.ts +++ b/src/lib/wait_for_remote_peer.node.spec.ts @@ -36,7 +36,7 @@ describe("Wait for remote peer", function () { await waku.dial(multiAddrWithId); await delay(1000); await waitForRemotePeer(waku, [Protocols.Relay]); - const peers = waku.relay.getPeers(); + const peers = waku.relay.getMeshPeers(); const nimPeerId = multiAddrWithId.getPeerId(); expect(nimPeerId).to.not.be.undefined; @@ -64,8 +64,7 @@ describe("Wait for remote peer", function () { await waku.dial(multiAddrWithId); await waitPromise; - // TODO: Should getMeshPeers be used instead? - const peers = waku.relay.getPeers(); + const peers = waku.relay.getMeshPeers(); const nimPeerId = multiAddrWithId.getPeerId(); expect(nimPeerId).to.not.be.undefined; diff --git a/src/lib/wait_for_remote_peer.ts b/src/lib/wait_for_remote_peer.ts index 826e2ea0b9..e52d9c4139 100644 --- a/src/lib/wait_for_remote_peer.ts +++ b/src/lib/wait_for_remote_peer.ts @@ -1,6 +1,8 @@ +import type { GossipSub } from "@chainsafe/libp2p-gossipsub"; import { Peer, PeerProtocolsChangeData } from "@libp2p/interface-peer-store"; import debug from "debug"; import type { Libp2p } from "libp2p"; +import { pEvent } from "p-event"; import { StoreCodecs } from "./constants"; import { Protocols, Waku } from "./waku"; @@ -14,10 +16,18 @@ interface WakuProtocol { peers: () => Promise; } +interface WakuGossipSubProtocol extends GossipSub { + getMeshPeers: () => string[]; +} + /** * Wait for a remote peer to be ready given the passed protocols. * Useful when using the [[CreateOptions.bootstrap]] with [[Waku.create]]. * + * If the passed protocols is a GossipSub protocol, then it resolves only once + * a peer is in a mesh, to help ensure that other peers will send and receive + * message to us. + * * @param waku The Waku Node * @param protocols The protocols that need to be enabled by remote peers. * @param timeoutMs A timeout value in milliseconds.. @@ -34,23 +44,10 @@ export async function waitForRemotePeer( ): Promise { protocols = protocols ?? [Protocols.Relay]; - const promises: Promise[] = []; + const promises = []; if (protocols.includes(Protocols.Relay)) { - const peers = waku.relay.getMeshPeers(waku.relay.pubSubTopic); - - if (peers.length == 0) { - // No peer yet available, wait for a subscription - const promise = new Promise((resolve) => { - // TODO: Remove listeners once done - waku.relay.addEventListener("subscription-change", () => { - // Remote peer subscribed to topic, now wait for a heartbeat - // so that the mesh is updated and the remote peer added to it - waku.relay.addEventListener("gossipsub:heartbeat", () => resolve()); - }); - }); - promises.push(promise); - } + promises.push(waitForGossipSubPeerInMesh(waku.relay)); } if (protocols.includes(Protocols.Store)) { @@ -105,6 +102,21 @@ async function waitForConnectedPeer( }); } +/** + * Wait for a peer with the given protocol to be connected and in the gossipsub + * mesh. + */ +async function waitForGossipSubPeerInMesh( + waku: WakuGossipSubProtocol +): Promise { + let peers = waku.getMeshPeers(); + + while (peers.length == 0) { + await pEvent(waku, "gossipsub:heartbeat"); + peers = waku.getMeshPeers(); + } +} + const awaitTimeout = (ms: number, rejectReason: string): Promise => new Promise((_resolve, reject) => setTimeout(() => reject(rejectReason), ms)); diff --git a/src/lib/waku_relay/index.ts b/src/lib/waku_relay/index.ts index a46ce15407..297bfd3fdc 100644 --- a/src/lib/waku_relay/index.ts +++ b/src/lib/waku_relay/index.ts @@ -210,9 +210,6 @@ export class WakuRelay extends GossipSub { } getMeshPeers(topic?: TopicStr): PeerIdStr[] { - return super.getMeshPeers(topic ?? DefaultPubSubTopic); + return super.getMeshPeers(topic ?? this.pubSubTopic); } - - // TODO: Implement method that uses Relay codec - // public async heartbeat(): Promise { } From 9965ba9059a138c1968c99aa9df15044b03e5c86 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 13:17:16 +1000 Subject: [PATCH 35/68] chore: bump @libp2p/mplex to 4.0.1 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0447bd7b3b..431d150425 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@libp2p/interface-peer-info": "^1.0.1", "@libp2p/interface-peer-store": "^1.0.0", "@libp2p/interfaces": "^3.0.2", - "@libp2p/mplex": "^4.0.0", + "@libp2p/mplex": "^4.0.1", "@libp2p/peer-id": "^1.1.10", "@libp2p/websockets": "^3.0.0", "@multiformats/multiaddr": "^10.2.0", @@ -1638,9 +1638,9 @@ } }, "node_modules/@libp2p/mplex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-4.0.0.tgz", - "integrity": "sha512-Y9D0p1B7DBWpBL1RGOCPGcj9YzT4yNtzaX0uAMYVLPL97CAPSc84ZMUfPpVjqVpXrdFmZOVpBZ0r00tnIPQXjQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-4.0.1.tgz", + "integrity": "sha512-LOs5xEPjY10Bq98q1Ipa4/PQ83uj6i/JkvaAZ85/hgiqLrfVYkqs31AF0G35DgvM1eaVjmJoE7f1u4UHKaCEMQ==", "dependencies": { "@libp2p/components": "^2.0.0", "@libp2p/interface-connection": "^2.0.0", @@ -14383,9 +14383,9 @@ } }, "@libp2p/mplex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-4.0.0.tgz", - "integrity": "sha512-Y9D0p1B7DBWpBL1RGOCPGcj9YzT4yNtzaX0uAMYVLPL97CAPSc84ZMUfPpVjqVpXrdFmZOVpBZ0r00tnIPQXjQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-4.0.1.tgz", + "integrity": "sha512-LOs5xEPjY10Bq98q1Ipa4/PQ83uj6i/JkvaAZ85/hgiqLrfVYkqs31AF0G35DgvM1eaVjmJoE7f1u4UHKaCEMQ==", "requires": { "@libp2p/components": "^2.0.0", "@libp2p/interface-connection": "^2.0.0", diff --git a/package.json b/package.json index 2d545fc25d..fc1c3fbe35 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "@libp2p/interface-peer-info": "^1.0.1", "@libp2p/interface-peer-store": "^1.0.0", "@libp2p/interfaces": "^3.0.2", - "@libp2p/mplex": "^4.0.0", + "@libp2p/mplex": "^4.0.1", "@libp2p/peer-id": "^1.1.10", "@libp2p/websockets": "^3.0.0", "@multiformats/multiaddr": "^10.2.0", From ee12ec0ab54ea2c82c945265da84689f91371d6a Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 13:17:47 +1000 Subject: [PATCH 36/68] chore: bump dns-query to 0.11.2 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 431d150425..971bb12075 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "@multiformats/multiaddr": "^10.2.0", "@noble/secp256k1": "^1.3.4", "debug": "^4.3.4", - "dns-query": "^0.11.1", + "dns-query": "^0.11.2", "hi-base32": "^0.5.1", "it-all": "^1.0.6", "it-length-prefixed": "^7.0.1", @@ -5076,9 +5076,9 @@ } }, "node_modules/dns-query": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/dns-query/-/dns-query-0.11.1.tgz", - "integrity": "sha512-ZdXl7HdLa23JqpAj8EdUg/oO9qwlDvWf2iY/cFCTHF6deJWv/xglgs3WrvTz9/Ig3NGv5lF4FIZjURl2FUvFog==", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/dns-query/-/dns-query-0.11.2.tgz", + "integrity": "sha512-zF8qxQpqCB467o4A63DLpQClo77H642JEKMx0Ra9GFww7Rx0234Fo8NoG0LBoSBZxamWkXfLxhzDG19bTBHvXQ==", "dependencies": { "@leichtgewicht/base64-codec": "^1.0.0", "@leichtgewicht/dns-packet": "^6.0.2", @@ -17067,9 +17067,9 @@ } }, "dns-query": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/dns-query/-/dns-query-0.11.1.tgz", - "integrity": "sha512-ZdXl7HdLa23JqpAj8EdUg/oO9qwlDvWf2iY/cFCTHF6deJWv/xglgs3WrvTz9/Ig3NGv5lF4FIZjURl2FUvFog==", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/dns-query/-/dns-query-0.11.2.tgz", + "integrity": "sha512-zF8qxQpqCB467o4A63DLpQClo77H642JEKMx0Ra9GFww7Rx0234Fo8NoG0LBoSBZxamWkXfLxhzDG19bTBHvXQ==", "requires": { "@leichtgewicht/base64-codec": "^1.0.0", "@leichtgewicht/dns-packet": "^6.0.2", diff --git a/package.json b/package.json index fc1c3fbe35..74714ac600 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "@multiformats/multiaddr": "^10.2.0", "@noble/secp256k1": "^1.3.4", "debug": "^4.3.4", - "dns-query": "^0.11.1", + "dns-query": "^0.11.2", "hi-base32": "^0.5.1", "it-all": "^1.0.6", "it-length-prefixed": "^7.0.1", From ba1c7b86ea31e8dda1add9b25d4fce7c07f29689 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 16:33:23 +1000 Subject: [PATCH 37/68] fix: Use libp2p options passed to `createWaku` --- src/lib/waku.ts | 25 +++++++++++++------------ src/lib/waku_filter/index.ts | 1 + src/lib/waku_relay/index.node.spec.ts | 10 ++++++---- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/lib/waku.ts b/src/lib/waku.ts index dc44e705b7..08c4d20e4d 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -90,25 +90,26 @@ export async function createWaku(options?: CreateOptions): Promise { peerDiscovery.push(new Bootstrap(options?.bootstrap)); } - // TODO: Use options - const libp2pOpts = { - transports: [new WebSockets({ filter: filterAll })], - streamMuxers: [new Mplex()], - pubsub: new WakuRelay(), - connectionEncryption: [new Noise()], - }; + const libp2pOpts = Object.assign( + { + transports: [new WebSockets({ filter: filterAll })], + streamMuxers: [new Mplex()], + pubsub: new WakuRelay(options), + connectionEncryption: [new Noise()], + }, + options?.libp2p ?? {} + ); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore: modules property is correctly set thanks to voodoo const libp2p = await createLibp2p(libp2pOpts); - const wakuStore = new WakuStore(libp2p); - const wakuLightPush = new WakuLightPush(libp2p); + const wakuStore = new WakuStore(libp2p, options); + const wakuLightPush = new WakuLightPush(libp2p, options); + // TODO pass options const wakuFilter = new WakuFilter(libp2p); await libp2p.start(); - return new Waku({}, libp2p, wakuStore, wakuLightPush, wakuFilter); + return new Waku(options ?? {}, libp2p, wakuStore, wakuLightPush, wakuFilter); } export class Waku { diff --git a/src/lib/waku_filter/index.ts b/src/lib/waku_filter/index.ts index e8cf13e255..c577f5d5b1 100644 --- a/src/lib/waku_filter/index.ts +++ b/src/lib/waku_filter/index.ts @@ -49,6 +49,7 @@ export class WakuFilter { { method?: DecryptionMethod; contentTopics?: string[] } >; + // TODO: Accept options (pubsubtopic) constructor(public libp2p: Libp2p) { this.subscriptions = new Map(); this.decryptionKeys = new Map(); diff --git a/src/lib/waku_relay/index.node.spec.ts b/src/lib/waku_relay/index.node.spec.ts index d99ee00a5c..5cdd75e296 100644 --- a/src/lib/waku_relay/index.node.spec.ts +++ b/src/lib/waku_relay/index.node.spec.ts @@ -71,10 +71,12 @@ describe("Waku Relay [node only]", () => { it("Subscribe", async function () { log("Getting subscribers"); - const subscribers1 = - waku1.libp2p.pubsub.getSubscribers(DefaultPubSubTopic); - const subscribers2 = - waku2.libp2p.pubsub.getSubscribers(DefaultPubSubTopic); + const subscribers1 = waku1.libp2p.pubsub + .getSubscribers(DefaultPubSubTopic) + .map((p) => p.toString()); + const subscribers2 = waku2.libp2p.pubsub + .getSubscribers(DefaultPubSubTopic) + .map((p) => p.toString()); log("Asserting mutual subscription"); expect(subscribers1).to.contain(waku2.libp2p.peerId.toString()); From 991a1cf7478496296343d7c83ff5acafa4922739 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 16:51:33 +1000 Subject: [PATCH 38/68] fix(test): ensure nodes are cleaned up, use separate noise key --- src/lib/waku_relay/index.node.spec.ts | 19 ++++++++++++++++--- src/test_utils/constants.ts | 10 ++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/lib/waku_relay/index.node.spec.ts b/src/lib/waku_relay/index.node.spec.ts index 5cdd75e296..2cc09fd097 100644 --- a/src/lib/waku_relay/index.node.spec.ts +++ b/src/lib/waku_relay/index.node.spec.ts @@ -6,6 +6,7 @@ import { makeLogFileName, NOISE_KEY_1, NOISE_KEY_2, + NOISE_KEY_3, Nwaku, } from "../../test_utils"; import { delay } from "../../test_utils/delay"; @@ -256,13 +257,26 @@ describe("Waku Relay [node only]", () => { }); describe("Custom pubsub topic", () => { + let waku1: Waku; + let waku2: Waku; + let waku3: Waku; + afterEach(async function () { + !!waku1 && + waku1.stop().catch((e) => console.log("Waku failed to stop", e)); + !!waku2 && + waku2.stop().catch((e) => console.log("Waku failed to stop", e)); + !!waku3 && + waku3.stop().catch((e) => console.log("Waku failed to stop", e)); + }); + it("Publish", async function () { this.timeout(10000); const pubSubTopic = "/some/pubsub/topic"; // 1 and 2 uses a custom pubsub - const [waku1, waku2, waku3] = await Promise.all([ + // 3 uses the default pubsub + [waku1, waku2, waku3] = await Promise.all([ createWaku({ pubSubTopic: pubSubTopic, staticNoiseKey: NOISE_KEY_1, @@ -273,7 +287,7 @@ describe("Waku Relay [node only]", () => { libp2p: { addresses: { listen: ["/ip4/0.0.0.0/tcp/0/ws"] } }, }).then((waku) => waku.start().then(() => waku)), createWaku({ - staticNoiseKey: NOISE_KEY_2, + staticNoiseKey: NOISE_KEY_3, }).then((waku) => waku.start().then(() => waku)), ]); @@ -289,7 +303,6 @@ describe("Waku Relay [node only]", () => { await Promise.all([ waitForRemotePeer(waku1, [Protocols.Relay]), waitForRemotePeer(waku2, [Protocols.Relay]), - // No subscription change expected for Waku 3 ]); const messageText = "Communicating using a custom pubsub topic"; diff --git a/src/test_utils/constants.ts b/src/test_utils/constants.ts index ca2bd3b523..82dc1e01fd 100644 --- a/src/test_utils/constants.ts +++ b/src/test_utils/constants.ts @@ -24,3 +24,13 @@ export const NOISE_KEY_2 = new Uint8Array( return b; })() ); + +export const NOISE_KEY_3 = new Uint8Array( + ((): number[] => { + const b = []; + for (let i = 0; i < 32; i++) { + b.push(3); + } + return b; + })() +); From a3e6850b2f56cef89216762a2df4bad5b376debb Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 16:53:46 +1000 Subject: [PATCH 39/68] fix(test): compare peer ids using string format --- src/lib/waku_relay/index.node.spec.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/waku_relay/index.node.spec.ts b/src/lib/waku_relay/index.node.spec.ts index 2cc09fd097..1670c1f9cb 100644 --- a/src/lib/waku_relay/index.node.spec.ts +++ b/src/lib/waku_relay/index.node.spec.ts @@ -367,7 +367,9 @@ describe("Waku Relay [node only]", () => { } const nimPeerId = await nwaku.getPeerId(); - expect(subscribers).to.contain(nimPeerId.toString()); + expect(subscribers.map((p) => p.toString())).to.contain( + nimPeerId.toString() + ); }); it("Publishes to nwaku", async function () { From 4a193e49e041e29c45f1381d6fb9160fd83d15b2 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 17:04:41 +1000 Subject: [PATCH 40/68] style: use nullish coalescing instead of if/then --- src/lib/waku_light_push/index.ts | 6 +----- src/lib/waku_relay/index.ts | 2 +- src/lib/waku_store/index.ts | 6 +----- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/lib/waku_light_push/index.ts b/src/lib/waku_light_push/index.ts index e598087fed..b4fdf4fe35 100644 --- a/src/lib/waku_light_push/index.ts +++ b/src/lib/waku_light_push/index.ts @@ -40,11 +40,7 @@ export class WakuLightPush { pubSubTopic: string; constructor(public libp2p: Libp2p, options?: CreateOptions) { - if (options?.pubSubTopic) { - this.pubSubTopic = options.pubSubTopic; - } else { - this.pubSubTopic = DefaultPubSubTopic; - } + this.pubSubTopic = options?.pubSubTopic ?? DefaultPubSubTopic; } async push( diff --git a/src/lib/waku_relay/index.ts b/src/lib/waku_relay/index.ts index 297bfd3fdc..5d2bd454d3 100644 --- a/src/lib/waku_relay/index.ts +++ b/src/lib/waku_relay/index.ts @@ -55,7 +55,7 @@ export class WakuRelay extends GossipSub { this.observers = {}; this.decryptionKeys = new Map(); - this.pubSubTopic = options?.pubSubTopic || DefaultPubSubTopic; + this.pubSubTopic = options?.pubSubTopic ?? DefaultPubSubTopic; options?.decryptionKeys?.forEach((key) => { this.addDecryptionKey(key); diff --git a/src/lib/waku_store/index.ts b/src/lib/waku_store/index.ts index 3fa4d2dfe6..39e441ea64 100644 --- a/src/lib/waku_store/index.ts +++ b/src/lib/waku_store/index.ts @@ -103,11 +103,7 @@ export class WakuStore { >; constructor(public libp2p: Libp2p, options?: CreateOptions) { - if (options?.pubSubTopic) { - this.pubSubTopic = options.pubSubTopic; - } else { - this.pubSubTopic = DefaultPubSubTopic; - } + this.pubSubTopic = options?.pubSubTopic ?? DefaultPubSubTopic; this.decryptionKeys = new Map(); } From d18a5152efc61302e0d70a0a8b2611507b47f872 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 17:11:36 +1000 Subject: [PATCH 41/68] fix(test): check messages on custom pubsub topic --- src/lib/waku_light_push/index.node.spec.ts | 2 +- src/test_utils/nwaku.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/waku_light_push/index.node.spec.ts b/src/lib/waku_light_push/index.node.spec.ts index d67a59c223..1ea42c49a5 100644 --- a/src/lib/waku_light_push/index.node.spec.ts +++ b/src/lib/waku_light_push/index.node.spec.ts @@ -90,7 +90,7 @@ describe("Waku Light Push [node only]", () => { dbg("Waiting for message to show in nwaku"); while (msgs.length === 0) { await delay(200); - msgs = await nwaku.messages(); + msgs = await nwaku.messages(customPubSubTopic); } expect(msgs[0].contentTopic).to.equal(message.contentTopic); diff --git a/src/test_utils/nwaku.ts b/src/test_utils/nwaku.ts index 8633a3fc45..7b6c7acc35 100644 --- a/src/test_utils/nwaku.ts +++ b/src/test_utils/nwaku.ts @@ -217,7 +217,7 @@ export class Nwaku { ]); } - async messages(): Promise { + async messages(pubsubTopic?: string): Promise { this.checkProcess(); const isDefined = (msg: WakuMessage | undefined): msg is WakuMessage => { @@ -226,7 +226,7 @@ export class Nwaku { const protoMsgs = await this.rpcCall( "get_waku_v2_relay_v1_messages", - [DefaultPubSubTopic] + [pubsubTopic ?? DefaultPubSubTopic] ); const msgs = await Promise.all( From 275eb72959de2ebcf9caea1a8e263783f7b0b300 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 19:12:20 +1000 Subject: [PATCH 42/68] fix: ignore store response unspecified error --- src/lib/waku_store/index.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lib/waku_store/index.ts b/src/lib/waku_store/index.ts index 39e441ea64..2d09c4c911 100644 --- a/src/lib/waku_store/index.ts +++ b/src/lib/waku_store/index.ts @@ -8,6 +8,7 @@ import { Libp2p } from "libp2p"; import { concat } from "uint8arrays/concat"; import * as protoV2Beta4 from "../../proto/store_v2beta4"; +import { HistoryResponse } from "../../proto/store_v2beta4"; import { DefaultPubSubTopic, StoreCodecs } from "../constants"; import { getPeersForProtocol, selectRandomPeer } from "../select_peer"; import { hexToBytes } from "../utils"; @@ -15,6 +16,8 @@ import { DecryptionMethod, WakuMessage } from "../waku_message"; import { HistoryRPC, PageDirection } from "./history_rpc"; +import Error = HistoryResponse.Error; + const dbg = debug("waku:store"); export const DefaultPageSize = 10; @@ -218,8 +221,8 @@ export class WakuStore { const response = reply.response as protoV2Beta4.HistoryResponse; - if (response.error) { - throw "History response contains an Error" + response.error; + if (response.error && response.error !== Error.ERROR_NONE_UNSPECIFIED) { + throw "History response contains an Error: " + response.error; } if (!response.messages || !response.messages.length) { From 8922511cc9fb181d007a5ffeddccd365090bb2cb Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 20:28:52 +1000 Subject: [PATCH 43/68] fix: pass pubsub topic when creating waku filter --- src/lib/waku.ts | 3 +-- src/lib/waku_filter/index.ts | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/lib/waku.ts b/src/lib/waku.ts index 08c4d20e4d..2e8e21d558 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -104,8 +104,7 @@ export async function createWaku(options?: CreateOptions): Promise { const wakuStore = new WakuStore(libp2p, options); const wakuLightPush = new WakuLightPush(libp2p, options); - // TODO pass options - const wakuFilter = new WakuFilter(libp2p); + const wakuFilter = new WakuFilter(libp2p, options); await libp2p.start(); diff --git a/src/lib/waku_filter/index.ts b/src/lib/waku_filter/index.ts index c577f5d5b1..8150733c2a 100644 --- a/src/lib/waku_filter/index.ts +++ b/src/lib/waku_filter/index.ts @@ -20,6 +20,18 @@ export const FilterCodec = "/vac/waku/filter/2.0.0-beta1"; const log = debug("waku:filter"); +export interface CreateOptions { + /** + * The PubSub Topic to use. Defaults to {@link DefaultPubSubTopic}. + * + * The usage of the default pubsub topic is recommended. + * See [Waku v2 Topic Usage Recommendations](https://rfc.vac.dev/spec/23/) for details. + * + * @default {@link DefaultPubSubTopic} + */ + pubSubTopic?: string; +} + type FilterSubscriptionOpts = { /** * The Pubsub topic for the subscription @@ -43,16 +55,17 @@ type UnsubscribeFunction = () => Promise; * - https://github.com/status-im/nwaku/issues/948 */ export class WakuFilter { + pubSubTopic: string; private subscriptions: Map; public decryptionKeys: Map< Uint8Array, { method?: DecryptionMethod; contentTopics?: string[] } >; - // TODO: Accept options (pubsubtopic) - constructor(public libp2p: Libp2p) { + constructor(public libp2p: Libp2p, options?: CreateOptions) { this.subscriptions = new Map(); this.decryptionKeys = new Map(); + this.pubSubTopic = options?.pubSubTopic ?? DefaultPubSubTopic; this.libp2p .handle(FilterCodec, this.onRequest.bind(this)) .catch((e) => log("Failed to register filter protocol", e)); @@ -69,7 +82,7 @@ export class WakuFilter { contentTopics: string[], opts?: FilterSubscriptionOpts ): Promise { - const topic = opts?.pubsubTopic || DefaultPubSubTopic; + const topic = opts?.pubsubTopic ?? this.pubSubTopic; const contentFilters = contentTopics.map((contentTopic) => ({ contentTopic, })); From e119fc46d6838d914c8c6b09421b4e24c3b62526 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Mon, 25 Jul 2022 20:33:26 +1000 Subject: [PATCH 44/68] fix: pass bootstrap to libp2p instance --- src/lib/waku.node.spec.ts | 2 +- src/lib/waku.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib/waku.node.spec.ts b/src/lib/waku.node.spec.ts index 76fae32f26..50826acdf3 100644 --- a/src/lib/waku.node.spec.ts +++ b/src/lib/waku.node.spec.ts @@ -58,7 +58,7 @@ describe("Waku Dial [node only]", function () { nwaku = new Nwaku(makeLogFileName(this)); await nwaku.start(); const multiAddrWithId = await nwaku.getMultiaddrWithId(); - + console.log(multiAddrWithId); waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, bootstrap: { peers: [multiAddrWithId] }, diff --git a/src/lib/waku.ts b/src/lib/waku.ts index 2e8e21d558..942cee0372 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -96,6 +96,7 @@ export async function createWaku(options?: CreateOptions): Promise { streamMuxers: [new Mplex()], pubsub: new WakuRelay(options), connectionEncryption: [new Noise()], + peerDiscovery: peerDiscovery, }, options?.libp2p ?? {} ); From 5c022da3ea8b13532cf9f2af8100c0eb4e9ef9d8 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Tue, 26 Jul 2022 14:36:33 +1000 Subject: [PATCH 45/68] refactor(test): include webpack config in karma config So it is clear that this webpack config is only necessary for Karma. --- karma.conf.cjs | 53 +++++++++++++++++++++++++++++----------------- webpack.config.cjs | 50 ------------------------------------------- 2 files changed, 34 insertions(+), 69 deletions(-) delete mode 100644 webpack.config.cjs diff --git a/karma.conf.cjs b/karma.conf.cjs index 2852c6faca..120da4a175 100644 --- a/karma.conf.cjs +++ b/karma.conf.cjs @@ -1,34 +1,49 @@ -process.env.CHROME_BIN = require("puppeteer").executablePath(); -const webpackConfig = require("./webpack.config.cjs"); -const webpack = require("webpack"); +process.env.CHROME_BIN = require('puppeteer').executablePath(); +const webpack = require('webpack'); -module.exports = function (config) { +module.exports = function(config) { config.set({ - frameworks: ["webpack", "mocha"], - files: ["src/lib/**/!(node).spec.ts"], + frameworks: ['webpack', 'mocha'], + files: ['src/lib/**/!(node).spec.ts'], preprocessors: { - "src/lib/**/!(node).spec.ts": ["webpack"], + 'src/lib/**/!(node).spec.ts': ['webpack'] }, - envPreprocessor: ["CI"], - reporters: ["progress"], - browsers: ["ChromeHeadless"], + envPreprocessor: ['CI'], + reporters: ['progress'], + browsers: ['ChromeHeadless'], singleRun: true, client: { mocha: { - timeout: 6000, // Default is 2s - }, + timeout: 6000 // Default is 2s + } }, webpack: { - mode: "production", - module: webpackConfig.module, + mode: 'production', + module: { + rules: [ + { + test: /\.(js|tsx?)$/, + use: 'ts-loader', + exclude: /(node_modules)|(node\.spec\.ts)/ + }, + { + test: /node\.spec\.ts$/, + use: 'ignore-loader' + } + ] + }, plugins: [ new webpack.DefinePlugin({ - "process.env.CI": process.env.CI || false, + 'process.env.CI': process.env.CI || false }), - ...webpackConfig.plugins, + new webpack.ProvidePlugin({ + process: 'process/browser.js' + }) ], - resolve: webpackConfig.resolve, - stats: { warnings: false }, - }, + resolve: { + extensions: ['.ts', '.js'] + }, + stats: { warnings: false } + } }); }; diff --git a/webpack.config.cjs b/webpack.config.cjs deleted file mode 100644 index 62b1cac614..0000000000 --- a/webpack.config.cjs +++ /dev/null @@ -1,50 +0,0 @@ -const webpack = require("webpack"); -const path = require("path"); - -module.exports = { - mode: "development", - entry: { - "js-waku": "./src/index.ts", - }, - devtool: "inline-source-map", - module: { - rules: [ - { - test: /\.(js|tsx?)$/, - use: "ts-loader", - exclude: /(node_modules)|(node\.spec\.ts)/, - }, - { - test: /node\.spec\.ts$/, - use: "ignore-loader", - }, - ], - }, - plugins: [ - new webpack.ProvidePlugin({ - process: "process/browser.js", - Buffer: ["buffer", "Buffer"], - }), - ], - resolve: { - extensions: [".ts", ".js"], - fallback: { - buffer: require.resolve("buffer/"), - crypto: false, - stream: require.resolve("stream-browserify"), - }, - }, - output: { - filename: "[name].js", - path: path.resolve(__dirname, "build/umd"), - library: "jswaku", - libraryTarget: "umd", - globalObject: "this", - }, - optimization: { - splitChunks: { - name: "vendors", - chunks: "all", - }, - }, -}; From 4054f6a7518ef8bfa3c1673bafeed5c2825b3a64 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Tue, 26 Jul 2022 14:40:40 +1000 Subject: [PATCH 46/68] style: format karma conf --- karma.conf.cjs | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/karma.conf.cjs b/karma.conf.cjs index 120da4a175..192cea1200 100644 --- a/karma.conf.cjs +++ b/karma.conf.cjs @@ -1,49 +1,49 @@ -process.env.CHROME_BIN = require('puppeteer').executablePath(); -const webpack = require('webpack'); +process.env.CHROME_BIN = require("puppeteer").executablePath(); +const webpack = require("webpack"); -module.exports = function(config) { +module.exports = function (config) { config.set({ - frameworks: ['webpack', 'mocha'], - files: ['src/lib/**/!(node).spec.ts'], + frameworks: ["webpack", "mocha"], + files: ["src/lib/**/!(node).spec.ts"], preprocessors: { - 'src/lib/**/!(node).spec.ts': ['webpack'] + "src/lib/**/!(node).spec.ts": ["webpack"], }, - envPreprocessor: ['CI'], - reporters: ['progress'], - browsers: ['ChromeHeadless'], + envPreprocessor: ["CI"], + reporters: ["progress"], + browsers: ["ChromeHeadless"], singleRun: true, client: { mocha: { - timeout: 6000 // Default is 2s - } + timeout: 6000, // Default is 2s + }, }, webpack: { - mode: 'production', + mode: "production", module: { rules: [ { test: /\.(js|tsx?)$/, - use: 'ts-loader', - exclude: /(node_modules)|(node\.spec\.ts)/ + use: "ts-loader", + exclude: /(node_modules)|(node\.spec\.ts)/, }, { test: /node\.spec\.ts$/, - use: 'ignore-loader' - } - ] + use: "ignore-loader", + }, + ], }, plugins: [ new webpack.DefinePlugin({ - 'process.env.CI': process.env.CI || false + "process.env.CI": process.env.CI || false, }), new webpack.ProvidePlugin({ - process: 'process/browser.js' - }) + process: "process/browser.js", + }), ], resolve: { - extensions: ['.ts', '.js'] + extensions: [".ts", ".js"], }, - stats: { warnings: false } - } + stats: { warnings: false }, + }, }); }; From d2703d081e775aa45a502843cdaaf9b8dabbfd84 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Tue, 26 Jul 2022 14:59:48 +1000 Subject: [PATCH 47/68] feat!: remove cjs build --- package.json | 6 +----- rollup.cjs.config.js | 21 --------------------- 2 files changed, 1 insertion(+), 26 deletions(-) delete mode 100644 rollup.cjs.config.js diff --git a/package.json b/package.json index 74714ac600..61a7f0e6d2 100644 --- a/package.json +++ b/package.json @@ -3,13 +3,11 @@ "version": "0.24.0", "description": "TypeScript implementation of the Waku v2 protocol", "types": "./dist/esm/index.d.ts", - "main": "./dist/cjs/index.cjs", "module": "./dist/esm/index.js", "exports": { ".": { "types": "./dist/esm/index.d.ts", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.cjs" + "import": "./dist/esm/index.js" } }, "type": "module", @@ -27,7 +25,6 @@ "prepare": "husky install", "build": "rimraf ./dist; run-s build:**", "build:esm": "tsc && node build-scripts/fix-imports.js", - "build:cjs": "rollup --config rollup.cjs.config.js -- dist/esm/index.js", "build:umd": "webpack --config webpack.umd.config.cjs", "build:umd:min": "terser --ecma 6 --compress --mangle -o dist/umd/index.min.js -- dist/umd/index.js && gzip -9 -c dist/umd/index.min.js > dist/umd/index.min.js.gz", "size": "npm run build && size-limit", @@ -157,7 +154,6 @@ }, "files": [ "dist/esm", - "dist/cjs", "dist/umd", "src/*.ts", "src/lib/**/*.ts", diff --git a/rollup.cjs.config.js b/rollup.cjs.config.js deleted file mode 100644 index 7c8f189ab3..0000000000 --- a/rollup.cjs.config.js +++ /dev/null @@ -1,21 +0,0 @@ -import { nodeResolve } from "@rollup/plugin-node-resolve"; -import commonjs from "@rollup/plugin-commonjs"; -import json from "@rollup/plugin-json"; -import nodePolyfills from "rollup-plugin-polyfill-node"; - -export default { - output: { - file: "dist/cjs/index.cjs", - format: "cjs", - name: "waku", - }, - plugins: [ - commonjs(), - json(), - nodePolyfills(), - nodeResolve({ - browser: true, - preferBuiltins: false, - }), - ], -}; From 338e3c9964d970a78ae77af739913b4df6a65f53 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Tue, 26 Jul 2022 15:00:24 +1000 Subject: [PATCH 48/68] feat: add esm bundling --- package.json | 1 + rollup.config.js | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 61a7f0e6d2..d6a8aaeb7b 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "prepare": "husky install", "build": "rimraf ./dist; run-s build:**", "build:esm": "tsc && node build-scripts/fix-imports.js", + "build:bundle": "rollup --config rollup.config.js -- dist/esm/index.js", "build:umd": "webpack --config webpack.umd.config.cjs", "build:umd:min": "terser --ecma 6 --compress --mangle -o dist/umd/index.min.js -- dist/umd/index.js && gzip -9 -c dist/umd/index.min.js > dist/umd/index.min.js.gz", "size": "npm run build && size-limit", diff --git a/rollup.config.js b/rollup.config.js index 90f804398f..7a7d2a312b 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -5,8 +5,8 @@ import nodePolyfills from "rollup-plugin-polyfill-node"; export default { output: { - file: "dist/umd/index.js", - format: "umd", + file: "dist/bundle.js", + format: "esm", name: "waku", }, plugins: [ From c4f1d90c7b7db3fc1bb85f8133f4f19623a4a1b4 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Tue, 26 Jul 2022 15:03:19 +1000 Subject: [PATCH 49/68] fix: no need to append `.js` to import for external packages --- build-scripts/fix-imports.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-scripts/fix-imports.js b/build-scripts/fix-imports.js index 8eaee14d6c..e7886a921c 100644 --- a/build-scripts/fix-imports.js +++ b/build-scripts/fix-imports.js @@ -3,7 +3,7 @@ import fs from "fs"; const START_PATH = path.join(process.cwd(), "dist/esm"); const IMPORT_REGEXP = - /^((import|export) [^';]* from "(@[^";]+\/)?([^@";]*\/[^";]*)[^";]*)"/g; + /^((import|export) [^';]* from "(\.[^@";]*\/[^";]*)[^";]*)"/g; const JUST_ADD_AN_EXTENSION = '$1.js"'; const ADD_INDEX_FILE = '$1/index.js"'; const JS_EXT = ".js"; @@ -36,7 +36,7 @@ function fixImportsAtFile(filePath) { } const [_, importPath] = l.split(`"`); - let exists = true; + let exists; let fullPath; if (importPath.startsWith(".")) { fullPath = path.join(filePath, "..", importPath); From 50890b5206c726d8ff72ddb0fa0b3e8c731f19fe Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Tue, 26 Jul 2022 15:07:12 +1000 Subject: [PATCH 50/68] feat: remove umd build, minimize esm bundle --- package.json | 4 +--- webpack.umd.config.cjs | 40 ---------------------------------------- 2 files changed, 1 insertion(+), 43 deletions(-) delete mode 100644 webpack.umd.config.cjs diff --git a/package.json b/package.json index d6a8aaeb7b..425fc40126 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,7 @@ "build": "rimraf ./dist; run-s build:**", "build:esm": "tsc && node build-scripts/fix-imports.js", "build:bundle": "rollup --config rollup.config.js -- dist/esm/index.js", - "build:umd": "webpack --config webpack.umd.config.cjs", - "build:umd:min": "terser --ecma 6 --compress --mangle -o dist/umd/index.min.js -- dist/umd/index.js && gzip -9 -c dist/umd/index.min.js > dist/umd/index.min.js.gz", + "build:bundle:min": "terser --ecma 11 --compress --mangle -o dist/bundle.min.js -- dist/bundle.js && gzip -9 -c dist/bundle.min.js > dist/bundle.min.js.gz", "size": "npm run build && size-limit", "fix": "run-s fix:*", "fix:prettier": "prettier \"src/**/*.ts\" \"./*.json\" \"*.*js\" \".github/**/*.yml\" --write", @@ -155,7 +154,6 @@ }, "files": [ "dist/esm", - "dist/umd", "src/*.ts", "src/lib/**/*.ts", "src/proto/**/*.ts", diff --git a/webpack.umd.config.cjs b/webpack.umd.config.cjs deleted file mode 100644 index 1fa2c884e7..0000000000 --- a/webpack.umd.config.cjs +++ /dev/null @@ -1,40 +0,0 @@ -const webpack = require("webpack"); -const path = require("path"); - -module.exports = { - mode: "production", - entry: { - "js-waku": "./src/index.ts", - }, - devtool: "inline-source-map", - module: { - rules: [ - { - test: /\.ts$/, - use: "ts-loader", - exclude: /node_modules/, - }, - ], - }, - plugins: [ - new webpack.ProvidePlugin({ - process: "process/browser.js", - Buffer: ["buffer", "Buffer"], - }), - ], - resolve: { - extensions: [".ts", ".js"], - fallback: { - buffer: require.resolve("buffer/"), - crypto: false, - stream: require.resolve("stream-browserify"), - }, - }, - output: { - filename: "index.js", - path: path.resolve(__dirname, "dist/umd"), - library: "waku", - libraryTarget: "umd", - globalObject: "this", - }, -}; From 785a220dffe5673295a4fe76b66bffaa379064bc Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Tue, 26 Jul 2022 15:09:22 +1000 Subject: [PATCH 51/68] fix: remove unused stream-browserify --- package-lock.json | 21 --------------------- package.json | 1 - 2 files changed, 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 971bb12075..2138f31113 100644 --- a/package-lock.json +++ b/package-lock.json @@ -88,7 +88,6 @@ "rollup": "^2.75.0", "rollup-plugin-polyfill-node": "^0.10.1", "size-limit": "^7.0.8", - "stream-browserify": "^3.0.0", "tail": "^2.2.0", "terser": "^5.13.1", "ts-loader": "^9.2.6", @@ -11526,16 +11525,6 @@ "node": ">= 0.6" } }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "dev": true, - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, "node_modules/streamroller": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", @@ -21884,16 +21873,6 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, - "stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "dev": true, - "requires": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, "streamroller": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", diff --git a/package.json b/package.json index 425fc40126..c2c474a8d0 100644 --- a/package.json +++ b/package.json @@ -142,7 +142,6 @@ "rollup": "^2.75.0", "rollup-plugin-polyfill-node": "^0.10.1", "size-limit": "^7.0.8", - "stream-browserify": "^3.0.0", "tail": "^2.2.0", "terser": "^5.13.1", "ts-loader": "^9.2.6", From 94a21bc75e9906e74cf125614f45a5d767f126bc Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Tue, 26 Jul 2022 15:18:03 +1000 Subject: [PATCH 52/68] feat! remove esm package folder --- build-scripts/fix-imports.js | 2 +- package.json | 12 ++++++------ tsconfig.json | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build-scripts/fix-imports.js b/build-scripts/fix-imports.js index e7886a921c..31562e9046 100644 --- a/build-scripts/fix-imports.js +++ b/build-scripts/fix-imports.js @@ -1,7 +1,7 @@ import path from "path"; import fs from "fs"; -const START_PATH = path.join(process.cwd(), "dist/esm"); +const START_PATH = path.join(process.cwd(), "dist/"); const IMPORT_REGEXP = /^((import|export) [^';]* from "(\.[^@";]*\/[^";]*)[^";]*)"/g; const JUST_ADD_AN_EXTENSION = '$1.js"'; diff --git a/package.json b/package.json index c2c474a8d0..f6632bcbf1 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,12 @@ "name": "js-waku", "version": "0.24.0", "description": "TypeScript implementation of the Waku v2 protocol", - "types": "./dist/esm/index.d.ts", - "module": "./dist/esm/index.js", + "types": "./dist/index.d.ts", + "module": "./dist/index.js", "exports": { ".": { - "types": "./dist/esm/index.d.ts", - "import": "./dist/esm/index.js" + "types": "./dist/index.d.ts", + "import": "./dist/index.js" } }, "type": "module", @@ -25,7 +25,7 @@ "prepare": "husky install", "build": "rimraf ./dist; run-s build:**", "build:esm": "tsc && node build-scripts/fix-imports.js", - "build:bundle": "rollup --config rollup.config.js -- dist/esm/index.js", + "build:bundle": "rollup --config rollup.config.js -- dist/index.js", "build:bundle:min": "terser --ecma 11 --compress --mangle -o dist/bundle.min.js -- dist/bundle.js && gzip -9 -c dist/bundle.min.js > dist/bundle.min.js.gz", "size": "npm run build && size-limit", "fix": "run-s fix:*", @@ -152,7 +152,7 @@ "webpack-cli": "^4.10.0" }, "files": [ - "dist/esm", + "dist", "src/*.ts", "src/lib/**/*.ts", "src/proto/**/*.ts", diff --git a/tsconfig.json b/tsconfig.json index f0913da833..b958d4581f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "incremental": true, "target": "es2020", - "outDir": "dist/esm", + "outDir": "dist/", "rootDir": "src", "moduleResolution": "node", "module": "es2020", From b7b6a11f43ed48dd615817bae5eec63832135666 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 27 Jul 2022 12:35:22 +1000 Subject: [PATCH 53/68] fix: export `createWaku` --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index e06c6c38fe..ed489e623b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,7 +16,7 @@ export * as utils from "./lib/utils"; export { waitForRemotePeer } from "./lib/wait_for_remote_peer"; export * as waku from "./lib/waku"; -export { Waku, Protocols } from "./lib/waku"; +export { createWaku, Waku, Protocols } from "./lib/waku"; export * as waku_message from "./lib/waku_message"; export { WakuMessage } from "./lib/waku_message"; From 98d14e08b0546353b10c58d13b3ab048fb62be07 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 27 Jul 2022 12:54:02 +1000 Subject: [PATCH 54/68] feat!: Do not start libp2p automatically with `createWaku` Reduce the number of actions `createWaku` does. --- src/lib/wait_for_remote_peer.ts | 2 ++ src/lib/waku.ts | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lib/wait_for_remote_peer.ts b/src/lib/wait_for_remote_peer.ts index e52d9c4139..634eac8401 100644 --- a/src/lib/wait_for_remote_peer.ts +++ b/src/lib/wait_for_remote_peer.ts @@ -44,6 +44,8 @@ export async function waitForRemotePeer( ): Promise { protocols = protocols ?? [Protocols.Relay]; + if (!waku.isStarted()) return Promise.reject("Waku node is not started"); + const promises = []; if (protocols.includes(Protocols.Relay)) { diff --git a/src/lib/waku.ts b/src/lib/waku.ts index 942cee0372..a23cc6dddb 100644 --- a/src/lib/waku.ts +++ b/src/lib/waku.ts @@ -107,8 +107,6 @@ export async function createWaku(options?: CreateOptions): Promise { const wakuLightPush = new WakuLightPush(libp2p, options); const wakuFilter = new WakuFilter(libp2p, options); - await libp2p.start(); - return new Waku(options ?? {}, libp2p, wakuStore, wakuLightPush, wakuFilter); } @@ -233,6 +231,10 @@ export class Waku { await this.libp2p.stop(); } + isStarted(): boolean { + return this.libp2p.isStarted(); + } + /** * Register a decryption key to attempt decryption of messages received via * [[WakuRelay]] and [[WakuStore]]. This can either be a private key for From 8b350f4272fc99d684c64264b04a0e7354e60bd6 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 27 Jul 2022 12:55:38 +1000 Subject: [PATCH 55/68] feat: remove node polyfilling Does not seem necessary. --- package-lock.json | 61 ----------------------------------------------- package.json | 1 - rollup.config.js | 2 -- 3 files changed, 64 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2138f31113..f437f212df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -86,7 +86,6 @@ "protons": "^3.0.4", "puppeteer": "^13.0.1", "rollup": "^2.75.0", - "rollup-plugin-polyfill-node": "^0.10.1", "size-limit": "^7.0.8", "tail": "^2.2.0", "terser": "^5.13.1", @@ -2347,26 +2346,6 @@ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, - "node_modules/@rollup/plugin-inject": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.4.tgz", - "integrity": "sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "estree-walker": "^2.0.1", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/plugin-inject/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, "node_modules/@rollup/plugin-json": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", @@ -11112,18 +11091,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/rollup-plugin-polyfill-node": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.10.1.tgz", - "integrity": "sha512-PT9OfHuOya8juO0YJZE0JDyeZGXjY0SOhFGvvldzR6JwwzCVoJFMWK44pEuzdoDoOodEYD9ltwLVJ+3JnrPpRQ==", - "dev": true, - "dependencies": { - "@rollup/plugin-inject": "^4.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -14941,25 +14908,6 @@ } } }, - "@rollup/plugin-inject": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.4.tgz", - "integrity": "sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "estree-walker": "^2.0.1", - "magic-string": "^0.25.7" - }, - "dependencies": { - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - } - } - }, "@rollup/plugin-json": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", @@ -21544,15 +21492,6 @@ "fsevents": "~2.3.2" } }, - "rollup-plugin-polyfill-node": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.10.1.tgz", - "integrity": "sha512-PT9OfHuOya8juO0YJZE0JDyeZGXjY0SOhFGvvldzR6JwwzCVoJFMWK44pEuzdoDoOodEYD9ltwLVJ+3JnrPpRQ==", - "dev": true, - "requires": { - "@rollup/plugin-inject": "^4.0.0" - } - }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", diff --git a/package.json b/package.json index f6632bcbf1..c14865068a 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,6 @@ "protons": "^3.0.4", "puppeteer": "^13.0.1", "rollup": "^2.75.0", - "rollup-plugin-polyfill-node": "^0.10.1", "size-limit": "^7.0.8", "tail": "^2.2.0", "terser": "^5.13.1", diff --git a/rollup.config.js b/rollup.config.js index 7a7d2a312b..f9b1282164 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,7 +1,6 @@ import { nodeResolve } from "@rollup/plugin-node-resolve"; import commonjs from "@rollup/plugin-commonjs"; import json from "@rollup/plugin-json"; -import nodePolyfills from "rollup-plugin-polyfill-node"; export default { output: { @@ -12,7 +11,6 @@ export default { plugins: [ commonjs(), json(), - nodePolyfills(), nodeResolve({ browser: true, preferBuiltins: false, From e42b825672a368a6b7224cfca161f235ab64375d Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 27 Jul 2022 12:36:39 +1000 Subject: [PATCH 56/68] feat(example): migrate store-js to esm --- examples/store-js/index.html | 90 +++++++++++++++++------------------- 1 file changed, 43 insertions(+), 47 deletions(-) diff --git a/examples/store-js/index.html b/examples/store-js/index.html index 9a9d724e69..cee9a3367a 100644 --- a/examples/store-js/index.html +++ b/examples/store-js/index.html @@ -12,9 +12,13 @@

Timestamp of latest relay ping

- - From cc73ac0908b73f5e834b734b7ec99ebea7620255 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 27 Jul 2022 13:18:32 +1000 Subject: [PATCH 57/68] feat(example): migrate relay-js to esm --- examples/relay-js/index.html | 160 ++++++++++++++--------------------- 1 file changed, 63 insertions(+), 97 deletions(-) diff --git a/examples/relay-js/index.html b/examples/relay-js/index.html index 914adf759a..dec722d157 100644 --- a/examples/relay-js/index.html +++ b/examples/relay-js/index.html @@ -13,40 +13,25 @@
-

Messages

- - From c3991a29874fedb007744479a1b7e68af450d524 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 27 Jul 2022 13:20:33 +1000 Subject: [PATCH 58/68] fix: fix tsc incremental build feature dist folder is deleted automatically but not tsbuildinfo file so nothing is built as it is assumed already built by tsc. --- .gitignore | 2 ++ package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 643d204d8c..96d4f47e9b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ node_modules src/**.js coverage *.log +/tsconfig.tsbuildinfo +/tsconfig.dev.tsbuildinfo diff --git a/package.json b/package.json index c14865068a..d0b4e445f7 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ ], "scripts": { "prepare": "husky install", - "build": "rimraf ./dist; run-s build:**", + "build": "run-s build:**", "build:esm": "tsc && node build-scripts/fix-imports.js", "build:bundle": "rollup --config rollup.config.js -- dist/index.js", "build:bundle:min": "terser --ecma 11 --compress --mangle -o dist/bundle.min.js -- dist/bundle.js && gzip -9 -c dist/bundle.min.js > dist/bundle.min.js.gz", From 3b93583848b88284ff2ac7ead7aca8afedde1668 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 27 Jul 2022 13:49:49 +1000 Subject: [PATCH 59/68] fix: size-limit --- package.json | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index d0b4e445f7..4b9343abf1 100644 --- a/package.json +++ b/package.json @@ -169,9 +169,39 @@ }, "size-limit": [ { - "path": "dist/umd/index.js", - "import": "{ Waku }", - "config": "./webpack.umd.config.cjs" + "name": "Waku core", + "path": "dist/bundle.min.js", + "import": "{ Waku }" + }, + { + "name": "Waku default setup", + "path": "dist/bundle.min.js", + "import": "{ createWaku, waitForRemotePeer }" + }, + { + "name": "Asymmetric, symmetric encryption and signature", + "path": "dist/bundle.min.js", + "import": "{ waku_message }" + }, + { + "name": "DNS discovery", + "path": "dist/bundle.min.js", + "import": "{ discovery }" + }, + { + "name": "Privacy preserving protocols", + "path": "dist/bundle.min.js", + "import": "{ WakuRelay }" + }, + { + "name": "Light protocols", + "path": "dist/bundle.min.js", + "import": "{ WakuLightPush, WakuFilter }" + }, + { + "name": "History retrieval protocols", + "path": "dist/bundle.min.js", + "import": "{ WakuStore }" } ], "lint-staged": { From 157b5bd3c2c0d4383b4cf22be36be7af33cf0602 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 27 Jul 2022 15:21:24 +1000 Subject: [PATCH 60/68] chore: remove webpack-cli --- package-lock.json | 406 +--------------------------------------------- package.json | 3 +- 2 files changed, 2 insertions(+), 407 deletions(-) diff --git a/package-lock.json b/package-lock.json index f437f212df..5700046ec0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -93,8 +93,7 @@ "ts-node": "^10.4.0", "typedoc": "^0.22.10", "typedoc-plugin-no-inherit": "^1.3.1", - "typescript": "^4.5.5", - "webpack-cli": "^4.10.0" + "typescript": "^4.5.5" }, "engines": { "node": ">=16" @@ -1042,15 +1041,6 @@ "node": ">=12" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -3300,42 +3290,6 @@ "@xtuc/long": "4.2.2" } }, - "node_modules/@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -4260,20 +4214,6 @@ "node": ">=8" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4319,15 +4259,6 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/comment-json": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.1.1.tgz", @@ -5249,18 +5180,6 @@ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", "dev": true }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/err-code": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", @@ -6078,12 +5997,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -6939,25 +6852,6 @@ "node": ">=4" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -7026,15 +6920,6 @@ "node": ">= 0.4" } }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/ip-regex": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", @@ -7251,18 +7136,6 @@ "node": ">=8" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -7417,15 +7290,6 @@ "node": ">=12" } }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/isomorphic-fetch": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", @@ -10879,18 +10743,6 @@ "ms": "^2.1.1" } }, - "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/redent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", @@ -10986,18 +10838,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -11219,18 +11059,6 @@ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -12661,72 +12489,6 @@ } } }, - "node_modules/webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "cross-spawn": "^7.0.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -12829,12 +12591,6 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -13909,12 +13665,6 @@ "@cspotcode/source-map-consumer": "0.8.0" } }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true - }, "@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -15673,29 +15423,6 @@ "@xtuc/long": "4.2.2" } }, - "@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, - "requires": {} - }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -16381,17 +16108,6 @@ } } }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -16428,12 +16144,6 @@ "delayed-stream": "~1.0.0" } }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, "comment-json": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.1.1.tgz", @@ -17160,12 +16870,6 @@ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", "dev": true }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, "err-code": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", @@ -17784,12 +17488,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -18397,16 +18095,6 @@ } } }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -18466,12 +18154,6 @@ "side-channel": "^1.0.4" } }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, "ip-regex": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", @@ -18616,15 +18298,6 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -18731,12 +18404,6 @@ "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.1.5.tgz", "integrity": "sha512-+3JqoKdBTGmyv9vOkS6b9iHhvK34UajfTibrH/1HOK8TI7K2VsM0qOCd+aJdWKtSOA8g3PqZfcwDmnR0p3klqQ==" }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, "isomorphic-fetch": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", @@ -21342,15 +21009,6 @@ "ms": "^2.1.1" } }, - "rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, "redent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", @@ -21418,15 +21076,6 @@ "path-parse": "^1.0.6" } }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -21590,15 +21239,6 @@ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -22675,44 +22315,6 @@ } } }, - "webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "cross-spawn": "^7.0.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, "webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -22785,12 +22387,6 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", diff --git a/package.json b/package.json index 4b9343abf1..b22f98159c 100644 --- a/package.json +++ b/package.json @@ -147,8 +147,7 @@ "ts-node": "^10.4.0", "typedoc": "^0.22.10", "typedoc-plugin-no-inherit": "^1.3.1", - "typescript": "^4.5.5", - "webpack-cli": "^4.10.0" + "typescript": "^4.5.5" }, "files": [ "dist", From 9297ad6021e04bea55bcc4121f746f9ad059168f Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 27 Jul 2022 15:23:30 +1000 Subject: [PATCH 61/68] chore: remove @types/secp256k1 (unused) --- package-lock.json | 19 ------------------- package.json | 1 - 2 files changed, 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5700046ec0..85d4d42ec0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,7 +49,6 @@ "@types/debug": "^4.1.7", "@types/mocha": "^9.1.0", "@types/node": "^17.0.6", - "@types/secp256k1": "^4.0.2", "@types/tail": "^2.0.0", "@types/uuid": "^8.3.0", "@types/varint": "^6.0.0", @@ -2757,15 +2756,6 @@ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" }, - "node_modules/@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/tail": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@types/tail/-/tail-2.2.1.tgz", @@ -15039,15 +15029,6 @@ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/tail": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@types/tail/-/tail-2.2.1.tgz", diff --git a/package.json b/package.json index b22f98159c..a4327e0693 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,6 @@ "@types/debug": "^4.1.7", "@types/mocha": "^9.1.0", "@types/node": "^17.0.6", - "@types/secp256k1": "^4.0.2", "@types/tail": "^2.0.0", "@types/uuid": "^8.3.0", "@types/varint": "^6.0.0", From 2004bf193e859f22977acc9af67ab8a7d92fc6b7 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 27 Jul 2022 15:32:27 +1000 Subject: [PATCH 62/68] chore: remove @types/varint (unused) --- package-lock.json | 19 ------------------- package.json | 1 - 2 files changed, 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index 85d4d42ec0..8fac585e29 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51,7 +51,6 @@ "@types/node": "^17.0.6", "@types/tail": "^2.0.0", "@types/uuid": "^8.3.0", - "@types/varint": "^6.0.0", "@typescript-eslint/eslint-plugin": "^5.8.1", "@typescript-eslint/parser": "^5.8.1", "app-root-path": "^3.0.0", @@ -2768,15 +2767,6 @@ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", "dev": true }, - "node_modules/@types/varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@types/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-2jBazyxGl4644tvu3VAez8UA/AtrcEetT9HOeAbqZ/vAcRVL/ZDFQjSS7rkWusU5cyONQVUz+nwwrNZdMva4ow==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/yauzl": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", @@ -15041,15 +15031,6 @@ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", "dev": true }, - "@types/varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@types/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-2jBazyxGl4644tvu3VAez8UA/AtrcEetT9HOeAbqZ/vAcRVL/ZDFQjSS7rkWusU5cyONQVUz+nwwrNZdMva4ow==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/yauzl": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", diff --git a/package.json b/package.json index a4327e0693..a7dba6cec0 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,6 @@ "@types/node": "^17.0.6", "@types/tail": "^2.0.0", "@types/uuid": "^8.3.0", - "@types/varint": "^6.0.0", "@typescript-eslint/eslint-plugin": "^5.8.1", "@typescript-eslint/parser": "^5.8.1", "app-root-path": "^3.0.0", From 8126e96f33ccdcddff5cb66c42a915df0fb16757 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 27 Jul 2022 15:54:05 +1000 Subject: [PATCH 63/68] chore: remove multiformats (unused) --- package-lock.json | 1 - package.json | 1 - 2 files changed, 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8fac585e29..3d753f4ee3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,6 @@ "it-pipe": "^2.0.3", "js-sha3": "^0.8.0", "libp2p": "next", - "multiformats": "^9.6.5", "p-event": "^5.0.1", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", diff --git a/package.json b/package.json index a7dba6cec0..bae626ec1e 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,6 @@ "it-pipe": "^2.0.3", "js-sha3": "^0.8.0", "libp2p": "next", - "multiformats": "^9.6.5", "p-event": "^5.0.1", "protons-runtime": "^1.0.4", "uint8arrays": "^3.0.0", From 95deb6a33114f8f2d975d01c252e50386d9afe07 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Wed, 27 Jul 2022 16:02:57 +1000 Subject: [PATCH 64/68] fix: ensure types are available in doc --- src/index.ts | 5 +++++ src/lib/wait_for_remote_peer.ts | 2 +- src/lib/waku_filter/index.ts | 7 ++++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index ed489e623b..58d36d02a7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -15,12 +15,17 @@ export * as utils from "./lib/utils"; export { waitForRemotePeer } from "./lib/wait_for_remote_peer"; +export * as proto_message from "./proto/message"; + export * as waku from "./lib/waku"; export { createWaku, Waku, Protocols } from "./lib/waku"; export * as waku_message from "./lib/waku_message"; export { WakuMessage } from "./lib/waku_message"; +export * as waku_filter from "./lib/waku_filter"; +export { WakuFilter } from "./lib/waku_filter"; + export * as waku_light_push from "./lib/waku_light_push"; export { WakuLightPush, diff --git a/src/lib/wait_for_remote_peer.ts b/src/lib/wait_for_remote_peer.ts index 634eac8401..87cd439d96 100644 --- a/src/lib/wait_for_remote_peer.ts +++ b/src/lib/wait_for_remote_peer.ts @@ -22,7 +22,7 @@ interface WakuGossipSubProtocol extends GossipSub { /** * Wait for a remote peer to be ready given the passed protocols. - * Useful when using the [[CreateOptions.bootstrap]] with [[Waku.create]]. + * Useful when using the [[CreateOptions.bootstrap]] with [[createWaku]]. * * If the passed protocols is a GossipSub protocol, then it resolves only once * a peer is in a mesh, to help ensure that other peers will send and receive diff --git a/src/lib/waku_filter/index.ts b/src/lib/waku_filter/index.ts index 8150733c2a..122ae7f511 100644 --- a/src/lib/waku_filter/index.ts +++ b/src/lib/waku_filter/index.ts @@ -15,6 +15,7 @@ import { hexToBytes } from "../utils"; import { DecryptionMethod, WakuMessage } from "../waku_message"; import { ContentFilter, FilterRPC } from "./filter_rpc"; +export { ContentFilter }; export const FilterCodec = "/vac/waku/filter/2.0.0-beta1"; @@ -32,7 +33,7 @@ export interface CreateOptions { pubSubTopic?: string; } -type FilterSubscriptionOpts = { +export type FilterSubscriptionOpts = { /** * The Pubsub topic for the subscription */ @@ -43,9 +44,9 @@ type FilterSubscriptionOpts = { peerId?: PeerId; }; -type FilterCallback = (msg: WakuMessage) => void | Promise; +export type FilterCallback = (msg: WakuMessage) => void | Promise; -type UnsubscribeFunction = () => Promise; +export type UnsubscribeFunction = () => Promise; /** * Implements client side of the [Waku v2 Filter protocol](https://rfc.vac.dev/spec/12/). From 4680560971aefaab249946f005797f0d142e959b Mon Sep 17 00:00:00 2001 From: "fryorcraken.eth" Date: Tue, 2 Aug 2022 10:23:30 +1000 Subject: [PATCH 65/68] fix(examples): add multiaddr dependency Using older dependency for now. --- examples/web-chat/package-lock.json | 1 + examples/web-chat/package.json | 1 + examples/web-chat/src/command.ts | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/web-chat/package-lock.json b/examples/web-chat/package-lock.json index 786dda34e2..35476b27d0 100644 --- a/examples/web-chat/package-lock.json +++ b/examples/web-chat/package-lock.json @@ -14,6 +14,7 @@ "http-browserify": "^1.7.0", "https-browserify": "^1.0.0", "js-waku": "^0.24.0", + "multiaddr": "^10.0.1", "process": "^0.11.10", "react": "^17.0.2", "react-dom": "^17.0.2", diff --git a/examples/web-chat/package.json b/examples/web-chat/package.json index 1b84652ef5..57b53c487b 100644 --- a/examples/web-chat/package.json +++ b/examples/web-chat/package.json @@ -10,6 +10,7 @@ "http-browserify": "^1.7.0", "https-browserify": "^1.0.0", "js-waku": "^0.24.0", + "multiaddr": "^10.0.1", "process": "^0.11.10", "react": "^17.0.2", "react-dom": "^17.0.2", diff --git a/examples/web-chat/src/command.ts b/examples/web-chat/src/command.ts index 66858f5273..cd7b1beb41 100644 --- a/examples/web-chat/src/command.ts +++ b/examples/web-chat/src/command.ts @@ -1,4 +1,4 @@ -import { multiaddr } from "@multiformats/multiaddr"; +import { multiaddr } from "multiaddr"; import PeerId from "peer-id"; import { Waku } from "js-waku"; From cd21c71b49b77c5aa2822a6ee10bb1accd4875ae Mon Sep 17 00:00:00 2001 From: "fryorcraken.eth" Date: Tue, 2 Aug 2022 10:27:51 +1000 Subject: [PATCH 66/68] chore: bump wherearewe (transitive dep) --- package-lock.json | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3d753f4ee3..62b531128d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12527,11 +12527,15 @@ } }, "node_modules/wherearewe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wherearewe/-/wherearewe-1.0.0.tgz", - "integrity": "sha512-oQnRsAfMCqNAC7U4JrBdmFXAhBRLOkPGOfU5+nw9fs2D3g8O6EV7hn7BhpXtt0yno4pxFiRD55rMyt0fsLMqlw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wherearewe/-/wherearewe-1.0.2.tgz", + "integrity": "sha512-HyLZ7n1Yox+w1qWaFEgP/sMs5D7ka2UXmoVNaY0XzbEHLGljo4ScBchYm6cWRYNO33tmFX3Mgg4BiZkDOjihyw==", "dependencies": { "is-electron": "^2.2.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, "node_modules/which": { @@ -22314,9 +22318,9 @@ } }, "wherearewe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wherearewe/-/wherearewe-1.0.0.tgz", - "integrity": "sha512-oQnRsAfMCqNAC7U4JrBdmFXAhBRLOkPGOfU5+nw9fs2D3g8O6EV7hn7BhpXtt0yno4pxFiRD55rMyt0fsLMqlw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wherearewe/-/wherearewe-1.0.2.tgz", + "integrity": "sha512-HyLZ7n1Yox+w1qWaFEgP/sMs5D7ka2UXmoVNaY0XzbEHLGljo4ScBchYm6cWRYNO33tmFX3Mgg4BiZkDOjihyw==", "requires": { "is-electron": "^2.2.0" } From b05e8bef0105e98e32833ab39a78225c5acfeccb Mon Sep 17 00:00:00 2001 From: "fryorcraken.eth" Date: Tue, 2 Aug 2022 11:10:42 +1000 Subject: [PATCH 67/68] fix: cater for buffer transitive dependency Does not seem to be actually used. --- karma.conf.cjs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/karma.conf.cjs b/karma.conf.cjs index 192cea1200..4ae523f08b 100644 --- a/karma.conf.cjs +++ b/karma.conf.cjs @@ -42,6 +42,10 @@ module.exports = function (config) { ], resolve: { extensions: [".ts", ".js"], + fallback: { + // Can be removed once https://github.com/libp2p/js-libp2p-pubsub/pull/92 is merged and released + buffer: false, + }, }, stats: { warnings: false }, }, From 8b7a97d5023a379ec511e533ca08430cdc18e6e7 Mon Sep 17 00:00:00 2001 From: "fryorcraken.eth" Date: Wed, 3 Aug 2022 09:22:18 +1000 Subject: [PATCH 68/68] fix: remove unneeded log --- src/lib/waku.node.spec.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/waku.node.spec.ts b/src/lib/waku.node.spec.ts index 50826acdf3..b27c5c8f37 100644 --- a/src/lib/waku.node.spec.ts +++ b/src/lib/waku.node.spec.ts @@ -58,7 +58,6 @@ describe("Waku Dial [node only]", function () { nwaku = new Nwaku(makeLogFileName(this)); await nwaku.start(); const multiAddrWithId = await nwaku.getMultiaddrWithId(); - console.log(multiAddrWithId); waku = await createWaku({ staticNoiseKey: NOISE_KEY_1, bootstrap: { peers: [multiAddrWithId] },