diff --git a/lerna.json b/lerna.json index 06eb573e2a..c42e400a06 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "packages": ["src/packages/*", "src/chains/*/*"], + "packages": ["src/*", "src/ethereum/*"], "version": "independent", "command": { "version": { diff --git a/roadmap.md b/roadmap.md new file mode 100644 index 0000000000..4b1ba479ff --- /dev/null +++ b/roadmap.md @@ -0,0 +1,107 @@ + +We need to create a roadmap document for a project called Transaction Simulation, it uses Ganache, the Ethereum simulator. + + + +What kind of people do we need and what areas of expertise? + +SysOps Engineer to handle architecture of production, dev systems, failover, automated deployment, monitoring, security, auth, etc. +Ganache needs to be maintained full time (3 full time engineers) <- probably shouldn’t say this? 😅 +POC needs to be re-architected and engineered in a sane way, it’s currently a bit of a hack. +We found a couple of bugs in ganache whilst working on this that we should go back and fix properly, as we just hacked in fixes without tests for the POC. +Tests + +What needs to be done: + +Fully spec: + +`evm_simulateBatch` <- tenderly has this which allows simulating sets of transactions, each set being unrelated from the rest. +`evm_simulateTransactions` <- the only thing we have now, but it’s a messy implementation. +`evm_simulateTransaction` <- easy and nice to have +`evm_simulate` - simulate any RPC call and return an array of results. This seems useful? But no one has asked for it. + +A big question is: should we copy tenderly’s exactly? I don’t think so, because I think we can learn from what they built in build something more polished. + +In any case the simulate methods should accept `overrides` for each individual transaction, not a global `overrides` like we have implemented right now. + +Caching: we currently don’t attempt to sync our hot cache to “latest”, but doing this would improve performance of near-head simulations by about 50% (from ~70ms to 35ms, avg). + +We also don’t invalidate the cache in the cast of reorgs. + +As part of deployment, we need to figure out how to best serve and load balance instances of ganache, as well as manage the Erigon instance that acts as the data source. We need to determine hosting needs and a plan for rolling this out to end users. + +Perf: Gas tracer and stack tracer could be combined which could reduce complexity in some fragile areas. + +Security: we need to audit simulations to ensure that a contract can “figure out” it is in a simulation. For example: a malicious contract could check the gasLimit and determine that the gas limit is too high for mainnet, and then could return a false result because it is in a simulation environment. There are several vectors we’ll need to cover. + +Feature request from the POC feedback: + +Ethan on running multiple transactions where the first one fails: +> yeah i’d prefer if it just stopped. It’s not like the second tx will provide much more info IMO than the one that initially reverted (edited) +> it also makes it easier to check it something failed; length - 1, check if failed where the last item is always indicative of the most recent failure if it failed + +For this roadmap document, Ethan wants: + +> how many people, how long, what is going to be done +> justification on why it needs to be done kind of thing + + +– should we talk about Ganache maintenance in this document? Maybe this is a question for madeline + +Todos - we like this format +Now +Next +Later + +Jeff Smale’s ramblings about milestones and order of implementation: +The order of implementation should be such that we get the greatest value to our consumers the fastest. As such, "improvements" have been deferred in favour of more critical work in order to get a working solution into production. +Core implementation +Implement evm_simulateTranasctions RPC method including tracing, gas estimation, etc with the full functionality implemented in the PoC, but not necessarily with all of the optimisations required to achieve the performance. + +Head following mode, where the forked chain is followed locally, this is implemented in the PoC, but not necessarily in the same approach that we will want to take in the final product. +Environmental build out +Research and architect environmental architecture, including AWS frameworks, Erigon, Ganache instance(s), and potentially RPC Daemon instances, and deployment, monitoring, autoscaling etc. + +This will require research to ensure that we get the ideal balance of tradeoffs between performance, maintainability etc. +Gas estimation improvements +Improvements to the gas estimation approach to resolve issues where our current minimum gas estimation is incorrect. This could be an incremental approach where we identify the cases where we fail, falling back to a slow (binary search) implementation, and over time resolve some of those issues in order to improve gas estimation performance +Performance and scalability +Incrementally implement performance and scalability improvements, such as high-performance in-memory database, high performance step interception, and other "non-critical" +changes. + + --- + +# Roadmap: + +1. Introduction +2. Project Goals +3. Required Expertise and Team Composition +4. Required Specifications +5. Project Timeline and Milestones +6. Justification + + +## Introduction + +Ganache is an Ethereum simulator that makes developing Ethereum applications faster, easier, and safer. It includes all popular RPC functions and features of an Ethereum RPC client, plus the ability to manipulate the chain in ways a testnet/mainnet client would not. This ability to manipulate the chain is immensely helpful for users that want to simulate an Ethereum state that does not currently exist. + +We have developed a Proof of Concept of a new RPC endpoint, evm_simulateTransactions, that allows for users, like MetaMask, to send transactions for Ganache to simulate, in order, complete with state overrides, call tracing, and gas estimation. We’re hosting this endpoint via AWS to make it available for testing. + +This roadmap document outlines what it will take to graduate this PoC into a stable production-ready service with the uptime-reliability and scalability MetaMask requires. + + +## Project Goals + +The goal of this project is to graduate the PoC into a stable production-ready service with the uptime-reliability and scalability MetaMask requires. + +This project will be considered complete when the following criteria are met: + +- The evm_simulateTransactions endpoint is available for use by MetaMask and other users. +- The endpoint is hosted in a production-ready environment with the uptime-reliability and scalability MetaMask requires. +- The endpoint is well-documented and easy to use. +- The endpoint is well-tested and has a test suite that is easy to run. +- The endpoint is well-monitored and has alerting in place for critical issues. +- The endpoint is well-maintained and has a plan for future maintenance and improvements. +- The endpoint is well-secured and has a plan for future security improvements. +- The endpoint is well-supported and has a plan for future support. +- The endpoint is well-architected and has a plan for future architectural improvements. \ No newline at end of file diff --git a/src/chains/filecoin/filecoin/README.md b/src/chains/filecoin/filecoin/README.md deleted file mode 100644 index 806357f5fd..0000000000 --- a/src/chains/filecoin/filecoin/README.md +++ /dev/null @@ -1,148 +0,0 @@ -# `@ganache/filecoin` - -This package provides Ganache's Filecoin client implementation. - -## Table of Contents - -1. [CLI Usage](#cli-usage) -1. [NodeJS Usage](#nodejs-usage) -1. [Startup Options](#startup-options) -1. [Supported RPC Methods](#supported-rpc-methods) - -## CLI Usage - -To use Filecoin-flavored Ganache via the CLI, follow the below instructions: - -1. Remove any existing version of Ganache CLI - ```bash - npm uninstall --global ganache-cli - npm uninstall --global ganache - ``` -1. Install the `ganache` package globally - ```bash - npm install --global ganache - ``` -1. Install the `@ganache/filecoin` globally - ```bash - npm install --global @ganache/filecoin - ``` -1. Run Filecoin-flavored Ganache - ```bash - ganache --flavor @ganache/filecoin - ``` -1. See available [options](#startup-options) - ```bash - ganache --flavor @ganache/filecoin --help - ``` -1. You can use Ethereum-flavored Ganache still - - ```bash - # Running "ganache" defaults to Ethereum - ganache - - # or you can specify ethereum as the flavor - ganache ethereum - ``` - -## NodeJS Usage - -### Install - -If you're using Filecoin-flavored Ganache as a NodeJS dependency, you need to make sure you install both the `ganache` package (with the `filecoin` tag) and the `@ganache/filecoin` package. - -```bash -# install the base Ganache package -npm install ganache - -# install the Filecoin peer dependency package -npm install @ganache/filecoin -``` - -### Usage - -In your code, you will use the `ganache` package directly to instantiate the Filecoin flavor. Below is an example on how to do that with the default [options](#startup-options). - -```javascript -import Ganache from "ganache"; - -const startupOptions = { - flavor: "@ganache/filecoin"; -} - -// Provider usage -const provider = Ganache.provider(startupOptions); -const result = await provider.send({ - jsonrpc: "2.0", - id: "0", - method: "Filecoin.Version", - params: [] -}); - -// Server usage (starts up a HTTP and WebSocket server) -const server = Ganache.server(startupOptions); -server.listen(7777, () => { - console.log("Lotus RPC endpoint listening at http://localhost:7777/rpc/v0"); -}); -``` - -## Startup Options - -See available startup options [in `@ganache/filecoin-options`](../options/README.md). - -## Supported RPC Methods - -`@ganache/filecoin` does not support all of the RPC methods implemented within Lotus; further, it implements some custom methods. Below is a list of each method. - -### Ganache Specific RPC Methods - -- `Ganache.MineTipset`: Manually mine a tipset immediately. Mines even if the miner is disabled. No parameters. -- `Ganache.EnableMiner`: Enables the miner. No parameters. -- `Ganache.DisableMiner`: Disables the miner. No parameters. -- `Ganache.MinerEnabled`: The current status on whether or not the miner is enabled. The initial value is determined by the option `miner.mine`. If true, then auto-mining (`miner.blockTime = 0`) and interval mining (`miner.blockTime > 0`) will be processed. If false, tipsets/blocks will only be mined with `Ganache.MineTipset`. No parameters. -- `Ganache.MinerEnabledNotify`: A subscription method that provides an update whenever the miner is enabled or disabled. No parameters. -- `Ganache.GetDealById`: Retrieves an internal `DealInfo` by its `DealID`. Takes a single parameter, `DealID`, of type `number`. - -### Supported Lotus RPC methods - -- `Filecoin.ChainGetBlock` -- `Filecoin.ChainGetBlockMessages` -- `Filecoin.ChainGetGenesis` -- `Filecoin.ChainGetMessage` -- `Filecoin.ChainGetTipSet` -- `Filecoin.ChainGetTipSetByHeight` -- `Filecoin.ChainHead` -- `Filecoin.ChainNotify` -- `Filecoin.ClientFindData` -- `Filecoin.ClientGetDealInfo` -- `Filecoin.ClientGetDealStatus` -- `Filecoin.ClientGetDealUpdates` -- `Filecoin.ClientListDeals` -- `Filecoin.ClientRetrieve` -- `Filecoin.ClientStartDeal` -- `Filecoin.ID` - Returns a hardcoded ID of `bafzkbzaced47iu7qygeshb3jamzkh2cqcmlxzcpxrnqsj6yoipuidor523jyg` -- `Filecoin.MpoolBatchPush` - FIL transfer only (`Method = 0`) -- `Filecoin.MpoolBatchPushMessage` - FIL transfer only (`Method = 0`) -- `Filecoin.MpoolClear` -- `Filecoin.MpoolGetNonce` -- `Filecoin.MpoolPending` -- `Filecoin.MpoolPush` - FIL transfer only (`Method = 0`) -- `Filecoin.MpoolPushMessage` - FIL transfer only (`Method = 0`) -- `Filecoin.MpoolSelect` -- `Filecoin.StateListMiners` -- `Filecoin.StateMinerInfo` -- `Filecoin.StateMinerPower` -- `Filecoin.WalletBalance` -- `Filecoin.WalletDefaultAddress` -- `Filecoin.WalletDelete` -- `Filecoin.WalletExport` -- `Filecoin.WalletHas` -- `Filecoin.WalletImport` - `KeyInfo.Type` of type `secpk1-ledger` is not supported -- `Filecoin.WalletList` -- `Filecoin.WalletNew` - `KeyInfo.Type` of type `secpk1-ledger` is not supported -- `Filecoin.WalletSetDefault` -- `Filecoin.WalletSign` -- `Filecoin.WalletSignMessage` -- `Filecoin.WalletValidateAddress` -- `Filecoin.WalletVerify` -- `Filecoin.ActorAddress` -- `Filecoin.Version` diff --git a/src/chains/filecoin/filecoin/index.ts b/src/chains/filecoin/filecoin/index.ts deleted file mode 100644 index 45a9f7a739..0000000000 --- a/src/chains/filecoin/filecoin/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -/*! - * @ganache/filecoin - * - * @author Tim Coulter - * @license MIT - */ - -import type { Flavor } from "@ganache/flavor"; -import { Connector } from "./src/connector"; -import { ready } from "./src/ready"; -import { FilecoinOptionsConfig } from "@ganache/filecoin-options"; -import { CliOptionsConfig, ServerOptionsConfig } from "./src/defaults"; - -export { - FilecoinProvider as Provider, - StorageDealStatus -} from "./src/connector"; - -type FilecoinFlavor = Flavor< - "filecoin", - Connector, - { - provider: FilecoinOptionsConfig; - server: ServerOptionsConfig; - cli: CliOptionsConfig; - } ->; -const FilecoinFlavor: FilecoinFlavor = { - flavor: "filecoin", - connect: (options, executor) => new Connector(options, executor), - options: { - provider: FilecoinOptionsConfig, - server: ServerOptionsConfig, - cli: CliOptionsConfig - }, - ready -}; - -export default FilecoinFlavor; diff --git a/src/chains/filecoin/filecoin/package-lock.json b/src/chains/filecoin/filecoin/package-lock.json deleted file mode 100644 index 402e14423b..0000000000 --- a/src/chains/filecoin/filecoin/package-lock.json +++ /dev/null @@ -1,10828 +0,0 @@ -{ - "name": "@ganache/filecoin", - "version": "0.8.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@achingbrain/electron-fetch": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@achingbrain/electron-fetch/-/electron-fetch-1.7.2.tgz", - "integrity": "sha512-ShX5frO+2OddzRIlUb8D0Ao2eC3uZl910CYnRIPGLLM360vQceeOqpivwNdbry41Ph3MMtLR4RpzGdaADGG8Gg==", - "requires": { - "encoding": "^0.1.13" - } - }, - "@assemblyscript/loader": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.9.4.tgz", - "integrity": "sha512-HazVq9zwTVwGmqdwYzu7WyQ6FQVZ7SwET0KKQuKm55jD0IfUpZgN0OPIiZG3zV1iSrVYcN0bdwLRXI/VNCYsUA==" - }, - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", - "dev": true - }, - "@babel/core": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", - "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.15.0", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", - "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", - "dev": true, - "requires": { - "@babel/types": "^7.15.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", - "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", - "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", - "dev": true, - "requires": { - "@babel/types": "^7.15.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", - "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.9", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-replace-supers": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", - "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", - "dev": true, - "requires": { - "@babel/types": "^7.14.8" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true - }, - "@babel/helpers": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", - "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", - "dev": true, - "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" - } - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", - "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", - "dev": true - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", - "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.15.0", - "@babel/types": "^7.15.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", - "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.9", - "to-fast-properties": "^2.0.0" - } - }, - "@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==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", - "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", - "dev": true - }, - "@filecoin-shipyard/lotus-client-rpc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@filecoin-shipyard/lotus-client-rpc/-/lotus-client-rpc-0.2.0.tgz", - "integrity": "sha512-z3Avmj6/j+vZ+dPC7LFIkMhjZGJYN1/XT/A11vMY+vh5IyZ1Z75JWbga3gJp8nRQkoa8nYi5GI4e0OIb+GkCPQ==", - "dev": true - }, - "@filecoin-shipyard/lotus-client-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@filecoin-shipyard/lotus-client-schema/-/lotus-client-schema-2.0.0.tgz", - "integrity": "sha512-3XIoyCPr7FyK9rbI3LIKAB755TlpQ0ankFs7uDpU8JXA38gZK7YGc+zcXMLiyIzknbhOmlfGPJ1jpcm3n9Y/0A==", - "dev": true - }, - "@hapi/accept": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.2.tgz", - "integrity": "sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw==", - "requires": { - "@hapi/boom": "9.x.x", - "@hapi/hoek": "9.x.x" - } - }, - "@hapi/ammo": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@hapi/ammo/-/ammo-5.0.1.tgz", - "integrity": "sha512-FbCNwcTbnQP4VYYhLNGZmA76xb2aHg9AMPiy18NZyWMG310P5KdFGyA9v2rm5ujrIny77dEEIkMOwl0Xv+fSSA==", - "requires": { - "@hapi/hoek": "9.x.x" - } - }, - "@hapi/b64": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@hapi/b64/-/b64-5.0.0.tgz", - "integrity": "sha512-ngu0tSEmrezoiIaNGG6rRvKOUkUuDdf4XTPnONHGYfSGRmDqPZX5oJL6HAdKTo1UQHECbdB4OzhWrfgVppjHUw==", - "requires": { - "@hapi/hoek": "9.x.x" - } - }, - "@hapi/boom": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.3.tgz", - "integrity": "sha512-RlrGyZ603hE/eRTZtTltocRm50HHmrmL3kGOP0SQ9MasazlW1mt/fkv4C5P/6rnpFXjwld/POFX1C8tMZE3ldg==", - "requires": { - "@hapi/hoek": "9.x.x" - } - }, - "@hapi/bounce": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/bounce/-/bounce-2.0.0.tgz", - "integrity": "sha512-JesW92uyzOOyuzJKjoLHM1ThiOvHPOLDHw01YV8yh5nCso7sDwJho1h0Ad2N+E62bZyz46TG3xhAi/78Gsct6A==", - "requires": { - "@hapi/boom": "9.x.x", - "@hapi/hoek": "9.x.x" - } - }, - "@hapi/bourne": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.0.0.tgz", - "integrity": "sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg==" - }, - "@hapi/call": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@hapi/call/-/call-8.0.1.tgz", - "integrity": "sha512-bOff6GTdOnoe5b8oXRV3lwkQSb/LAWylvDMae6RgEWWntd0SHtkYbQukDHKlfaYtVnSAgIavJ0kqszF/AIBb6g==", - "requires": { - "@hapi/boom": "9.x.x", - "@hapi/hoek": "9.x.x" - } - }, - "@hapi/catbox": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/@hapi/catbox/-/catbox-11.1.1.tgz", - "integrity": "sha512-u/8HvB7dD/6X8hsZIpskSDo4yMKpHxFd7NluoylhGrL6cUfYxdQPnvUp9YU2C6F9hsyBVLGulBd9vBN1ebfXOQ==", - "requires": { - "@hapi/boom": "9.x.x", - "@hapi/hoek": "9.x.x", - "@hapi/podium": "4.x.x", - "@hapi/validate": "1.x.x" - } - }, - "@hapi/catbox-memory": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@hapi/catbox-memory/-/catbox-memory-5.0.1.tgz", - "integrity": "sha512-QWw9nOYJq5PlvChLWV8i6hQHJYfvdqiXdvTupJFh0eqLZ64Xir7mKNi96d5/ZMUAqXPursfNDIDxjFgoEDUqeQ==", - "requires": { - "@hapi/boom": "9.x.x", - "@hapi/hoek": "9.x.x" - } - }, - "@hapi/content": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@hapi/content/-/content-5.0.2.tgz", - "integrity": "sha512-mre4dl1ygd4ZyOH3tiYBrOUBzV7Pu/EOs8VLGf58vtOEECWed8Uuw6B4iR9AN/8uQt42tB04qpVaMyoMQh0oMw==", - "requires": { - "@hapi/boom": "9.x.x" - } - }, - "@hapi/cryptiles": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/cryptiles/-/cryptiles-5.1.0.tgz", - "integrity": "sha512-fo9+d1Ba5/FIoMySfMqPBR/7Pa29J2RsiPrl7bkwo5W5o+AN1dAYQRi4SPrPwwVxVGKjgLOEWrsvt1BonJSfLA==", - "requires": { - "@hapi/boom": "9.x.x" - } - }, - "@hapi/file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/file/-/file-2.0.0.tgz", - "integrity": "sha512-WSrlgpvEqgPWkI18kkGELEZfXr0bYLtr16iIN4Krh9sRnzBZN6nnWxHFxtsnP684wueEySBbXPDg/WfA9xJdBQ==" - }, - "@hapi/hapi": { - "version": "20.1.5", - "resolved": "https://registry.npmjs.org/@hapi/hapi/-/hapi-20.1.5.tgz", - "integrity": "sha512-BhJ5XFR9uWPUBj/z5pPqXSk8OnvQQU/EbQjwpmjZy0ymNEiq7kIhXkAmzXcntbBHta9o7zpW8XMeXnfV4wudXw==", - "requires": { - "@hapi/accept": "^5.0.1", - "@hapi/ammo": "^5.0.1", - "@hapi/boom": "^9.1.0", - "@hapi/bounce": "^2.0.0", - "@hapi/call": "^8.0.0", - "@hapi/catbox": "^11.1.1", - "@hapi/catbox-memory": "^5.0.0", - "@hapi/heavy": "^7.0.1", - "@hapi/hoek": "^9.0.4", - "@hapi/mimos": "^6.0.0", - "@hapi/podium": "^4.1.1", - "@hapi/shot": "^5.0.5", - "@hapi/somever": "^3.0.0", - "@hapi/statehood": "^7.0.3", - "@hapi/subtext": "^7.0.3", - "@hapi/teamwork": "^5.1.0", - "@hapi/topo": "^5.0.0", - "@hapi/validate": "^1.1.1" - } - }, - "@hapi/heavy": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@hapi/heavy/-/heavy-7.0.1.tgz", - "integrity": "sha512-vJ/vzRQ13MtRzz6Qd4zRHWS3FaUc/5uivV2TIuExGTM9Qk+7Zzqj0e2G7EpE6KztO9SalTbiIkTh7qFKj/33cA==", - "requires": { - "@hapi/boom": "9.x.x", - "@hapi/hoek": "9.x.x", - "@hapi/validate": "1.x.x" - } - }, - "@hapi/hoek": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", - "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" - }, - "@hapi/inert": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@hapi/inert/-/inert-6.0.4.tgz", - "integrity": "sha512-tpmNqtCCAd+5Ts07bJmMaA79+ZUIf0zSWnQMaWtbcO4nGrO/yXB2AzoslfzFX2JEV9vGeF3FfL8mYw0pHl8VGg==", - "requires": { - "@hapi/ammo": "5.x.x", - "@hapi/boom": "9.x.x", - "@hapi/bounce": "2.x.x", - "@hapi/hoek": "9.x.x", - "@hapi/validate": "1.x.x", - "lru-cache": "^6.0.0" - } - }, - "@hapi/iron": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@hapi/iron/-/iron-6.0.0.tgz", - "integrity": "sha512-zvGvWDufiTGpTJPG1Y/McN8UqWBu0k/xs/7l++HVU535NLHXsHhy54cfEMdW7EjwKfbBfM9Xy25FmTiobb7Hvw==", - "requires": { - "@hapi/b64": "5.x.x", - "@hapi/boom": "9.x.x", - "@hapi/bourne": "2.x.x", - "@hapi/cryptiles": "5.x.x", - "@hapi/hoek": "9.x.x" - } - }, - "@hapi/mimos": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@hapi/mimos/-/mimos-6.0.0.tgz", - "integrity": "sha512-Op/67tr1I+JafN3R3XN5DucVSxKRT/Tc+tUszDwENoNpolxeXkhrJ2Czt6B6AAqrespHoivhgZBWYSuANN9QXg==", - "requires": { - "@hapi/hoek": "9.x.x", - "mime-db": "1.x.x" - } - }, - "@hapi/nigel": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@hapi/nigel/-/nigel-4.0.2.tgz", - "integrity": "sha512-ht2KoEsDW22BxQOEkLEJaqfpoKPXxi7tvabXy7B/77eFtOyG5ZEstfZwxHQcqAiZhp58Ae5vkhEqI03kawkYNw==", - "requires": { - "@hapi/hoek": "^9.0.4", - "@hapi/vise": "^4.0.0" - } - }, - "@hapi/pez": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@hapi/pez/-/pez-5.0.3.tgz", - "integrity": "sha512-mpikYRJjtrbJgdDHG/H9ySqYqwJ+QU/D7FXsYciS9P7NYBXE2ayKDAy3H0ou6CohOCaxPuTV4SZ0D936+VomHA==", - "requires": { - "@hapi/b64": "5.x.x", - "@hapi/boom": "9.x.x", - "@hapi/content": "^5.0.2", - "@hapi/hoek": "9.x.x", - "@hapi/nigel": "4.x.x" - } - }, - "@hapi/podium": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@hapi/podium/-/podium-4.1.3.tgz", - "integrity": "sha512-ljsKGQzLkFqnQxE7qeanvgGj4dejnciErYd30dbrYzUOF/FyS/DOF97qcrT3bhoVwCYmxa6PEMhxfCPlnUcD2g==", - "requires": { - "@hapi/hoek": "9.x.x", - "@hapi/teamwork": "5.x.x", - "@hapi/validate": "1.x.x" - } - }, - "@hapi/shot": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@hapi/shot/-/shot-5.0.5.tgz", - "integrity": "sha512-x5AMSZ5+j+Paa8KdfCoKh+klB78otxF+vcJR/IoN91Vo2e5ulXIW6HUsFTCU+4W6P/Etaip9nmdAx2zWDimB2A==", - "requires": { - "@hapi/hoek": "9.x.x", - "@hapi/validate": "1.x.x" - } - }, - "@hapi/somever": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@hapi/somever/-/somever-3.0.1.tgz", - "integrity": "sha512-4ZTSN3YAHtgpY/M4GOtHUXgi6uZtG9nEZfNI6QrArhK0XN/RDVgijlb9kOmXwCR5VclDSkBul9FBvhSuKXx9+w==", - "requires": { - "@hapi/bounce": "2.x.x", - "@hapi/hoek": "9.x.x" - } - }, - "@hapi/statehood": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@hapi/statehood/-/statehood-7.0.3.tgz", - "integrity": "sha512-pYB+pyCHkf2Amh67QAXz7e/DN9jcMplIL7Z6N8h0K+ZTy0b404JKPEYkbWHSnDtxLjJB/OtgElxocr2fMH4G7w==", - "requires": { - "@hapi/boom": "9.x.x", - "@hapi/bounce": "2.x.x", - "@hapi/bourne": "2.x.x", - "@hapi/cryptiles": "5.x.x", - "@hapi/hoek": "9.x.x", - "@hapi/iron": "6.x.x", - "@hapi/validate": "1.x.x" - } - }, - "@hapi/subtext": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@hapi/subtext/-/subtext-7.0.3.tgz", - "integrity": "sha512-CekDizZkDGERJ01C0+TzHlKtqdXZxzSWTOaH6THBrbOHnsr3GY+yiMZC+AfNCypfE17RaIakGIAbpL2Tk1z2+A==", - "requires": { - "@hapi/boom": "9.x.x", - "@hapi/bourne": "2.x.x", - "@hapi/content": "^5.0.2", - "@hapi/file": "2.x.x", - "@hapi/hoek": "9.x.x", - "@hapi/pez": "^5.0.1", - "@hapi/wreck": "17.x.x" - } - }, - "@hapi/teamwork": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/teamwork/-/teamwork-5.1.0.tgz", - "integrity": "sha512-llqoQTrAJDTXxG3c4Kz/uzhBS1TsmSBa/XG5SPcVXgmffHE1nFtyLIK0hNJHCB3EuBKT84adzd1hZNY9GJLWtg==" - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@hapi/validate": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@hapi/validate/-/validate-1.1.3.tgz", - "integrity": "sha512-/XMR0N0wjw0Twzq2pQOzPBZlDzkekGcoCtzO314BpIEsbXdYGthQUbxgkGDf4nhk1+IPDAsXqWjMohRQYO06UA==", - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0" - } - }, - "@hapi/vise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@hapi/vise/-/vise-4.0.0.tgz", - "integrity": "sha512-eYyLkuUiFZTer59h+SGy7hUm+qE9p+UemePTHLlIWppEd+wExn3Df5jO04bFQTm7nleF5V8CtuYQYb+VFpZ6Sg==", - "requires": { - "@hapi/hoek": "9.x.x" - } - }, - "@hapi/wreck": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/@hapi/wreck/-/wreck-17.1.0.tgz", - "integrity": "sha512-nx6sFyfqOpJ+EFrHX+XWwJAxs3ju4iHdbB/bwR8yTNZOiYmuhA8eCe7lYPtYmb4j7vyK/SlbaQsmTtUrMvPEBw==", - "requires": { - "@hapi/boom": "9.x.x", - "@hapi/bourne": "2.x.x", - "@hapi/hoek": "9.x.x" - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "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==", - "dev": true - }, - "@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==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz", - "integrity": "sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg==" - }, - "@multiformats/base-x": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", - "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==" - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@sideway/address": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", - "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@sinonjs/samsam": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz", - "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==", - "requires": { - "@sinonjs/commons": "^1.6.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" - } - }, - "@sinonjs/text-encoding": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==" - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" - }, - "@trufflesuite/bigint-buffer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz", - "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==", - "requires": { - "node-gyp-build": "4.4.0" - }, - "dependencies": { - "node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" - } - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", - "dev": true - }, - "@types/bl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/bl/-/bl-2.1.0.tgz", - "integrity": "sha512-1TdA9IXOy4sdqn8vgieQ6GZAiHiPNrOiO1s2GJjuYPw4QVY7gYoVjkW049avj33Ez7IcIvu43hQsMsoUFbCn2g==", - "requires": { - "@types/node": "*" - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "requires": { - "@types/ms": "*" - } - }, - "@types/deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha512-mMUu4nWHLBlHtxXY17Fg6+ucS/MnndyOWyOe7MmwkoMYxvfQU2ajtRaEvqSUv+aVkMqH/C0NCI8UoVfRNQ10yg==", - "dev": true - }, - "@types/encoding-down": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/encoding-down/-/encoding-down-5.0.0.tgz", - "integrity": "sha512-G0MlS/+/U2RIQLcSEhhAcoMrXw3hXUCFSKbhbeEljoKMra2kq+NPX6tfOveSWQLX2hJXBo+YrvKgAGe+tFL1Aw==", - "dev": true, - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-codec": "*" - } - }, - "@types/eslint": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.1.tgz", - "integrity": "sha512-UP9rzNn/XyGwb5RQ2fok+DzcIRIYwc16qTXse5+Smsy8MOIccCChT15KAwnsgQx4PzJkaMq4myFyZ4CL5TjhIQ==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/level-codec": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/level-codec/-/level-codec-9.0.1.tgz", - "integrity": "sha512-6z7DSlBsmbax3I/bV1Q6jT1nKquDjFl95LURVThdKtwILkRawLYtXdINW19xM95N5kqN2detWb2iGrbUlPwNyw==", - "dev": true - }, - "@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", - "dev": true - }, - "@types/levelup": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-5.1.0.tgz", - "integrity": "sha512-XagSD3VJFWjZWeQnG4mL53PFRPmb6E7dKXdJxexVw85ki82BWOp68N+R6M1t9OYsbmlY+2S0GZcZtVH3gGbeDw==", - "dev": true, - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, - "@types/lodash": { - "version": "4.14.172", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz", - "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==", - "dev": true - }, - "@types/lodash.clonedeep": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.6.tgz", - "integrity": "sha512-cE1jYr2dEg1wBImvXlNtp0xDoS79rfEdGozQVgliDZj1uERH4k+rmEMTudP9b4VQ8O6nRb5gPqft0QzEQGMQgA==", - "dev": true, - "requires": { - "@types/lodash": "*" - } - }, - "@types/long": { - "version": "4.0.1", - "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/mocha": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", - "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", - "dev": true - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "@types/node": { - "version": "16.4.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.13.tgz", - "integrity": "sha512-bLL69sKtd25w7p1nvg9pigE4gtKVpGTPojBFLMkGHXuUgap2sLqQt2qUnqmVCDfzGUL0DRNZP+1prIZJbMeAXg==" - }, - "@types/secp256k1": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.1.tgz", - "integrity": "sha512-+ZjSA8ELlOp8SlKi0YLB2tz9d5iPNEmOBd+8Rz21wTMdaXQIa9b6TEnD6l5qKOCypE7FSyPyck12qZJxSDNoog==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/terser-webpack-plugin": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/terser-webpack-plugin/-/terser-webpack-plugin-5.0.2.tgz", - "integrity": "sha512-YcAT1D4gjho1jqc/gjn1ojHFtQtrGHaHPqz5nDMiN5Jj9BeigjDkS2w010PvUnPkdVY3GerDFbY62TArtDBuDQ==", - "dev": true, - "requires": { - "terser": "^5.3.8", - "webpack": "^5.1.0" - } - }, - "@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@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 - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", - "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", - "dev": true - }, - "@webpack-cli/info": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", - "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", - "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", - "dev": true - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "@zxing/text-encoding": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", - "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", - "optional": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "abortable-iterator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-3.0.0.tgz", - "integrity": "sha512-7KqcPPnMhfot4GrEjK51zesS4Ye/lUCHBgYt3oRxIlU24HO3mVxBwEo9niNyfHqoWKqWLuZTc3zErNomdHA+ag==", - "requires": { - "get-iterator": "^1.0.2" - } - }, - "abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "dev": true, - "requires": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - }, - "dependencies": { - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "dev": true, - "requires": { - "catering": "^2.1.0" - } - }, - "level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "dev": true - } - } - }, - "abstract-logging": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", - "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==" - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "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", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "requires": { - "string-width": "^4.1.0" - } - }, - "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 - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "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==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "any-signal": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-2.1.2.tgz", - "integrity": "sha512-B+rDnWasMi/eWcajPcCWSlYc7muXOrcYrqgyzcdKisl2H/WTlQ0gip1KyQfr0ZlxJdsuWCj/LWwQm7fhyhRfIQ==", - "requires": { - "abort-controller": "^3.0.0", - "native-abort-controller": "^1.0.3" - }, - "dependencies": { - "native-abort-controller": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/native-abort-controller/-/native-abort-controller-1.0.3.tgz", - "integrity": "sha512-fd5LY5q06mHKZPD5FmMrn7Lkd2H018oBGKNOAdLpctBDEPFKsfJ1nX9ke+XRa8PEJJpjqrpQkGjq2IZ27QNmYA==" - } - } - }, - "anymatch": { - "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" - } - }, - "append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "requires": { - "default-require-extensions": "^3.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "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 - }, - "args": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/args/-/args-5.0.1.tgz", - "integrity": "sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ==", - "requires": { - "camelcase": "5.0.0", - "chalk": "2.4.2", - "leven": "2.1.0", - "mri": "1.1.4" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "array-shuffle": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-shuffle/-/array-shuffle-1.0.1.tgz", - "integrity": "sha1-fqSIKjVrS8pfVF4LblLq9tlxVXo=" - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } - }, - "async-sema": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.0.tgz", - "integrity": "sha512-+JpRq3r0zjpRLDruS6q/nC4V5tzsaiu07521677Mdi5i+AkaU/aNJH38rYHJVQ4zvz+SSkjgc8FUI7qIZrR+3g==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" - }, - "available-typed-arrays": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz", - "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==" - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base32-encoding": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base32-encoding/-/base32-encoding-1.0.0.tgz", - "integrity": "sha512-k1gA7f00ODLY7YtuEQFz0Kn3huTCmL/JW+oQtw51ID+zxs5chj/YQ1bXN+Q0JsqiKB2Yn0oA0AA8uipFYgpagQ==", - "dev": true - }, - "base32.js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz", - "integrity": "sha1-tYLexpPC8R6JPPBk7mrFthMaIgI=" - }, - "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" - }, - "bcrypto": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/bcrypto/-/bcrypto-5.4.0.tgz", - "integrity": "sha512-KDX2CR29o6ZoqpQndcCxFZAtYA1jDMnXU3jmCfzP44g++Cu7AHHtZN/JbrN/MXAg9SLvtQ8XISG+eVD9zH1+Jg==", - "requires": { - "bufio": "~1.0.7", - "loady": "~0.0.5" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "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 - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bintrees": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.1.tgz", - "integrity": "sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ=" - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" - }, - "blob-to-it": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/blob-to-it/-/blob-to-it-1.0.2.tgz", - "integrity": "sha512-yD8tikfTlUGEOSHExz4vDCIQFLaBPXIL0KcxGQt9RbwMVXBEh+jokdJyStvTXPgWrdKfwgk7RX8GPsgrYzsyng==", - "requires": { - "browser-readablestream-to-it": "^1.0.2" - } - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "borc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/borc/-/borc-2.1.2.tgz", - "integrity": "sha512-Sy9eoUi4OiKzq7VovMn246iTo17kzuyHJKomCfpWMlI6RpfN1gk95w7d7gH264nApVLg0HZfcpz62/g4VH1Y4w==", - "requires": { - "bignumber.js": "^9.0.0", - "buffer": "^5.5.0", - "commander": "^2.15.0", - "ieee754": "^1.1.13", - "iso-url": "~0.4.7", - "json-text-sequence": "~0.1.0", - "readable-stream": "^3.6.0" - } - }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", - "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==" - }, - "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==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "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" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-readablestream-to-it": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-1.0.2.tgz", - "integrity": "sha512-lv4M2Z6RKJpyJijJzBQL5MNssS7i8yedl+QkhnLCyPtgNGNSXv1KthzUnye9NlRAtBAI80X6S9i+vK09Rzjcvg==" - }, - "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 - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "browserslist": { - "version": "4.16.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", - "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001248", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.793", - "escalade": "^3.1.1", - "node-releases": "^1.1.73" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "bufio": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.0.7.tgz", - "integrity": "sha512-bd1dDQhiC+bEbEfg56IdBv7faWa6OipMs/AFFFvtFnB3wAYjlwQpQRZ0pm6ZkgtfL0pILRXhKxOiQj6UzoMR7A==" - }, - "byteman": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/byteman/-/byteman-1.3.5.tgz", - "integrity": "sha512-FzWDstifFRxtHX234b93AGa1b77dA6NUFpEXe+AoG1NydGN//XDZLMXxRNUoMf7SYYhVxfpwUEUgQOziearJvA==" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } - } - }, - "caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "requires": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "caniuse-lite": { - "version": "1.0.30001249", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001249.tgz", - "integrity": "sha512-vcX4U8lwVXPdqzPWi6cAJ3FnQaqXbBqy/GZseKNQzRj37J7qZdGcBtxq/QLFNLLlfsoXLUdHw8Iwenri86Tagw==", - "dev": true - }, - "catering": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz", - "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==", - "requires": { - "queue-tick": "^1.0.0" - } - }, - "cbor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", - "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", - "requires": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" - } - }, - "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chai-checkmark": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chai-checkmark/-/chai-checkmark-1.0.1.tgz", - "integrity": "sha1-n7s8mtkQHwl+8ogyjTD0In10//s=" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "cid-tool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cid-tool/-/cid-tool-1.0.0.tgz", - "integrity": "sha512-K7NGZBo1P6N2ogUmBtJWwMNfqXxU3ROiCHs+YKDDwBecsZ46J+9vJ6pOEJzds1JzqRnYRxxZBPfgBEYQebMXJg==", - "requires": { - "cids": "^1.0.0", - "explain-error": "^1.0.4", - "multibase": "^3.0.0", - "multihashes": "^3.0.1", - "split2": "^3.1.1", - "uint8arrays": "^1.1.0", - "yargs": "^15.0.2" - }, - "dependencies": { - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - } - } - }, - "cids": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.7.tgz", - "integrity": "sha512-dlh+K0hMwFAFFjWQ2ZzxOhgGVNVREPdmk8cqHFui2U4sOodcemLMxdE5Ujga4cDcDQhWfldEPThkfu6KWBt1eA==", - "requires": { - "multibase": "^4.0.1", - "multicodec": "^3.0.1", - "multihashes": "^4.0.1", - "uint8arrays": "^2.1.3" - }, - "dependencies": { - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "multicodec": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.1.0.tgz", - "integrity": "sha512-f6d4DhbQ9a8WiJ/wpbKgeJSeR0/juP/1wnjbKdZ0KAWDkC/z7Lb3xOegMUG+uTcfwSYf6j1eTvFf8HDgqPRGmQ==", - "requires": { - "uint8arrays": "^2.1.5", - "varint": "^6.0.0" - } - }, - "multihashes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", - "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.2" - }, - "dependencies": { - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - } - } - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "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", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "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" - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "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==" - }, - "colorette": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", - "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.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==", - "dev": true - }, - "cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.1" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "dag-cbor-links": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dag-cbor-links/-/dag-cbor-links-2.0.2.tgz", - "integrity": "sha512-PS5skw2eGKVZ1VVu9wquoIoefgMvKhl9/OItzf+7UMot0Nnd3oe/Ai5AP48GvEkAi6GkmglhWwuoKF23hTHJqQ==", - "requires": { - "cids": "^1.0.0", - "ipld-dag-cbor": "^0.17.0" - } - }, - "datastore-core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-2.0.1.tgz", - "integrity": "sha512-er9DVcug5aM/qJFaG7pFmYah1f5XvUsHZ5nf9+MOFUKB3pCLlQIrClSu+Nl9hfROS9yiou6i5dFZu9PL9IQ+gQ==", - "requires": { - "debug": "^4.1.1", - "interface-datastore": "^2.0.0", - "ipfs-utils": "^4.0.1" - }, - "dependencies": { - "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" - } - }, - "ipfs-utils": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-4.0.1.tgz", - "integrity": "sha512-6mg+S1sbjj+Ff+uoHOhVeC4myfV2tb2sHcdYwfpJ4ZcBo9WfdxSMnWFLiC5bIqByyJuN/g5aWgz3ozjKDzND1Q==", - "requires": { - "@achingbrain/electron-fetch": "^1.7.2", - "abort-controller": "^3.0.0", - "any-signal": "^2.1.0", - "buffer": "^6.0.1", - "err-code": "^2.0.0", - "fs-extra": "^9.0.1", - "is-electron": "^2.2.0", - "iso-url": "^1.0.0", - "it-glob": "0.0.10", - "merge-options": "^2.0.0", - "nanoid": "^3.1.3", - "native-abort-controller": "0.0.3", - "native-fetch": "^2.0.0", - "node-fetch": "^2.6.0", - "stream-to-it": "^0.2.0" - } - }, - "iso-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", - "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==" - } - } - }, - "datastore-fs": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/datastore-fs/-/datastore-fs-3.0.2.tgz", - "integrity": "sha512-U9cmNMwopBzxSPnkwVC53OxPXbF9GNWpqAhdI/nxj2Xu1pShmCm/pwyZjd+HthHSwAbOdmEhQK/MLLaKWNylYQ==", - "requires": { - "datastore-core": "^3.0.0", - "fast-write-atomic": "^0.2.0", - "interface-datastore": "^3.0.3", - "it-glob": "^0.0.11", - "mkdirp": "^1.0.4" - }, - "dependencies": { - "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" - } - }, - "datastore-core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-3.0.0.tgz", - "integrity": "sha512-3jEv4DCPcDUYqZ5bc5TKwWhF8Rc4pykNxMoCKx5SxOWyTKqE1EX31JmC6eNGRKiAI1rLF3+i4AyW0UvY2LROGg==", - "requires": { - "debug": "^4.1.1", - "interface-datastore": "^3.0.1" - } - }, - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "interface-datastore": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-3.0.6.tgz", - "integrity": "sha512-ruF9CVmtKCNfzCZYW6YeEKDRDbgFaiKGrSWof19BVCv6Qx/WrL1jRV4sCQUHCaXwJI7FCFknhw++PGafWCXvfw==", - "requires": { - "err-code": "^3.0.1", - "ipfs-utils": "^6.0.0", - "iso-random-stream": "^2.0.0", - "it-all": "^1.0.2", - "it-drain": "^1.0.1", - "nanoid": "^3.0.2" - } - }, - "ipfs-utils": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-6.0.8.tgz", - "integrity": "sha512-mDDQaDisI/uWk+X08wyw+jBcq76IXwMjgyaoyEgJDb/Izb+QbBCSJjo9q+EvbMxh6/l6q0NiAfbbsxEyQYPW9w==", - "requires": { - "abort-controller": "^3.0.0", - "any-signal": "^2.1.0", - "buffer": "^6.0.1", - "electron-fetch": "^1.7.2", - "err-code": "^3.0.1", - "is-electron": "^2.2.0", - "iso-url": "^1.0.0", - "it-glob": "~0.0.11", - "it-to-stream": "^1.0.0", - "merge-options": "^3.0.4", - "nanoid": "^3.1.20", - "native-abort-controller": "^1.0.3", - "native-fetch": "^3.0.0", - "node-fetch": "^2.6.1", - "stream-to-it": "^0.2.2" - } - }, - "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==", - "requires": { - "events": "^3.3.0", - "readable-stream": "^3.4.0" - } - }, - "iso-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", - "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==" - }, - "it-glob": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.11.tgz", - "integrity": "sha512-p02iVYsvOPU7cW4sV9BC62Kz6Mz2aUTJz/cKWDeFqc05kzB3WgSq8OobZabVA/K4boSm6q+s0xOZ8xiArLSoXQ==", - "requires": { - "fs-extra": "^9.0.1", - "minimatch": "^3.0.4" - } - }, - "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" - } - }, - "merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "requires": { - "is-plain-obj": "^2.1.0" - } - }, - "native-abort-controller": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/native-abort-controller/-/native-abort-controller-1.0.4.tgz", - "integrity": "sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==" - }, - "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==" - } - } - }, - "datastore-level": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/datastore-level/-/datastore-level-3.0.0.tgz", - "integrity": "sha512-4dwXIuZpEFJTwtLvwFudYluMKQRnFDGILetF0ufvq1yAotkZcD2fsyWSC49cCsbBCKZNXq24UsvyWcnFrqTuiw==", - "requires": { - "datastore-core": "^3.0.0", - "interface-datastore": "^3.0.3", - "level": "^5.0.1" - }, - "dependencies": { - "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" - } - }, - "datastore-core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-3.0.0.tgz", - "integrity": "sha512-3jEv4DCPcDUYqZ5bc5TKwWhF8Rc4pykNxMoCKx5SxOWyTKqE1EX31JmC6eNGRKiAI1rLF3+i4AyW0UvY2LROGg==", - "requires": { - "debug": "^4.1.1", - "interface-datastore": "^3.0.1" - } - }, - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "interface-datastore": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-3.0.6.tgz", - "integrity": "sha512-ruF9CVmtKCNfzCZYW6YeEKDRDbgFaiKGrSWof19BVCv6Qx/WrL1jRV4sCQUHCaXwJI7FCFknhw++PGafWCXvfw==", - "requires": { - "err-code": "^3.0.1", - "ipfs-utils": "^6.0.0", - "iso-random-stream": "^2.0.0", - "it-all": "^1.0.2", - "it-drain": "^1.0.1", - "nanoid": "^3.0.2" - } - }, - "ipfs-utils": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-6.0.8.tgz", - "integrity": "sha512-mDDQaDisI/uWk+X08wyw+jBcq76IXwMjgyaoyEgJDb/Izb+QbBCSJjo9q+EvbMxh6/l6q0NiAfbbsxEyQYPW9w==", - "requires": { - "abort-controller": "^3.0.0", - "any-signal": "^2.1.0", - "buffer": "^6.0.1", - "electron-fetch": "^1.7.2", - "err-code": "^3.0.1", - "is-electron": "^2.2.0", - "iso-url": "^1.0.0", - "it-glob": "~0.0.11", - "it-to-stream": "^1.0.0", - "merge-options": "^3.0.4", - "nanoid": "^3.1.20", - "native-abort-controller": "^1.0.3", - "native-fetch": "^3.0.0", - "node-fetch": "^2.6.1", - "stream-to-it": "^0.2.2" - } - }, - "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==", - "requires": { - "events": "^3.3.0", - "readable-stream": "^3.4.0" - } - }, - "iso-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", - "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==" - }, - "it-glob": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.14.tgz", - "integrity": "sha512-TKKzs9CglbsihSpcwJPXN5DBUssu4akRzPlp8QJRCoLrKoaOpyY2V1qDlxx+UMivn0i114YyTd4AawWl7eqIdw==", - "requires": { - "@types/minimatch": "^3.0.4", - "minimatch": "^3.0.4" - } - }, - "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" - } - }, - "merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "requires": { - "is-plain-obj": "^2.1.0" - } - }, - "native-abort-controller": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/native-abort-controller/-/native-abort-controller-1.0.4.tgz", - "integrity": "sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==" - }, - "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==" - } - } - }, - "datastore-pubsub": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/datastore-pubsub/-/datastore-pubsub-0.4.3.tgz", - "integrity": "sha512-ObozduDPBdXN45k6AvX8apHiLjkORbRNrj5BHRt2SQhBAflU3uj+HQsyXZbnazUCiGIOjWAbr3fMZQVnef1Vtw==", - "requires": { - "debug": "^4.2.0", - "err-code": "^3.0.1", - "interface-datastore": "^2.0.0", - "uint8arrays": "^2.0.5" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "dateformat": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.5.1.tgz", - "integrity": "sha512-OD0TZ+B7yP7ZgpJf5K2DIbj3FZvFvxgFUuaqA/V5zTjAtAAXZ1E8bktHxmAGs4x5b7PflqA9LeQ84Og7wYtF7Q==" - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-equal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.3.tgz", - "integrity": "sha512-Spqdl4H+ky45I9ByyJtXteOm9CaIrPmnIPmOhrkKGNYWeDgCvJ8jNYVCTjChxW4FqGuZnLHADc8EKRMX6+CgvA==", - "dev": true, - "requires": { - "es-abstract": "^1.17.5", - "es-get-iterator": "^1.1.0", - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.2", - "is-regex": "^1.0.5", - "isarray": "^2.0.5", - "object-is": "^1.1.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.2", - "which-boxed-primitive": "^1.0.1", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.2" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", - "dev": true, - "requires": { - "strip-bom": "^4.0.0" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "deferred-leveldown": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-7.0.0.tgz", - "integrity": "sha512-QKN8NtuS3BC6m0B8vAnBls44tX1WXAFATUsJlruyAYbZpysWV3siH6o/i3g9DCHauzodksO60bdj5NazNbjCmg==", - "dev": true, - "requires": { - "abstract-leveldown": "^7.2.0", - "inherits": "^2.0.3" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "defined": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz", - "integrity": "sha1-817qfXBekzuvE7LwOz+D2SFAOz4=", - "dev": true - }, - "delay": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/delay/-/delay-4.4.1.tgz", - "integrity": "sha512-aL3AhqtfhOlT/3ai6sWXeqwnw63ATNpnUiN4HL7x9q+My5QtHlO3OIkasmug9LKzpheLdmUKGRKnYXYAS7FQkQ==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delimit-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/delimit-stream/-/delimit-stream-0.1.0.tgz", - "integrity": "sha1-m4MZR3wOX4rrPONXrjBfwl6hzSs=" - }, - "denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - }, - "diff-match-patch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", - "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "dirty-chai": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dirty-chai/-/dirty-chai-2.0.1.tgz", - "integrity": "sha512-ys79pWKvDMowIDEPC6Fig8d5THiC0DJ2gmTeGzVAoEH18J8OzLud0Jh7I9IWg3NSk8x2UocznUuFmfHCXYZx9w==" - }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - }, - "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" - }, - "dependencies": { - "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==" - } - } - }, - "dns-packet": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.3.0.tgz", - "integrity": "sha512-Nce7YLu6YCgWRvOmDBsJMo9M5/jV3lEZ5vUWnWXYmwURvPylHvq7nkDWhNmk1ZQoZZOP7oQh/S0lSxbisKOfHg==", - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "electron-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.7.3.tgz", - "integrity": "sha512-1AVMaxrHXTTMqd7EK0MGWusdqNr07Rpj8Th6bG4at0oNgIi/1LBwa9CjT/0Zy+M0k/tSJPS04nFxHj0SXDVgVw==", - "requires": { - "encoding": "^0.1.13" - } - }, - "electron-to-chromium": { - "version": "1.3.802", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.802.tgz", - "integrity": "sha512-dXB0SGSypfm3iEDxrb5n/IVKeX4uuTnFHdve7v+yKJqNpEP0D4mjFJ8e1znmSR+OOVlVC+kDO6f2kAkTFXvJBg==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "dev": true - }, - "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==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "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" - } - }, - "encoding-down": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-7.1.0.tgz", - "integrity": "sha512-ky47X5jP84ryk5EQmvedQzELwVJPjCgXDQZGeb9F6r4PdChByCGHTBrVcF3h8ynKVJ1wVbkxTsDC8zBROPypgQ==", - "dev": true, - "requires": { - "abstract-leveldown": "^7.2.0", - "inherits": "^2.0.3", - "level-codec": "^10.0.0", - "level-errors": "^3.0.0" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "engine.io": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", - "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", - "requires": { - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "ws": "~7.4.2" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" - } - } - }, - "engine.io-client": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", - "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", - "requires": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.6.2", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" - } - } - }, - "engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "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": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.18.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", - "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "event-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/event-iterator/-/event-iterator-2.0.0.tgz", - "integrity": "sha512-KGft0ldl31BZVV//jj+IAIGCxkvvUkkON+ScH6zfoX+l+omX6001ggyRSpI0Io2Hlro0ThXotswCtfzS8UkIiQ==" - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "explain-error": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/explain-error/-/explain-error-1.0.4.tgz", - "integrity": "sha1-p5PTrAytTGq1cemWj7urbLJTKSk=" - }, - "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==", - "dev": true - }, - "fast-fifo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.0.0.tgz", - "integrity": "sha512-4VEXmjxLj7sbs8J//cn2qhRap50dGzF5n8fjay8mau+Jn4hxSeR3xPFwxMaQq/pDaq7+KQk0PAbC2+nWDkJrmQ==" - }, - "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==", - "dev": true - }, - "fast-redact": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.1.tgz", - "integrity": "sha512-kYpn4Y/valC9MdrISg47tZOpYBNoTXKgT9GYXFpHN/jYFs+lFkPoisY+LcBODdKVMY96ATzvzsWv+ES/4Kmufw==" - }, - "fast-safe-stringify": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", - "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==" - }, - "fast-write-atomic": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fast-write-atomic/-/fast-write-atomic-0.2.1.tgz", - "integrity": "sha512-WvJe06IfNYlr+6cO3uQkdKdy3Cb1LlCJSF8zRs2eT8yuhdbSlR9nIt+TgQ92RUxiRrQm+/S7RARnMfCs5iuAjw==" - }, - "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 - }, - "file-type": { - "version": "16.5.3", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.3.tgz", - "integrity": "sha512-uVsl7iFhHSOY4bEONLlTK47iAHtNsFHWP5YE4xJfZ4rnX7S1Q3wce09XgqSC7E/xh8Ncv/be1lNoyprlUH/x6A==", - "requires": { - "readable-web-to-node-stream": "^3.0.0", - "strtok3": "^6.2.4", - "token-types": "^4.1.1" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "filesize": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.4.0.tgz", - "integrity": "sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==" - }, - "fill-range": { - "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" - } - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flatstr": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", - "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" - }, - "fnv1a": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fnv1a/-/fnv1a-1.0.1.tgz", - "integrity": "sha1-kV4tbQI8Q9UiStn20qPEFW9XEvU=" - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "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": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gar": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/gar/-/gar-1.0.4.tgz", - "integrity": "sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==" - }, - "gc-stats": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/gc-stats/-/gc-stats-1.4.0.tgz", - "integrity": "sha512-4FcCj9e8j8rCjvLkqRpGZBLgTC/xr9XEf5By3x77cDucWWB3pJK6FEwXZCTCbb4z8xdaOoi4owBNrvn3ciDdxA==", - "optional": true, - "requires": { - "nan": "^2.13.2", - "node-pre-gyp": "^0.13.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.3.1", - "bundled": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.13.0", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "optional": true - } - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-browser-rtc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz", - "integrity": "sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==" - }, - "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==" - }, - "get-folder-size": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/get-folder-size/-/get-folder-size-2.0.1.tgz", - "integrity": "sha512-+CEb+GDCM7tkOS2wdMKTn9vU7DgnKUTuDlehkNJKNSovdCOVxs14OfKCk4cvSaR3za4gj+OBdl9opPN9xrJ0zA==", - "requires": { - "gar": "^1.0.4", - "tiny-each-async": "2.0.3" - } - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "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", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "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" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "requires": { - "ini": "2.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globalthis": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", - "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", - "requires": { - "define-properties": "^1.1.3" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - } - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "hamt-sharding": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hamt-sharding/-/hamt-sharding-1.0.0.tgz", - "integrity": "sha512-jDk8N1U8qprvSt3KopOrrP46zUogxeZY+znDHP196MLBQKldld0TQFTneT1bxOFDw8vttbAQy1bG7L3/pzYorg==", - "requires": { - "sparse-array": "^1.3.1" - } - }, - "hapi-pino": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/hapi-pino/-/hapi-pino-8.3.0.tgz", - "integrity": "sha512-8Cm1WIs6jp8B9ZzYqPFbCWNKt6F6jNCfLmCIHmPsm35sTOvT/r5+d9KpYR2vigWQRLS23VBXzOqUVESpP7r+jA==", - "requires": { - "@hapi/hoek": "^9.0.0", - "abstract-logging": "^2.0.0", - "pino": "^6.0.0", - "pino-pretty": "^4.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" - }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "requires": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "hashlru": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz", - "integrity": "sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==" - }, - "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 - }, - "heap": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz", - "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=" - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=" - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, - "import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "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", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "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==" - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, - "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" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" - }, - "interface-datastore": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-2.0.1.tgz", - "integrity": "sha512-a4xHvVE8JCG8UItP0CCq+UJyBHZxhMp3esuFNjb3U9rP+tzKiG0HZXz8gIIwic6VbuE0Gui2whbJyJOFpMxhLg==", - "requires": { - "class-is": "^1.1.0", - "err-code": "^2.0.1", - "ipfs-utils": "^4.0.1", - "iso-random-stream": "^1.1.1", - "it-all": "^1.0.2", - "it-drain": "^1.0.1", - "nanoid": "^3.0.2" - }, - "dependencies": { - "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" - } - }, - "ipfs-utils": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-4.0.1.tgz", - "integrity": "sha512-6mg+S1sbjj+Ff+uoHOhVeC4myfV2tb2sHcdYwfpJ4ZcBo9WfdxSMnWFLiC5bIqByyJuN/g5aWgz3ozjKDzND1Q==", - "requires": { - "@achingbrain/electron-fetch": "^1.7.2", - "abort-controller": "^3.0.0", - "any-signal": "^2.1.0", - "buffer": "^6.0.1", - "err-code": "^2.0.0", - "fs-extra": "^9.0.1", - "is-electron": "^2.2.0", - "iso-url": "^1.0.0", - "it-glob": "0.0.10", - "merge-options": "^2.0.0", - "nanoid": "^3.1.3", - "native-abort-controller": "0.0.3", - "native-fetch": "^2.0.0", - "node-fetch": "^2.6.0", - "stream-to-it": "^0.2.0" - } - }, - "iso-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", - "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==" - } - } - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "ip-address": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-7.1.0.tgz", - "integrity": "sha512-V9pWC/VJf2lsXqP7IWJ+pe3P1/HCYGBMZrrnT62niLGjAfCbeiwXMUxaeHvnVlz19O27pvXP4azs+Pj/A0x+SQ==", - "requires": { - "jsbn": "1.1.0", - "sprintf-js": "1.1.2" - } - }, - "ip-regex": { - "version": "4.3.0", - "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": { - "version": "0.52.3", - "resolved": "https://registry.npmjs.org/ipfs/-/ipfs-0.52.3.tgz", - "integrity": "sha512-zCd2Ziq1GYDJizXdoAj5nof325i3mx2kzOhG6E+xdEK6FcK6kQwKendaBlQHwTbzHLqLI7ITxsepQzFWNopI2g==", - "requires": { - "debug": "^4.1.1", - "ipfs-cli": "^0.2.3", - "ipfs-core": "^0.3.1", - "ipfs-repo": "^7.0.0", - "semver": "^7.3.2", - "update-notifier": "^5.0.0" - } - }, - "ipfs-bitswap": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/ipfs-bitswap/-/ipfs-bitswap-4.0.2.tgz", - "integrity": "sha512-9fYoCL7G0Qu3z4r99j2xVWLbYnB9kK+JdTSEt1XNquPW8tA89U44ZfLxaq2C/LuxbQLkV0/C26WZtrCd1QYllQ==", - "requires": { - "abort-controller": "^3.0.0", - "any-signal": "^2.1.1", - "bignumber.js": "^9.0.0", - "cids": "^1.0.0", - "debug": "^4.1.0", - "ipld-block": "^0.11.0", - "it-length-prefixed": "^3.0.0", - "it-pipe": "^1.1.0", - "just-debounce-it": "^1.1.0", - "libp2p-interfaces": "^0.8.3", - "moving-average": "^1.0.0", - "multicodec": "^2.0.0", - "multihashing-async": "^2.0.1", - "protons": "^2.0.0", - "streaming-iterables": "^5.0.2", - "uint8arrays": "^2.0.5", - "varint-decoder": "^1.0.0" - }, - "dependencies": { - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "ipfs-block-service": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/ipfs-block-service/-/ipfs-block-service-0.18.0.tgz", - "integrity": "sha512-tye5Uxbf3bYlfcGkV3CspP2JNcM2Ggm/5Kxph0jGKtAZtgfFxUq3NeSmvS6nGtZZBaFP4nwRF2yq7dQMALWzVg==", - "requires": { - "err-code": "^2.0.0", - "streaming-iterables": "^5.0.2" - } - }, - "ipfs-cli": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/ipfs-cli/-/ipfs-cli-0.2.3.tgz", - "integrity": "sha512-3DGUh/V9INVPG5dv0bT1DQpjVM5diKEVrVYSMtk/h5enVPbNHTZ+Dz4zOwjRsob5QQNkdVQWdHnhCcRHNyWFCA==", - "requires": { - "bignumber.js": "^9.0.0", - "byteman": "^1.3.5", - "cid-tool": "^1.0.0", - "cids": "^1.0.0", - "debug": "^4.1.1", - "err-code": "^2.0.3", - "execa": "^5.0.0", - "get-folder-size": "^2.0.1", - "ipfs-core": "^0.3.1", - "ipfs-core-utils": "^0.5.4", - "ipfs-daemon": "^0.3.2", - "ipfs-http-client": "^48.1.3", - "ipfs-repo": "^7.0.0", - "ipfs-utils": "^5.0.0", - "ipld-dag-cbor": "^0.17.0", - "ipld-dag-pb": "^0.20.0", - "it-all": "^1.0.4", - "it-concat": "^1.0.1", - "it-first": "^1.0.4", - "it-glob": "0.0.10", - "it-pipe": "^1.1.0", - "jsondiffpatch": "^0.4.1", - "libp2p-crypto": "^0.18.0", - "mafmt": "^8.0.0", - "multiaddr": "^8.0.0", - "multiaddr-to-uri": "^6.0.0", - "multibase": "^3.0.0", - "multihashing-async": "^2.0.1", - "parse-duration": "^0.4.4", - "peer-id": "^0.14.1", - "pretty-bytes": "^5.4.1", - "progress": "^2.0.3", - "stream-to-it": "^0.2.2", - "streaming-iterables": "^5.0.2", - "uint8arrays": "^1.1.0", - "yargs": "^16.0.3" - } - }, - "ipfs-core": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ipfs-core/-/ipfs-core-0.3.1.tgz", - "integrity": "sha512-d94i8Bvhm+0a38rZG2q7EcQXcVT4cTkjCZAu7ZZ4HOWyB0EevqrxH6D7VK3zv6fe+iOC6iv4qrB+Wtt1pE6NVw==", - "requires": { - "array-shuffle": "^1.0.1", - "bignumber.js": "^9.0.0", - "cbor": "^5.1.0", - "cids": "^1.0.0", - "class-is": "^1.1.0", - "dag-cbor-links": "^2.0.0", - "datastore-core": "^2.0.0", - "datastore-pubsub": "^0.4.1", - "debug": "^4.1.1", - "dlv": "^1.1.3", - "err-code": "^2.0.3", - "hamt-sharding": "^1.0.0", - "hashlru": "^2.3.0", - "interface-datastore": "^2.0.0", - "ipfs-bitswap": "^4.0.0", - "ipfs-block-service": "^0.18.0", - "ipfs-core-utils": "^0.5.4", - "ipfs-repo": "^7.0.0", - "ipfs-unixfs": "^2.0.3", - "ipfs-unixfs-exporter": "^3.0.4", - "ipfs-unixfs-importer": "^5.0.0", - "ipfs-utils": "^5.0.0", - "ipld": "^0.28.0", - "ipld-block": "^0.11.0", - "ipld-dag-cbor": "^0.17.0", - "ipld-dag-pb": "^0.20.0", - "ipld-raw": "^6.0.0", - "ipns": "^0.8.0", - "is-domain-name": "^1.0.1", - "is-ipfs": "^2.0.0", - "it-all": "^1.0.4", - "it-first": "^1.0.4", - "it-last": "^1.0.4", - "it-pipe": "^1.1.0", - "libp2p": "^0.29.3", - "libp2p-bootstrap": "^0.12.1", - "libp2p-crypto": "^0.18.0", - "libp2p-floodsub": "^0.23.1", - "libp2p-gossipsub": "^0.6.1", - "libp2p-kad-dht": "^0.20.1", - "libp2p-mdns": "^0.15.0", - "libp2p-mplex": "^0.10.0", - "libp2p-noise": "^2.0.1", - "libp2p-record": "^0.9.0", - "libp2p-tcp": "^0.15.1", - "libp2p-webrtc-star": "^0.20.1", - "libp2p-websockets": "^0.14.0", - "mafmt": "^8.0.0", - "merge-options": "^2.0.0", - "mortice": "^2.0.0", - "multiaddr": "^8.0.0", - "multiaddr-to-uri": "^6.0.0", - "multibase": "^3.0.0", - "multicodec": "^2.0.1", - "multihashing-async": "^2.0.1", - "native-abort-controller": "~0.0.3", - "p-queue": "^6.6.1", - "parse-duration": "^0.4.4", - "peer-id": "^0.14.1", - "streaming-iterables": "^5.0.2", - "uint8arrays": "^1.1.0" - } - }, - "ipfs-core-utils": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/ipfs-core-utils/-/ipfs-core-utils-0.5.4.tgz", - "integrity": "sha512-V+OHCkqf/263jHU0Fc9Rx/uDuwlz3PHxl3qu6a5ka/mNi6gucbFuI53jWsevCrOOY9giWMLB29RINGmCV5dFeQ==", - "requires": { - "any-signal": "^2.0.0", - "blob-to-it": "^1.0.1", - "browser-readablestream-to-it": "^1.0.1", - "cids": "^1.0.0", - "err-code": "^2.0.3", - "ipfs-utils": "^5.0.0", - "it-all": "^1.0.4", - "it-map": "^1.0.4", - "it-peekable": "^1.0.1", - "multiaddr": "^8.0.0", - "multiaddr-to-uri": "^6.0.0", - "parse-duration": "^0.4.4", - "timeout-abort-controller": "^1.1.1", - "uint8arrays": "^1.1.0" - } - }, - "ipfs-daemon": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ipfs-daemon/-/ipfs-daemon-0.3.2.tgz", - "integrity": "sha512-MBpwB0zpYU17/ZZ4jGMGNvOHx6SYOOZyTfViw+dy/P3JZmeTZBzhPJQOZ0vwwnJI7OIwWscEakJWV4q4c6hrJw==", - "requires": { - "debug": "^4.1.1", - "dlv": "^1.1.3", - "ipfs-core": "^0.3.1", - "ipfs-http-client": "^48.1.3", - "ipfs-http-gateway": "^0.1.4", - "ipfs-http-server": "^0.1.4", - "ipfs-utils": "^5.0.0", - "just-safe-set": "^2.1.0", - "libp2p": "^0.29.3", - "libp2p-delegated-content-routing": "^0.8.0", - "libp2p-delegated-peer-routing": "^0.8.0", - "libp2p-webrtc-star": "^0.20.1", - "multiaddr": "^8.0.0", - "prom-client": "^12.0.0", - "prometheus-gc-stats": "^0.6.0" - }, - "dependencies": { - "prom-client": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-12.0.0.tgz", - "integrity": "sha512-JbzzHnw0VDwCvoqf8y1WDtq4wSBAbthMB1pcVI/0lzdqHGJI3KBJDXle70XK+c7Iv93Gihqo0a5LlOn+g8+DrQ==", - "optional": true, - "requires": { - "tdigest": "^0.1.1" - } - } - } - }, - "ipfs-http-client": { - "version": "48.1.3", - "resolved": "https://registry.npmjs.org/ipfs-http-client/-/ipfs-http-client-48.1.3.tgz", - "integrity": "sha512-+JV4cdMaTvYN3vd4r6+mcVxV3LkJXzc4kn2ToVbObpVpdqmG34ePf1KlvFF8A9gjcel84WpiP5xCEV/IrisPBA==", - "requires": { - "any-signal": "^2.0.0", - "bignumber.js": "^9.0.0", - "cids": "^1.0.0", - "debug": "^4.1.1", - "form-data": "^3.0.0", - "ipfs-core-utils": "^0.5.4", - "ipfs-utils": "^5.0.0", - "ipld-block": "^0.11.0", - "ipld-dag-cbor": "^0.17.0", - "ipld-dag-pb": "^0.20.0", - "ipld-raw": "^6.0.0", - "it-last": "^1.0.4", - "it-map": "^1.0.4", - "it-tar": "^1.2.2", - "it-to-stream": "^0.1.2", - "merge-options": "^2.0.0", - "multiaddr": "^8.0.0", - "multibase": "^3.0.0", - "multicodec": "^2.0.1", - "multihashes": "^3.0.1", - "nanoid": "^3.1.12", - "native-abort-controller": "~0.0.3", - "parse-duration": "^0.4.4", - "stream-to-it": "^0.2.2", - "uint8arrays": "^1.1.0" - } - }, - "ipfs-http-gateway": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/ipfs-http-gateway/-/ipfs-http-gateway-0.1.4.tgz", - "integrity": "sha512-/WuCFC5k31DiIIplGatyJnMmJ74YLnv12xU5DR1rr3E7abKLdyyvaca4cQz3iz2hFcTKvnD3+rRelbXH785JiA==", - "requires": { - "@hapi/ammo": "^5.0.1", - "@hapi/boom": "^9.1.0", - "@hapi/hapi": "^20.0.0", - "cids": "^1.0.0", - "debug": "^4.1.1", - "hapi-pino": "^8.3.0", - "ipfs-core-utils": "^0.5.4", - "ipfs-http-response": "^0.6.0", - "is-ipfs": "^2.0.0", - "it-last": "^1.0.4", - "it-to-stream": "^0.1.2", - "joi": "^17.2.1", - "multibase": "^3.0.0", - "uint8arrays": "^1.1.0", - "uri-to-multiaddr": "^4.0.0" - } - }, - "ipfs-http-response": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/ipfs-http-response/-/ipfs-http-response-0.6.4.tgz", - "integrity": "sha512-ltQgWaK72IJC7wmwrCZdhewA5Rq2G666y9R4CXkU1rgcqvXDyC0izEDJZN9xNXg17ib9ieS3Dcqc4k+A1te8xw==", - "requires": { - "debug": "^4.1.1", - "file-type": "^16.0.0", - "filesize": "^6.1.0", - "it-buffer": "^0.1.1", - "it-concat": "^2.0.0", - "it-reader": "^3.0.0", - "it-to-stream": "^1.0.0", - "mime-types": "^2.1.27", - "multihashes": "^4.0.2", - "p-try-each": "^1.0.1" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "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-reader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-3.0.0.tgz", - "integrity": "sha512-NxR40odATeaBmSefn6Xn43DplYvn2KtEKQzn4jrTRuPYXMky5M4e+KQ7aTJh0k0vkytLyeenGO1I1GXlGm4laQ==", - "requires": { - "bl": "^5.0.0" - } - }, - "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" - } - }, - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "multihashes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", - "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.2" - } - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - } - } - }, - "ipfs-http-server": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/ipfs-http-server/-/ipfs-http-server-0.1.4.tgz", - "integrity": "sha512-EyGqwvYpOJHIW6eJ5te2UjjMA073JwabL7oNfCvITFb5ZcRKd76+ox0TDSHlkKUeWN8JP7T/00wYRj+8km2Oyg==", - "requires": { - "@hapi/boom": "^9.1.0", - "@hapi/content": "^5.0.2", - "@hapi/hapi": "^20.0.0", - "cids": "^1.0.0", - "debug": "^4.1.1", - "dlv": "^1.1.3", - "err-code": "^2.0.3", - "hapi-pino": "^8.3.0", - "ipfs-core-utils": "^0.5.4", - "ipfs-http-gateway": "^0.1.4", - "ipfs-unixfs": "^2.0.3", - "ipld-dag-pb": "^0.20.0", - "it-all": "^1.0.4", - "it-drain": "^1.0.3", - "it-first": "^1.0.4", - "it-last": "^1.0.4", - "it-map": "^1.0.4", - "it-multipart": "^1.0.5", - "it-pipe": "^1.1.0", - "it-tar": "^1.2.2", - "it-to-stream": "^0.1.2", - "iterable-ndjson": "^1.1.0", - "joi": "^17.2.1", - "just-safe-set": "^2.1.0", - "multiaddr": "^8.0.0", - "multibase": "^3.0.0", - "multicodec": "^2.0.1", - "multihashing-async": "^2.0.1", - "native-abort-controller": "~0.0.3", - "parse-duration": "^0.4.4", - "prom-client": "^12.0.0", - "stream-to-it": "^0.2.2", - "streaming-iterables": "^5.0.2", - "uint8arrays": "^1.1.0", - "uri-to-multiaddr": "^4.0.0" - }, - "dependencies": { - "multicodec": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-2.1.3.tgz", - "integrity": "sha512-0tOH2Gtio39uO41o+2xl9UhRkCWxU5ZmZSbFCh/OjGzkWJI8e6lkN/s4Mj1YfyWoBod+2+S3W+6wO6nhkwN8pA==", - "requires": { - "uint8arrays": "1.1.0", - "varint": "^6.0.0" - } - }, - "prom-client": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-12.0.0.tgz", - "integrity": "sha512-JbzzHnw0VDwCvoqf8y1WDtq4wSBAbthMB1pcVI/0lzdqHGJI3KBJDXle70XK+c7Iv93Gihqo0a5LlOn+g8+DrQ==", - "optional": true, - "requires": { - "tdigest": "^0.1.1" - } - } - } - }, - "ipfs-repo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ipfs-repo/-/ipfs-repo-7.0.1.tgz", - "integrity": "sha512-kkw3AoRnDppb2dcZUp6ofZC+7i/Kw1L7luvT/R7mCZWPSr4CiVf3RAQtSzvrfAO5MLFMwWsQM2ricK2dHN4rug==", - "requires": { - "bignumber.js": "^9.0.0", - "bytes": "^3.1.0", - "cids": "^1.0.0", - "datastore-core": "^3.0.0", - "datastore-fs": "^3.0.0", - "datastore-level": "^3.0.0", - "debug": "^4.1.0", - "err-code": "^2.0.0", - "interface-datastore": "^3.0.3", - "ipfs-repo-migrations": "^5.0.3", - "ipfs-utils": "^6.0.0", - "ipld-block": "^0.11.0", - "it-map": "^1.0.2", - "it-pushable": "^1.4.0", - "just-safe-get": "^2.0.0", - "just-safe-set": "^2.1.0", - "multibase": "^3.0.0", - "p-queue": "^6.0.0", - "proper-lockfile": "^4.0.0", - "sort-keys": "^4.0.0", - "uint8arrays": "^2.0.5" - }, - "dependencies": { - "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" - } - }, - "datastore-core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-3.0.0.tgz", - "integrity": "sha512-3jEv4DCPcDUYqZ5bc5TKwWhF8Rc4pykNxMoCKx5SxOWyTKqE1EX31JmC6eNGRKiAI1rLF3+i4AyW0UvY2LROGg==", - "requires": { - "debug": "^4.1.1", - "interface-datastore": "^3.0.1" - } - }, - "interface-datastore": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-3.0.6.tgz", - "integrity": "sha512-ruF9CVmtKCNfzCZYW6YeEKDRDbgFaiKGrSWof19BVCv6Qx/WrL1jRV4sCQUHCaXwJI7FCFknhw++PGafWCXvfw==", - "requires": { - "err-code": "^3.0.1", - "ipfs-utils": "^6.0.0", - "iso-random-stream": "^2.0.0", - "it-all": "^1.0.2", - "it-drain": "^1.0.1", - "nanoid": "^3.0.2" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - } - } - }, - "ipfs-utils": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-6.0.8.tgz", - "integrity": "sha512-mDDQaDisI/uWk+X08wyw+jBcq76IXwMjgyaoyEgJDb/Izb+QbBCSJjo9q+EvbMxh6/l6q0NiAfbbsxEyQYPW9w==", - "requires": { - "abort-controller": "^3.0.0", - "any-signal": "^2.1.0", - "buffer": "^6.0.1", - "electron-fetch": "^1.7.2", - "err-code": "^3.0.1", - "is-electron": "^2.2.0", - "iso-url": "^1.0.0", - "it-glob": "~0.0.11", - "it-to-stream": "^1.0.0", - "merge-options": "^3.0.4", - "nanoid": "^3.1.20", - "native-abort-controller": "^1.0.3", - "native-fetch": "^3.0.0", - "node-fetch": "^2.6.1", - "stream-to-it": "^0.2.2" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - } - } - }, - "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==", - "requires": { - "events": "^3.3.0", - "readable-stream": "^3.4.0" - } - }, - "iso-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", - "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==" - }, - "it-glob": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.14.tgz", - "integrity": "sha512-TKKzs9CglbsihSpcwJPXN5DBUssu4akRzPlp8QJRCoLrKoaOpyY2V1qDlxx+UMivn0i114YyTd4AawWl7eqIdw==", - "requires": { - "@types/minimatch": "^3.0.4", - "minimatch": "^3.0.4" - } - }, - "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" - } - }, - "merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "requires": { - "is-plain-obj": "^2.1.0" - } - }, - "native-abort-controller": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/native-abort-controller/-/native-abort-controller-1.0.4.tgz", - "integrity": "sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==" - }, - "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==" - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "ipfs-repo-migrations": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/ipfs-repo-migrations/-/ipfs-repo-migrations-5.0.6.tgz", - "integrity": "sha512-5AN8fLP+43LGztbmtq52Ig9lL/v+cRr2esQltis/c7/b309bmkj0lqK2wQblaOw03RmUMLBrB9IGKsgd8ztW4w==", - "requires": { - "cbor": "^6.0.1", - "cids": "^1.0.0", - "datastore-core": "^3.0.0", - "debug": "^4.1.0", - "fnv1a": "^1.0.1", - "interface-datastore": "^3.0.3", - "ipld-dag-pb": "^0.20.0", - "it-length": "^1.0.1", - "multibase": "^3.0.0", - "multicodec": "^2.0.0", - "multihashing-async": "^2.0.0", - "proper-lockfile": "^4.1.1", - "protons": "^2.0.0", - "uint8arrays": "^2.0.5", - "varint": "^6.0.0" - }, - "dependencies": { - "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" - } - }, - "cbor": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-6.0.1.tgz", - "integrity": "sha512-gVJ2e/DFInWOriOUqNyrZe5xN8RSK49X7G+pLalz32GwKs1xHNXtrkcbV5K4+Z2X7qJiv6f700PnUEaJoIEPGQ==", - "requires": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" - } - }, - "datastore-core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-3.0.0.tgz", - "integrity": "sha512-3jEv4DCPcDUYqZ5bc5TKwWhF8Rc4pykNxMoCKx5SxOWyTKqE1EX31JmC6eNGRKiAI1rLF3+i4AyW0UvY2LROGg==", - "requires": { - "debug": "^4.1.1", - "interface-datastore": "^3.0.1" - } - }, - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "interface-datastore": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-3.0.6.tgz", - "integrity": "sha512-ruF9CVmtKCNfzCZYW6YeEKDRDbgFaiKGrSWof19BVCv6Qx/WrL1jRV4sCQUHCaXwJI7FCFknhw++PGafWCXvfw==", - "requires": { - "err-code": "^3.0.1", - "ipfs-utils": "^6.0.0", - "iso-random-stream": "^2.0.0", - "it-all": "^1.0.2", - "it-drain": "^1.0.1", - "nanoid": "^3.0.2" - } - }, - "ipfs-utils": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-6.0.8.tgz", - "integrity": "sha512-mDDQaDisI/uWk+X08wyw+jBcq76IXwMjgyaoyEgJDb/Izb+QbBCSJjo9q+EvbMxh6/l6q0NiAfbbsxEyQYPW9w==", - "requires": { - "abort-controller": "^3.0.0", - "any-signal": "^2.1.0", - "buffer": "^6.0.1", - "electron-fetch": "^1.7.2", - "err-code": "^3.0.1", - "is-electron": "^2.2.0", - "iso-url": "^1.0.0", - "it-glob": "~0.0.11", - "it-to-stream": "^1.0.0", - "merge-options": "^3.0.4", - "nanoid": "^3.1.20", - "native-abort-controller": "^1.0.3", - "native-fetch": "^3.0.0", - "node-fetch": "^2.6.1", - "stream-to-it": "^0.2.2" - } - }, - "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==", - "requires": { - "events": "^3.3.0", - "readable-stream": "^3.4.0" - } - }, - "iso-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", - "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==" - }, - "it-glob": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.14.tgz", - "integrity": "sha512-TKKzs9CglbsihSpcwJPXN5DBUssu4akRzPlp8QJRCoLrKoaOpyY2V1qDlxx+UMivn0i114YyTd4AawWl7eqIdw==", - "requires": { - "@types/minimatch": "^3.0.4", - "minimatch": "^3.0.4" - } - }, - "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" - } - }, - "merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "requires": { - "is-plain-obj": "^2.1.0" - } - }, - "native-abort-controller": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/native-abort-controller/-/native-abort-controller-1.0.4.tgz", - "integrity": "sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==" - }, - "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==" - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "ipfs-unixfs": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-2.0.4.tgz", - "integrity": "sha512-b8dL8DZSwv0G3WTy8XnH1+Vzj/UydNI4yK/7/j3Ywyx+3yAQW566bdgaW1zvEFWTT3tBK1h3iJrRNHRs3CnBJA==", - "requires": { - "err-code": "^2.0.0", - "protons": "^2.0.0" - } - }, - "ipfs-unixfs-exporter": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/ipfs-unixfs-exporter/-/ipfs-unixfs-exporter-3.0.7.tgz", - "integrity": "sha512-ZYpE8SVLcvxDVb9+aKwthf7a4gRFSHqbEJaVrvVOpeXKSG66WTrI0KQR14sIk0v4SYOaUSWrWVXsSjUbONrVHg==", - "requires": { - "cids": "^1.0.0", - "err-code": "^2.0.0", - "hamt-sharding": "^1.0.0", - "ipfs-unixfs": "^2.0.4", - "ipfs-utils": "^5.0.0", - "it-last": "^1.0.1", - "multihashing-async": "^2.0.0" - } - }, - "ipfs-unixfs-importer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ipfs-unixfs-importer/-/ipfs-unixfs-importer-5.0.0.tgz", - "integrity": "sha512-bvdnCXwwCj72w/FQ7o6XcvrcbCUgXrruK0UZOfhl/mf44Nv0DWyn1Y4hQF/u63rJvYLQdAMlqniAAtFQpHQhcg==", - "requires": { - "bl": "^4.0.0", - "err-code": "^2.0.0", - "hamt-sharding": "^1.0.0", - "ipfs-unixfs": "^2.0.4", - "ipfs-utils": "^5.0.0", - "ipld-dag-pb": "^0.20.0", - "it-all": "^1.0.1", - "it-batch": "^1.0.3", - "it-first": "^1.0.1", - "it-parallel-batch": "^1.0.3", - "merge-options": "^3.0.3", - "multihashing-async": "^2.0.0", - "rabin-wasm": "^0.1.1", - "uint8arrays": "^1.1.0" - }, - "dependencies": { - "merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "requires": { - "is-plain-obj": "^2.1.0" - } - } - } - }, - "ipfs-utils": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-5.0.1.tgz", - "integrity": "sha512-28KZPgO4Uf5duT2ORLAYfboUp98iUshDD7yRAfbNxNAR8Dtidfn6o20rZfoXnkri2zKBVIPlJkuCPmPJB+6erg==", - "requires": { - "abort-controller": "^3.0.0", - "any-signal": "^2.1.0", - "buffer": "^6.0.1", - "electron-fetch": "^1.7.2", - "err-code": "^2.0.0", - "fs-extra": "^9.0.1", - "is-electron": "^2.2.0", - "iso-url": "^1.0.0", - "it-glob": "0.0.10", - "it-to-stream": "^0.1.2", - "merge-options": "^2.0.0", - "nanoid": "^3.1.3", - "native-abort-controller": "0.0.3", - "native-fetch": "^2.0.0", - "node-fetch": "^2.6.0", - "stream-to-it": "^0.2.0" - }, - "dependencies": { - "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" - } - }, - "iso-url": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.1.5.tgz", - "integrity": "sha512-+3JqoKdBTGmyv9vOkS6b9iHhvK34UajfTibrH/1HOK8TI7K2VsM0qOCd+aJdWKtSOA8g3PqZfcwDmnR0p3klqQ==" - } - } - }, - "ipld": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/ipld/-/ipld-0.28.0.tgz", - "integrity": "sha512-lERRFJb17Phi3x06sSirFgCkmSw8lNqOwn2CiBexu0Amo6ICTXULuSZcDeM1AN4+fSzebQgEc8bBIV4zW7dv0A==", - "requires": { - "cids": "^1.0.0", - "ipld-block": "^0.11.0", - "ipld-dag-cbor": "^0.17.0", - "ipld-dag-pb": "^0.20.0", - "ipld-raw": "^6.0.0", - "merge-options": "^2.0.0", - "multicodec": "^2.0.0", - "typical": "^6.0.0" - } - }, - "ipld-block": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/ipld-block/-/ipld-block-0.11.1.tgz", - "integrity": "sha512-sDqqLqD5qh4QzGq6ssxLHUCnH4emCf/8F8IwjQM2cjEEIEHMUj57XhNYgmGbemdYPznUhffxFGEHsruh5+HQRw==", - "requires": { - "cids": "^1.0.0" - } - }, - "ipld-dag-cbor": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/ipld-dag-cbor/-/ipld-dag-cbor-0.17.0.tgz", - "integrity": "sha512-YprSTQClJQUyC+RhbWrVXhg7ysII5R/jrmZZ4en4n9Mav+MRbntAW699zd1PHRLB71lNCJbxABE2Uc9QU2Ka7g==", - "requires": { - "borc": "^2.1.2", - "cids": "^1.0.0", - "is-circular": "^1.0.2", - "multicodec": "^2.0.0", - "multihashing-async": "^2.0.0", - "uint8arrays": "^1.0.0" - }, - "dependencies": { - "multicodec": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-2.1.3.tgz", - "integrity": "sha512-0tOH2Gtio39uO41o+2xl9UhRkCWxU5ZmZSbFCh/OjGzkWJI8e6lkN/s4Mj1YfyWoBod+2+S3W+6wO6nhkwN8pA==", - "requires": { - "uint8arrays": "1.1.0", - "varint": "^6.0.0" - } - } - } - }, - "ipld-dag-pb": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/ipld-dag-pb/-/ipld-dag-pb-0.20.0.tgz", - "integrity": "sha512-zfM0EdaolqNjAxIrtpuGKvXxWk5YtH9jKinBuQGTcngOsWFQhyybGCTJHGNGGtRjHNJi2hz5Udy/8pzv4kcKyg==", - "requires": { - "cids": "^1.0.0", - "class-is": "^1.1.0", - "multicodec": "^2.0.0", - "multihashing-async": "^2.0.0", - "protons": "^2.0.0", - "reset": "^0.1.0", - "run": "^1.4.0", - "stable": "^0.1.8", - "uint8arrays": "^1.0.0" - }, - "dependencies": { - "multicodec": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-2.1.3.tgz", - "integrity": "sha512-0tOH2Gtio39uO41o+2xl9UhRkCWxU5ZmZSbFCh/OjGzkWJI8e6lkN/s4Mj1YfyWoBod+2+S3W+6wO6nhkwN8pA==", - "requires": { - "uint8arrays": "1.1.0", - "varint": "^6.0.0" - } - } - } - }, - "ipld-raw": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ipld-raw/-/ipld-raw-6.0.0.tgz", - "integrity": "sha512-UK7fjncAzs59iu/o2kwYtb8jgTtW6B+cNWIiNpAJkfRwqoMk1xD/6i25ktzwe4qO8gQgoR9RxA5ibC23nq8BLg==", - "requires": { - "cids": "^1.0.0", - "multicodec": "^2.0.0", - "multihashing-async": "^2.0.0" - }, - "dependencies": { - "multicodec": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-2.1.3.tgz", - "integrity": "sha512-0tOH2Gtio39uO41o+2xl9UhRkCWxU5ZmZSbFCh/OjGzkWJI8e6lkN/s4Mj1YfyWoBod+2+S3W+6wO6nhkwN8pA==", - "requires": { - "uint8arrays": "1.1.0", - "varint": "^6.0.0" - } - } - } - }, - "ipns": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/ipns/-/ipns-0.8.2.tgz", - "integrity": "sha512-TzWz5tUhMT/XJT/FnvU/TzVTqZln5aF9uBKP63ymdPY1tXU/ToF40SP7nr42VEfnf236gOEE8aR6CHOf4TG95g==", - "requires": { - "debug": "^4.2.0", - "err-code": "^2.0.3", - "interface-datastore": "^3.0.1", - "libp2p-crypto": "^0.19.0", - "multibase": "^3.0.1", - "multihashes": "^3.0.1", - "peer-id": "^0.14.2", - "protons": "^2.0.0", - "timestamp-nano": "^1.0.0", - "uint8arrays": "^2.0.5" - }, - "dependencies": { - "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" - } - }, - "interface-datastore": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-3.0.6.tgz", - "integrity": "sha512-ruF9CVmtKCNfzCZYW6YeEKDRDbgFaiKGrSWof19BVCv6Qx/WrL1jRV4sCQUHCaXwJI7FCFknhw++PGafWCXvfw==", - "requires": { - "err-code": "^3.0.1", - "ipfs-utils": "^6.0.0", - "iso-random-stream": "^2.0.0", - "it-all": "^1.0.2", - "it-drain": "^1.0.1", - "nanoid": "^3.0.2" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - } - } - }, - "ipfs-utils": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-6.0.8.tgz", - "integrity": "sha512-mDDQaDisI/uWk+X08wyw+jBcq76IXwMjgyaoyEgJDb/Izb+QbBCSJjo9q+EvbMxh6/l6q0NiAfbbsxEyQYPW9w==", - "requires": { - "abort-controller": "^3.0.0", - "any-signal": "^2.1.0", - "buffer": "^6.0.1", - "electron-fetch": "^1.7.2", - "err-code": "^3.0.1", - "is-electron": "^2.2.0", - "iso-url": "^1.0.0", - "it-glob": "~0.0.11", - "it-to-stream": "^1.0.0", - "merge-options": "^3.0.4", - "nanoid": "^3.1.20", - "native-abort-controller": "^1.0.3", - "native-fetch": "^3.0.0", - "node-fetch": "^2.6.1", - "stream-to-it": "^0.2.2" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - } - } - }, - "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==", - "requires": { - "events": "^3.3.0", - "readable-stream": "^3.4.0" - } - }, - "iso-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", - "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==" - }, - "it-glob": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.14.tgz", - "integrity": "sha512-TKKzs9CglbsihSpcwJPXN5DBUssu4akRzPlp8QJRCoLrKoaOpyY2V1qDlxx+UMivn0i114YyTd4AawWl7eqIdw==", - "requires": { - "@types/minimatch": "^3.0.4", - "minimatch": "^3.0.4" - } - }, - "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" - } - }, - "libp2p-crypto": { - "version": "0.19.7", - "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.19.7.tgz", - "integrity": "sha512-Qb5o/3WFKF2j6mYSt4UBPyi2kbKl3jYV0podBJoJCw70DlpM5Xc+oh3fFY9ToSunu8aSQQ5GY8nutjXgX/uGRA==", - "requires": { - "err-code": "^3.0.1", - "is-typedarray": "^1.0.0", - "iso-random-stream": "^2.0.0", - "keypair": "^1.0.1", - "multiformats": "^9.4.5", - "node-forge": "^0.10.0", - "pem-jwk": "^2.0.0", - "protobufjs": "^6.11.2", - "secp256k1": "^4.0.0", - "uint8arrays": "^3.0.0", - "ursa-optional": "^0.10.1" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "uint8arrays": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", - "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "requires": { - "is-plain-obj": "^2.1.0" - } - }, - "native-abort-controller": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/native-abort-controller/-/native-abort-controller-1.0.4.tgz", - "integrity": "sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==" - }, - "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==" - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.3.tgz", - "integrity": "sha512-ZU538ajmYJmzysE5yU4Y7uIrPQ2j704u+hXFiIPQExpqzzUbpe5jCPdTfmz7jXRxZdvjY3KZ3ZNenoXQovX+Dg==" - }, - "is-binary-path": { - "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" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-circular": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-circular/-/is-circular-1.0.2.tgz", - "integrity": "sha512-YttjnrswnUYRVJvxCvu8z+PGMUSzC2JttP0OEXezlAEdp3EXzhf7IZ3j0gRAybJBQupedIZFhY61Tga6E0qASA==" - }, - "is-core-module": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz", - "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-domain-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-domain-name/-/is-domain-name-1.0.1.tgz", - "integrity": "sha1-9uszsUpJdUHcpYM1E31EZuDCDaE=" - }, - "is-electron": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.0.tgz", - "integrity": "sha512-SpMppC2XR3YdxSzczXReBjqs2zGscWQpBIKqwXYBFic0ERaxNVgwLCHwOLZeESfdJQjX0RDvrJ1lBXX2ij+G1Q==" - }, - "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 - }, - "is-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", - "integrity": "sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw=" - }, - "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==" - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "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" - } - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-ip": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", - "requires": { - "ip-regex": "^4.0.0" - } - }, - "is-ipfs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ipfs/-/is-ipfs-2.0.0.tgz", - "integrity": "sha512-X4Cg/JO+h/ygBCrIQSMgicHRLo5QpB+i5tHLhFgGBksKi3zvX6ByFCshDxNBvcq4NFxF3coI2AaLqwzugNzKcw==", - "requires": { - "cids": "^1.0.0", - "iso-url": "~0.4.7", - "mafmt": "^8.0.0", - "multiaddr": "^8.0.0", - "multibase": "^3.0.0", - "multihashes": "^3.0.1", - "uint8arrays": "^1.1.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-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" - }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" - }, - "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 - }, - "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-plain-obj": { - "version": "2.1.0", - "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-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.7.tgz", - "integrity": "sha512-VxlpTBGknhQ3o7YiVjIhdLU6+oD8dPz/79vvvH4F+S/c8608UCVa9fgDpa1kZgFoUST2DCgacc70UszKgzKuvA==", - "requires": { - "available-typed-arrays": "^1.0.4", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "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 - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true - }, - "is-weakset": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", - "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "iso-constants": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/iso-constants/-/iso-constants-0.1.2.tgz", - "integrity": "sha512-OTCM5ZCQsHBCI4Wdu4tSxvDIkmDHd5EwJDps5mKqnQnWJSKlnwMs3EDZ4n3Fh1tmkWkDlyd2vCDbEYuPbyrUNQ==" - }, - "iso-random-stream": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-1.1.2.tgz", - "integrity": "sha512-7y0tsBBgQs544iTYjyrMp5xvgrbYR8b+plQq1Bryp+03p0LssrxC9C1M0oHv4QESDt7d95c74XvMk/yawKqX+A==", - "requires": { - "buffer": "^6.0.3", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "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" - } - } - } - }, - "iso-url": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-0.4.7.tgz", - "integrity": "sha512-27fFRDnPAMnHGLq36bWTpKET+eiXct3ENlCcdcMdk+mjXrb2kw3mhBUg1B7ewAC0kVzlOPhADzQgz1SE6Tglog==" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, - "requires": { - "append-transform": "^2.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" - }, - "dependencies": { - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "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 - } - } - }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "it-all": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/it-all/-/it-all-1.0.5.tgz", - "integrity": "sha512-ygD4kA4vp8fi+Y+NBgEKt6W06xSbv6Ub/0V8d1r3uCyJ9Izwa1UspkIOlqY9fOee0Z1w3WRo1+VWyAU4DgtufA==" - }, - "it-batch": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/it-batch/-/it-batch-1.0.9.tgz", - "integrity": "sha512-7Q7HXewMhNFltTsAMdSz6luNhyhkhEtGGbYek/8Xb/GiqYMtwUmopE1ocPSiJKKp3rM4Dt045sNFoUu+KZGNyA==" - }, - "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" - }, - "dependencies": { - "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" - } - }, - "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" - } - } - } - }, - "it-concat": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/it-concat/-/it-concat-1.0.3.tgz", - "integrity": "sha512-sjeZQ1BWQ9U/W2oI09kZgUyvSWzQahTkOkLIsnEPgyqZFaF9ME5gV6An4nMjlyhXKWQMKEakQU8oRHs2SdmeyA==", - "requires": { - "bl": "^4.0.0" - } - }, - "it-drain": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-1.0.4.tgz", - "integrity": "sha512-coB7mcyZ4lWBQKoQGJuqM+P94pvpn2T3KY27vcVWPqeB1WmoysRC76VZnzAqrBWzpWcoEJMjZ+fsMBslxNaWfQ==" - }, - "it-first": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/it-first/-/it-first-1.0.6.tgz", - "integrity": "sha512-wiI02c+G1BVuu0jz30Nsr1/et0cpSRulKUusN8HDZXxuX4MdUzfMp2P4JUk+a49Wr1kHitRLrnnh3+UzJ6neaQ==" - }, - "it-glob": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.10.tgz", - "integrity": "sha512-p1PR15djgPV7pxdLOW9j4WcJdla8+91rJdUU2hU2Jm68vkxpIEXK55VHBeH8Lvqh2vqLtM83t8q4BuJxue6niA==", - "requires": { - "fs-extra": "^9.0.1", - "minimatch": "^3.0.4" - } - }, - "it-goodbye": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/it-goodbye/-/it-goodbye-2.0.2.tgz", - "integrity": "sha512-k56lqArpxkIU0yyhnPhvnyOBpzRQn+4VEyd+dUBWhN5kvCgPBeC0XMuHiA71iU98sDpCrJrT/X+81ajT0AOQtQ==", - "requires": { - "buffer": "^5.6.0" - } - }, - "it-handshake": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-1.0.2.tgz", - "integrity": "sha512-uutOim5xF1eyDQD3u8qd3TxbWKwxqGMlbvacZsRsPdjO1BD9lnPTVci0jSMGsvMOu+5Y3W/QQ4hPQb87qPmPVQ==", - "requires": { - "it-pushable": "^1.4.0", - "it-reader": "^2.0.0", - "p-defer": "^3.0.0" - } - }, - "it-last": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/it-last/-/it-last-1.0.5.tgz", - "integrity": "sha512-PV/2S4zg5g6dkVuKfgrQfN2rUN4wdTI1FzyAvU+i8RV96syut40pa2s9Dut5X7SkjwA3P0tOhLABLdnOJ0Y/4Q==" - }, - "it-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/it-length/-/it-length-1.0.4.tgz", - "integrity": "sha512-KN4jXzp77/GQ4fxUGMbsJx3ALUZ6SP3E79tzs2weGghtImDLFZzua/l3fOK0LN/hMH0M330HJRZWwYZfDNuCIA==" - }, - "it-length-prefixed": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-3.1.0.tgz", - "integrity": "sha512-E5GwT6qfZEwh3/XThyYwgjKJ4/hxvTC9kdbj3gxXDeUDKtC7+K2T647sPeX7xDEWqunsnoQyvOrjoHPegaT3uw==", - "requires": { - "@types/bl": "^2.1.0", - "bl": "^4.0.2", - "buffer": "^5.5.0", - "varint": "^5.0.0" - }, - "dependencies": { - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - } - } - }, - "it-map": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/it-map/-/it-map-1.0.5.tgz", - "integrity": "sha512-EElupuWhHVStUgUY+OfTJIS2MZed96lDrAXzJUuqiiqLnIKoBRqtX1ZG2oR0bGDsSppmz83MtzCeKLZ9TVAUxQ==" - }, - "it-multipart": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/it-multipart/-/it-multipart-1.0.9.tgz", - "integrity": "sha512-EGavbE/ohpP3DESwmjRSz6U3iBtgj2yVgCvqF3EkFO93WxndDg0vDnA2zeSbgyglIINXE93Kvk5Vl8ub6es5Jw==", - "requires": { - "buffer": "^6.0.3", - "buffer-indexof": "^1.1.1", - "parse-headers": "^2.0.2" - }, - "dependencies": { - "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" - } - } - } - }, - "it-pair": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-1.0.0.tgz", - "integrity": "sha512-9raOiDu5OAuDOahtMtapKQDrQTxBfzlzrNcB6o7JARHkt+7Bb1dMkW/TpYdAjBJE77KH3e2zGzwpGUP9tXbLww==", - "requires": { - "get-iterator": "^1.0.2" - } - }, - "it-parallel-batch": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/it-parallel-batch/-/it-parallel-batch-1.0.10.tgz", - "integrity": "sha512-3+4gW15xdf/BOx9zij0QVnB1bDGSLOTABlaVm7ebHH1S9gDUgd5aLNb0WsFXPTfKe104iC6lxdzfbMGh1B07rg==", - "requires": { - "it-batch": "^1.0.9" - } - }, - "it-pb-rpc": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/it-pb-rpc/-/it-pb-rpc-0.1.11.tgz", - "integrity": "sha512-1Yvae7LNHNM/WzxWT7OyHqwpA7DZoGos22JioMZ5H6i9iExQf71NHE0phHKEfkJdWLo7SRqPLLbqs2zaeKCwPA==", - "requires": { - "is-buffer": "^2.0.5", - "it-handshake": "^2.0.0", - "it-length-prefixed": "^5.0.2" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "it-handshake": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-2.0.0.tgz", - "integrity": "sha512-K4q+mz8aLlCK3vTjtgNdHC9c/JbuOATsfogarjMsLcBZC5vYfKbX3Gq3AWcCdjIsIrPqzTlhPKSxl64LJkrt2w==", - "requires": { - "it-pushable": "^1.4.0", - "it-reader": "^3.0.0", - "p-defer": "^3.0.0" - } - }, - "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==", - "requires": { - "bl": "^5.0.0", - "buffer": "^6.0.3", - "varint": "^6.0.0" - } - }, - "it-reader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-3.0.0.tgz", - "integrity": "sha512-NxR40odATeaBmSefn6Xn43DplYvn2KtEKQzn4jrTRuPYXMky5M4e+KQ7aTJh0k0vkytLyeenGO1I1GXlGm4laQ==", - "requires": { - "bl": "^5.0.0" - } - } - } - }, - "it-peekable": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-1.0.2.tgz", - "integrity": "sha512-LRPLu94RLm+lxLZbChuc9iCXrKCOu1obWqxfaKhF00yIp30VGkl741b5P60U+rdBxuZD/Gt1bnmakernv7bVFg==" - }, - "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==" - }, - "it-protocol-buffers": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/it-protocol-buffers/-/it-protocol-buffers-0.2.1.tgz", - "integrity": "sha512-UbezSc9BZTw0DU7mFS6iG9PXeycJfTDJlFAlniI3x1CRrKeDP+IW6ERPAFskHI3O+wij18Mk7eHgDtFz4Zk65A==", - "requires": { - "it-buffer": "^0.1.1", - "it-length-prefixed": "^3.0.0" - } - }, - "it-pushable": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-1.4.2.tgz", - "integrity": "sha512-vVPu0CGRsTI8eCfhMknA7KIBqqGFolbRx+1mbQ6XuZ7YCz995Qj7L4XUviwClFunisDq96FdxzF5FnAbw15afg==", - "requires": { - "fast-fifo": "^1.0.0" - } - }, - "it-reader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-2.1.0.tgz", - "integrity": "sha512-hSysqWTO9Tlwc5EGjVf8JYZzw0D2FsxD/g+eNNWrez9zODxWt6QlN6JAMmycK72Mv4jHEKEXoyzUN4FYGmJaZw==", - "requires": { - "bl": "^4.0.0" - } - }, - "it-tar": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/it-tar/-/it-tar-1.2.2.tgz", - "integrity": "sha512-M8V4a9I+x/vwXTjqvixcEZbQZHjwDIb8iUQ+D4M2QbhAdNs3WKVSl+45u5/F2XFx6jYMFOGzMVlKNK/uONgNIA==", - "requires": { - "bl": "^4.0.0", - "buffer": "^5.4.3", - "iso-constants": "^0.1.2", - "it-concat": "^1.0.0", - "it-reader": "^2.0.0", - "p-defer": "^3.0.0" - } - }, - "it-to-stream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/it-to-stream/-/it-to-stream-0.1.2.tgz", - "integrity": "sha512-DTB5TJRZG3untmZehcaFN0kGWl2bNv7tnJRgQHAO9QEt8jfvVRrebZtnD5NZd4SCj4WVPjl0LSrugNWE/UaZRQ==", - "requires": { - "buffer": "^5.6.0", - "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": "3.0.2", - "resolved": "https://registry.npmjs.org/it-ws/-/it-ws-3.0.2.tgz", - "integrity": "sha512-INZhCXNjd5Xr7mYWtNZQb9y5i6XIsf4CKD4XUXeCD3tbaoIya1bPVtJNP1lN5UVGo6Ql9rAn3WVre/8IKtKShw==", - "requires": { - "buffer": "^5.6.0", - "event-iterator": "^2.0.0", - "relative-url": "^1.0.2", - "ws": "^7.3.1" - }, - "dependencies": { - "ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==" - } - } - }, - "iterable-ndjson": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/iterable-ndjson/-/iterable-ndjson-1.1.0.tgz", - "integrity": "sha512-OOp1Lb0o3k5MkXHx1YaIY5Z0ELosZfTnBaas9f8opJVcZGBIONA2zY/6CYE+LKkqrSDooIneZbrBGgOZnHPkrg==", - "requires": { - "string_decoder": "^1.2.0" - } - }, - "jest-worker": { - "version": "27.4.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz", - "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "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" - } - } - } - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, - "joi": { - "version": "17.4.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.2.tgz", - "integrity": "sha512-Lm56PP+n0+Z2A2rfRvsfWVDXGEWjXxatPopkQ8qQ5mxCEhwHG+Ettgg5o98FFaxilOxozoa14cFhrE/hOzh/Nw==", - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.0", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "joycon": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz", - "integrity": "sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ==" - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "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" - } - }, - "jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha1-sBMHyym2GKHtJux56RH4A8TaAEA=" - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "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==", - "dev": true - }, - "json-text-sequence": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.1.1.tgz", - "integrity": "sha1-py8hfcSvxGKf/1/rME3BvVGi89I=", - "requires": { - "delimit-stream": "0.1.0" - } - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsondiffpatch": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.4.1.tgz", - "integrity": "sha512-t0etAxTUk1w5MYdNOkZBZ8rvYYN5iL+2dHCCx/DpkFm/bW28M6y5nUS83D4XdZiHy35Fpaw6LBb+F88fHZnVCw==", - "requires": { - "chalk": "^2.3.0", - "diff-match-patch": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "just-debounce-it": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/just-debounce-it/-/just-debounce-it-1.5.0.tgz", - "integrity": "sha512-itSWJS5d2DTSCizVJ2Z0Djx/dGmUGfZe7WNfUfVP23+htGcIcPHbEjL4eB8ljojTs/+oYwLexImRRCP0A2WXjA==" - }, - "just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==" - }, - "just-safe-get": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/just-safe-get/-/just-safe-get-2.1.2.tgz", - "integrity": "sha512-DPWEh00QFgJNyfULPwgc9rTvdiPYVyt69hcgjWbN3lzKMmISW43Hwc+nlRAIo+su6PLVqUOMEUJNYR1xFog7xQ==" - }, - "just-safe-set": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/just-safe-set/-/just-safe-set-2.2.2.tgz", - "integrity": "sha512-mRI+4M6DPg/eUaqXQkt5hdlY3oSRKtWtQdZA5NDKyfvCEtVaeObBnFPJmVDdJC6cSIosws5PvLuyw9wJihjeFQ==" - }, - "k-bucket": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-5.1.0.tgz", - "integrity": "sha512-Fac7iINEovXIWU20GPnOMLUbjctiS+cnmyjC4zAUgvs3XPf1vo9akfCHkigftSic/jiKqKl+KA3a/vFcJbHyCg==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "keypair": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.4.tgz", - "integrity": "sha512-zwhgOhhniaL7oxMgUMKKw5219PWWABMO+dgMnzJOQ2/5L3XJtTJGhW2PEXlxXj9zaccdReZJZ83+4NPhVfNVDg==" - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { - "json-buffer": "3.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "requires": { - "package-json": "^6.3.0" - } - }, - "level": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level/-/level-5.0.1.tgz", - "integrity": "sha512-wcak5OQeA4rURGacqS62R/xNHjCYnJSQDBOlm4KNUGJVE9bWv2B04TclqReYejN+oD65PzD4FsqeWoI5wNC5Lg==", - "requires": { - "level-js": "^4.0.0", - "level-packager": "^5.0.0", - "leveldown": "^5.0.0", - "opencollective-postinstall": "^2.0.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "leveldown": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", - "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", - "requires": { - "abstract-leveldown": "~6.2.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "~4.1.0" - } - }, - "node-gyp-build": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==" - } - } - }, - "level-codec": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-10.0.0.tgz", - "integrity": "sha512-QW3VteVNAp6c/LuV6nDjg7XDXx9XHK4abmQarxZmlRSDyXYk20UdaJTSX6yzVvQ4i0JyWSB7jert0DsyD/kk6g==", - "dev": true, - "requires": { - "buffer": "^6.0.3" - }, - "dependencies": { - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - } - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==" - }, - "level-errors": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-3.0.1.tgz", - "integrity": "sha512-tqTL2DxzPDzpwl0iV5+rBCv65HWbHp6eutluHNcVIftKZlQN//b6GEnZDM2CvGZvzGYMwyPtYppYnydBQd2SMQ==", - "dev": true - }, - "level-iterator-stream": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-5.0.0.tgz", - "integrity": "sha512-wnb1+o+CVFUDdiSMR/ZymE2prPs3cjVLlXuDeSq9Zb8o032XrabGEXcTCsBxprAtseO3qvFeGzh6406z9sOTRA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "level-js": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-4.0.2.tgz", - "integrity": "sha512-PeGjZsyMG4O89KHiez1zoMJxStnkM+oBIqgACjoo5PJqFiSUUm3GNod/KcbqN5ktyZa8jkG7I1T0P2u6HN9lIg==", - "requires": { - "abstract-leveldown": "~6.0.1", - "immediate": "~3.2.3", - "inherits": "^2.0.3", - "ltgt": "^2.1.2", - "typedarray-to-buffer": "~3.1.5" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.0.3.tgz", - "integrity": "sha512-jzewKKpZbaYUa6HTThnrl+GrJhzjEAeuc7hTVpZdzg7kupXZFoqQDFwyOwLNbmJKJlmzw8yiipMPkDiuKkT06Q==", - "requires": { - "level-concat-iterator": "~2.0.0", - "xtend": "~4.0.0" - } - } - } - }, - "level-option-wrap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/level-option-wrap/-/level-option-wrap-1.1.0.tgz", - "integrity": "sha1-rSDmjZ88IsiJdTHMaqevWWse0Sk=", - "dev": true, - "requires": { - "defined": "~0.0.0" - } - }, - "level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "requires": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - } - } - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "requires": { - "buffer": "^5.6.0" - } - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - } - }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "requires": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - } - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "requires": { - "xtend": "^4.0.2" - } - }, - "leveldown": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", - "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", - "requires": { - "abstract-leveldown": "^7.2.0", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "requires": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - } - }, - "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" - } - }, - "level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "requires": { - "catering": "^2.1.0" - } - }, - "level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==" - }, - "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" - } - } - }, - "levelup": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-5.1.1.tgz", - "integrity": "sha512-0mFCcHcEebOwsQuk00WJwjLI6oCjbBuEYdh/RaRqhjnyVlzqf41T1NnDtCedumZ56qyIh8euLFDqV1KfzTAVhg==", - "dev": true, - "requires": { - "catering": "^2.0.0", - "deferred-leveldown": "^7.0.0", - "level-errors": "^3.0.1", - "level-iterator-stream": "^5.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - }, - "dependencies": { - "level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "dev": true - } - } - }, - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" - }, - "libp2p": { - "version": "0.29.4", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.29.4.tgz", - "integrity": "sha512-RACD3rvhgBTcLDtILwN8lE2z3GV5OCR1Se/wQ9UPYArSImsoikKjGQMvW0vZl9W3adUqmJOUs7CJWTUvdTAOpw==", - "requires": { - "abort-controller": "^3.0.0", - "aggregate-error": "^3.0.1", - "any-signal": "^1.1.0", - "bignumber.js": "^9.0.0", - "class-is": "^1.1.0", - "debug": "^4.1.1", - "err-code": "^2.0.0", - "events": "^3.1.0", - "hashlru": "^2.3.0", - "interface-datastore": "^2.0.0", - "ipfs-utils": "^2.2.0", - "it-all": "^1.0.1", - "it-buffer": "^0.1.2", - "it-handshake": "^1.0.1", - "it-length-prefixed": "^3.0.1", - "it-pipe": "^1.1.0", - "it-protocol-buffers": "^0.2.0", - "libp2p-crypto": "^0.18.0", - "libp2p-interfaces": "^0.5.1", - "libp2p-utils": "^0.2.0", - "mafmt": "^8.0.0", - "merge-options": "^2.0.0", - "moving-average": "^1.0.0", - "multiaddr": "^8.1.0", - "multicodec": "^2.0.0", - "multistream-select": "^1.0.0", - "mutable-proxy": "^1.0.0", - "node-forge": "^0.9.1", - "p-any": "^3.0.0", - "p-fifo": "^1.0.0", - "p-settle": "^4.0.1", - "peer-id": "^0.14.2", - "protons": "^2.0.0", - "retimer": "^2.0.0", - "sanitize-filename": "^1.6.3", - "streaming-iterables": "^5.0.2", - "timeout-abort-controller": "^1.1.1", - "varint": "^5.0.0", - "xsalsa20": "^1.0.2" - }, - "dependencies": { - "any-signal": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-1.2.0.tgz", - "integrity": "sha512-Cl08k4xItix3jvu4cxO/dt2rQ6iUAjO66pTyRMub+WL1VXeAyZydCpD8GqWTPKfdL28U0R0UucmQVsUsBnvCmQ==", - "requires": { - "abort-controller": "^3.0.0" - } - }, - "ip-address": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-6.4.0.tgz", - "integrity": "sha512-c5uxc2WUTuRBVHT/6r4m7HIr/DfV0bF6DvLH3iZGSK8wp8iMwwZSgIq2do0asFf8q9ECug0SE+6+1ACMe4sorA==", - "requires": { - "jsbn": "1.1.0", - "lodash.find": "4.6.0", - "lodash.max": "4.0.1", - "lodash.merge": "4.6.2", - "lodash.padstart": "4.6.1", - "lodash.repeat": "4.1.0", - "sprintf-js": "1.1.2" - } - }, - "ipfs-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-2.4.0.tgz", - "integrity": "sha512-0RH8rMIEhrXyrbh87V8SQC6E6/5EJs+YionqZGAXnVoTzkpFhxC3x3FlsxwZ9s72yaieGP1Mx1tRYgfCFM/mJg==", - "requires": { - "abort-controller": "^3.0.0", - "any-signal": "^1.1.0", - "buffer": "^5.6.0", - "err-code": "^2.0.0", - "fs-extra": "^9.0.1", - "is-electron": "^2.2.0", - "iso-url": "^0.4.7", - "it-glob": "0.0.8", - "it-to-stream": "^0.1.2", - "merge-options": "^2.0.0", - "nanoid": "^3.1.3", - "node-fetch": "^2.6.0", - "stream-to-it": "^0.2.0" - } - }, - "it-glob": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.8.tgz", - "integrity": "sha512-PmIAgb64aJPM6wwT1UTlNDAJnNgdGrvr0vRr3AYCngcUuq1KaAovuz0dQAmUkaXudDG3EQzc7OttuLW9DaL3YQ==", - "requires": { - "fs-extra": "^8.1.0", - "minimatch": "^3.0.4" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "libp2p-interfaces": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/libp2p-interfaces/-/libp2p-interfaces-0.5.2.tgz", - "integrity": "sha512-jnf7D2tJ0eemfQp0j+u4s9fRlILduqXuanCpXt0QSxwqj8LVXUvglQddqoHjH6LGzxBvWXdOAk/ZXEUCcH4ZTw==", - "requires": { - "abort-controller": "^3.0.0", - "abortable-iterator": "^3.0.0", - "chai": "^4.2.0", - "chai-checkmark": "^1.0.1", - "class-is": "^1.1.0", - "debug": "^4.1.1", - "delay": "^4.3.0", - "detect-node": "^2.0.4", - "dirty-chai": "^2.0.1", - "err-code": "^2.0.0", - "it-goodbye": "^2.0.1", - "it-length-prefixed": "^3.1.0", - "it-pair": "^1.0.0", - "it-pipe": "^1.1.0", - "it-pushable": "^1.4.0", - "libp2p-crypto": "^0.18.0", - "libp2p-tcp": "^0.15.0", - "multiaddr": "^8.0.0", - "multibase": "^3.0.0", - "p-defer": "^3.0.0", - "p-limit": "^2.3.0", - "p-wait-for": "^3.1.0", - "peer-id": "^0.14.0", - "protons": "^2.0.0", - "sinon": "^9.0.2", - "streaming-iterables": "^5.0.2", - "uint8arrays": "^1.1.0" - } - }, - "libp2p-utils": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/libp2p-utils/-/libp2p-utils-0.2.3.tgz", - "integrity": "sha512-9BoMCgvJF7LJ+JVMaHtqfCqhZN4i/sx0DrY6lf9U0Rq9uUgQ9qTai2O9LXcfr1LOS3OMMeRLsKk25MMgsf7W3w==", - "requires": { - "abortable-iterator": "^3.0.0", - "debug": "^4.2.0", - "err-code": "^2.0.3", - "ip-address": "^6.1.0", - "is-loopback-addr": "^1.0.0", - "multiaddr": "^8.0.0", - "private-ip": "^2.1.1" - } - }, - "node-forge": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.2.tgz", - "integrity": "sha512-naKSScof4Wn+aoHU6HBsifh92Zeicm1GDQKd1vp3Y/kOi8ub0DozCa9KpvYNCXslFHYRmLNiqRopGdTGwNLpNw==" - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - } - } - }, - "libp2p-bootstrap": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/libp2p-bootstrap/-/libp2p-bootstrap-0.12.3.tgz", - "integrity": "sha512-4S7+YyZYy8wRmNxXGwsBsKrxGMk59nTqwDdBeEf9m3aVWZ0zdz5uu3WXq7sl8ULb703Zx5IdjGDrdbxhYtdqlA==", - "requires": { - "debug": "^4.3.1", - "mafmt": "^9.0.0", - "multiaddr": "^9.0.1", - "peer-id": "^0.14.0" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "mafmt": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-9.0.0.tgz", - "integrity": "sha512-BwKL6FJxc6R85K6gFE/pX7MVyCp0NkM2DJHg0RatxVgDlK4g9kqtfXQUt2iReSmTcgZss/Q/Bdfa2KTg4KyC+g==", - "requires": { - "multiaddr": "^9.0.1" - } - }, - "multiaddr": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-9.0.2.tgz", - "integrity": "sha512-YFaEb9t4yXSbaGksSEdg+Kn2U02s7w4wXUgyEMQmPxFJj7CfVHY10WOsScAX/rK6Soa15S1zXYadqH9TtlVreQ==", - "requires": { - "cids": "^1.0.0", - "dns-over-http-resolver": "^1.0.0", - "err-code": "^3.0.1", - "is-ip": "^3.1.0", - "multibase": "^4.0.2", - "uint8arrays": "^2.1.3", - "varint": "^6.0.0" - } - }, - "multibase": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", - "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "libp2p-crypto": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.18.0.tgz", - "integrity": "sha512-zNMHDwf2J4t1LRjrBPMiSa4+14u0SfZRu66FyIVZtOnBGo3V/8imbJsOp8RPT8IgeHRN7EVIUt9lp8dcgXHMOw==", - "requires": { - "err-code": "^2.0.0", - "is-typedarray": "^1.0.0", - "iso-random-stream": "^1.1.0", - "keypair": "^1.0.1", - "multibase": "^3.0.0", - "multicodec": "^2.0.0", - "multihashing-async": "^2.0.1", - "node-forge": "^0.9.1", - "pem-jwk": "^2.0.0", - "protons": "^2.0.0", - "secp256k1": "^4.0.0", - "uint8arrays": "^1.1.0", - "ursa-optional": "^0.10.1" - }, - "dependencies": { - "node-forge": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.2.tgz", - "integrity": "sha512-naKSScof4Wn+aoHU6HBsifh92Zeicm1GDQKd1vp3Y/kOi8ub0DozCa9KpvYNCXslFHYRmLNiqRopGdTGwNLpNw==" - } - } - }, - "libp2p-delegated-content-routing": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/libp2p-delegated-content-routing/-/libp2p-delegated-content-routing-0.8.2.tgz", - "integrity": "sha512-3xfrNaX31VB+sj7/u5ZGjhSzbm7l5jCCzlYktEpQyET7JMI8d1ef8FAP3DiWEhbiSfivMMqlfCzfPEMsLxZG7g==", - "requires": { - "debug": "^4.1.1", - "it-all": "^1.0.0", - "multiaddr": "^8.0.0", - "p-defer": "^3.0.0", - "p-queue": "^6.2.1" - } - }, - "libp2p-delegated-peer-routing": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/libp2p-delegated-peer-routing/-/libp2p-delegated-peer-routing-0.8.2.tgz", - "integrity": "sha512-q49zSTE7wpagt3FDY6S2e2Rr59kPoTMJAwlPeenZ1ajJLbKXRP26RfraK8RaUUw7mHw0BPo47VQcH7ieDkSO+A==", - "requires": { - "cids": "^1.0.0", - "debug": "^4.1.1", - "p-defer": "^3.0.0", - "p-queue": "^6.3.0", - "peer-id": "^0.14.0" - } - }, - "libp2p-floodsub": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/libp2p-floodsub/-/libp2p-floodsub-0.23.1.tgz", - "integrity": "sha512-d5Hl055SV3bkJ2u+bsRp+iWBsg1rVq2CehW2TYq4zoIp/bCGQyY/oQF6NzqnysKloElgRACfWOa/oQBRaSZFng==", - "requires": { - "debug": "^4.1.1", - "libp2p-interfaces": "^0.5.1", - "time-cache": "^0.3.0", - "uint8arrays": "^1.1.0" - }, - "dependencies": { - "libp2p-interfaces": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/libp2p-interfaces/-/libp2p-interfaces-0.5.2.tgz", - "integrity": "sha512-jnf7D2tJ0eemfQp0j+u4s9fRlILduqXuanCpXt0QSxwqj8LVXUvglQddqoHjH6LGzxBvWXdOAk/ZXEUCcH4ZTw==", - "requires": { - "abort-controller": "^3.0.0", - "abortable-iterator": "^3.0.0", - "chai": "^4.2.0", - "chai-checkmark": "^1.0.1", - "class-is": "^1.1.0", - "debug": "^4.1.1", - "delay": "^4.3.0", - "detect-node": "^2.0.4", - "dirty-chai": "^2.0.1", - "err-code": "^2.0.0", - "it-goodbye": "^2.0.1", - "it-length-prefixed": "^3.1.0", - "it-pair": "^1.0.0", - "it-pipe": "^1.1.0", - "it-pushable": "^1.4.0", - "libp2p-crypto": "^0.18.0", - "libp2p-tcp": "^0.15.0", - "multiaddr": "^8.0.0", - "multibase": "^3.0.0", - "p-defer": "^3.0.0", - "p-limit": "^2.3.0", - "p-wait-for": "^3.1.0", - "peer-id": "^0.14.0", - "protons": "^2.0.0", - "sinon": "^9.0.2", - "streaming-iterables": "^5.0.2", - "uint8arrays": "^1.1.0" - } - } - } - }, - "libp2p-gossipsub": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/libp2p-gossipsub/-/libp2p-gossipsub-0.6.6.tgz", - "integrity": "sha512-oW/d7Y099RmxJ8KKWSlzuh3giuKb94d/VpKCxTqUJlsuA3SHjiOiKCO3oadrK5pkYgFMBXxYEnbZ84tft3MtRQ==", - "requires": { - "@types/debug": "^4.1.5", - "debug": "^4.1.1", - "denque": "^1.4.1", - "err-code": "^2.0.0", - "it-pipe": "^1.0.1", - "libp2p-interfaces": "^0.6.0", - "peer-id": "^0.14.0", - "protons": "^2.0.0", - "time-cache": "^0.3.0", - "uint8arrays": "^1.1.0" - }, - "dependencies": { - "libp2p-interfaces": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/libp2p-interfaces/-/libp2p-interfaces-0.6.0.tgz", - "integrity": "sha512-KJV+eaExDviPKGRY/UWFSQ186As0VUWy0+MjmbGOA9yGzze8lcZ+4iuR5EM7RMd+ZfuZOX63Nkt0v8BIxBhq+Q==", - "requires": { - "abort-controller": "^3.0.0", - "abortable-iterator": "^3.0.0", - "chai": "^4.2.0", - "chai-checkmark": "^1.0.1", - "class-is": "^1.1.0", - "debug": "^4.1.1", - "delay": "^4.3.0", - "detect-node": "^2.0.4", - "dirty-chai": "^2.0.1", - "err-code": "^2.0.0", - "it-goodbye": "^2.0.1", - "it-length-prefixed": "^3.1.0", - "it-pair": "^1.0.0", - "it-pipe": "^1.1.0", - "it-pushable": "^1.4.0", - "libp2p-crypto": "^0.18.0", - "libp2p-tcp": "^0.15.0", - "multiaddr": "^8.0.0", - "multibase": "^3.0.0", - "p-defer": "^3.0.0", - "p-limit": "^2.3.0", - "p-wait-for": "^3.1.0", - "peer-id": "^0.14.0", - "protons": "^2.0.0", - "sinon": "^9.0.2", - "streaming-iterables": "^5.0.2", - "uint8arrays": "^1.1.0" - } - } - } - }, - "libp2p-interfaces": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/libp2p-interfaces/-/libp2p-interfaces-0.8.4.tgz", - "integrity": "sha512-LaPkXVhqgAcFwqsyqGSZNAjgXSa2V+skOfIKE2UtQHaduwLct2KpFDOmvhRHTWHfRHwI9bSCskDB7xWGNTwZsQ==", - "requires": { - "@types/bl": "^2.1.0", - "abort-controller": "^3.0.0", - "abortable-iterator": "^3.0.0", - "chai": "^4.2.0", - "chai-checkmark": "^1.0.1", - "debug": "^4.3.1", - "delay": "^4.4.0", - "detect-node": "^2.0.4", - "dirty-chai": "^2.0.1", - "err-code": "^2.0.3", - "it-goodbye": "^2.0.2", - "it-length-prefixed": "^3.1.0", - "it-pair": "^1.0.0", - "it-pipe": "^1.1.0", - "it-pushable": "^1.4.0", - "libp2p-crypto": "^0.19.0", - "libp2p-tcp": "^0.15.0", - "multiaddr": "^8.1.2", - "multibase": "^3.1.1", - "multihashes": "^3.1.1", - "p-defer": "^3.0.0", - "p-limit": "^3.1.0", - "p-wait-for": "^3.2.0", - "peer-id": "^0.14.2", - "protons": "^2.0.0", - "sinon": "^9.2.4", - "streaming-iterables": "^5.0.4", - "uint8arrays": "^2.0.5" - }, - "dependencies": { - "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==", - "requires": { - "events": "^3.3.0", - "readable-stream": "^3.4.0" - } - }, - "libp2p-crypto": { - "version": "0.19.7", - "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.19.7.tgz", - "integrity": "sha512-Qb5o/3WFKF2j6mYSt4UBPyi2kbKl3jYV0podBJoJCw70DlpM5Xc+oh3fFY9ToSunu8aSQQ5GY8nutjXgX/uGRA==", - "requires": { - "err-code": "^3.0.1", - "is-typedarray": "^1.0.0", - "iso-random-stream": "^2.0.0", - "keypair": "^1.0.1", - "multiformats": "^9.4.5", - "node-forge": "^0.10.0", - "pem-jwk": "^2.0.0", - "protobufjs": "^6.11.2", - "secp256k1": "^4.0.0", - "uint8arrays": "^3.0.0", - "ursa-optional": "^0.10.1" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "uint8arrays": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", - "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "libp2p-kad-dht": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/libp2p-kad-dht/-/libp2p-kad-dht-0.20.6.tgz", - "integrity": "sha512-hRClzJP+NK3zBU0/pYkoDUhZcviqmPu4czFaftcl3cCGasjxSaWNEZNKsf65QwoINZD9jFrYkQuXW9/gWQwuOA==", - "requires": { - "abort-controller": "^3.0.0", - "async": "^2.6.2", - "base32.js": "~0.1.0", - "cids": "^1.1.5", - "debug": "^4.3.1", - "err-code": "^2.0.3", - "hashlru": "^2.3.0", - "heap": "~0.2.6", - "interface-datastore": "^3.0.3", - "it-length-prefixed": "^3.1.0", - "it-pipe": "^1.1.0", - "k-bucket": "^5.0.0", - "libp2p-crypto": "^0.19.0", - "libp2p-interfaces": "^0.8.2", - "libp2p-record": "^0.9.0", - "multiaddr": "^8.1.2", - "multihashing-async": "^2.0.1", - "p-filter": "^2.1.0", - "p-map": "^4.0.0", - "p-queue": "^6.6.2", - "p-timeout": "^4.1.0", - "p-times": "^3.0.0", - "peer-id": "^0.14.2", - "promise-to-callback": "^1.0.0", - "protons": "^2.0.0", - "streaming-iterables": "^5.0.4", - "uint8arrays": "^2.0.5", - "varint": "^5.0.0", - "xor-distance": "^2.0.0" - }, - "dependencies": { - "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" - } - }, - "interface-datastore": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-3.0.6.tgz", - "integrity": "sha512-ruF9CVmtKCNfzCZYW6YeEKDRDbgFaiKGrSWof19BVCv6Qx/WrL1jRV4sCQUHCaXwJI7FCFknhw++PGafWCXvfw==", - "requires": { - "err-code": "^3.0.1", - "ipfs-utils": "^6.0.0", - "iso-random-stream": "^2.0.0", - "it-all": "^1.0.2", - "it-drain": "^1.0.1", - "nanoid": "^3.0.2" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - } - } - }, - "ipfs-utils": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-6.0.8.tgz", - "integrity": "sha512-mDDQaDisI/uWk+X08wyw+jBcq76IXwMjgyaoyEgJDb/Izb+QbBCSJjo9q+EvbMxh6/l6q0NiAfbbsxEyQYPW9w==", - "requires": { - "abort-controller": "^3.0.0", - "any-signal": "^2.1.0", - "buffer": "^6.0.1", - "electron-fetch": "^1.7.2", - "err-code": "^3.0.1", - "is-electron": "^2.2.0", - "iso-url": "^1.0.0", - "it-glob": "~0.0.11", - "it-to-stream": "^1.0.0", - "merge-options": "^3.0.4", - "nanoid": "^3.1.20", - "native-abort-controller": "^1.0.3", - "native-fetch": "^3.0.0", - "node-fetch": "^2.6.1", - "stream-to-it": "^0.2.2" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - } - } - }, - "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==", - "requires": { - "events": "^3.3.0", - "readable-stream": "^3.4.0" - } - }, - "iso-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", - "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==" - }, - "it-glob": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.14.tgz", - "integrity": "sha512-TKKzs9CglbsihSpcwJPXN5DBUssu4akRzPlp8QJRCoLrKoaOpyY2V1qDlxx+UMivn0i114YyTd4AawWl7eqIdw==", - "requires": { - "@types/minimatch": "^3.0.4", - "minimatch": "^3.0.4" - } - }, - "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" - } - }, - "libp2p-crypto": { - "version": "0.19.7", - "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.19.7.tgz", - "integrity": "sha512-Qb5o/3WFKF2j6mYSt4UBPyi2kbKl3jYV0podBJoJCw70DlpM5Xc+oh3fFY9ToSunu8aSQQ5GY8nutjXgX/uGRA==", - "requires": { - "err-code": "^3.0.1", - "is-typedarray": "^1.0.0", - "iso-random-stream": "^2.0.0", - "keypair": "^1.0.1", - "multiformats": "^9.4.5", - "node-forge": "^0.10.0", - "pem-jwk": "^2.0.0", - "protobufjs": "^6.11.2", - "secp256k1": "^4.0.0", - "uint8arrays": "^3.0.0", - "ursa-optional": "^0.10.1" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "uint8arrays": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", - "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "requires": { - "is-plain-obj": "^2.1.0" - } - }, - "native-abort-controller": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/native-abort-controller/-/native-abort-controller-1.0.4.tgz", - "integrity": "sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==" - }, - "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==" - }, - "p-timeout": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz", - "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==" - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - } - } - }, - "libp2p-mdns": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/libp2p-mdns/-/libp2p-mdns-0.15.0.tgz", - "integrity": "sha512-wuILE+mwC6ww/0TMkR3k2h53D5Ma9TXpz0siacbsACcGukkS+mIpsvruaf9U1Uxe0F1aC8+Y+Vi5lP8C3YR9Lg==", - "requires": { - "debug": "^4.1.1", - "multiaddr": "^8.0.0", - "multicast-dns": "^7.2.0", - "peer-id": "^0.14.0" - } - }, - "libp2p-mplex": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/libp2p-mplex/-/libp2p-mplex-0.10.4.tgz", - "integrity": "sha512-a8Oy68EXaSBBXGOGYMuwBcpnynkhqAFJ3LiyV24u9fE4wTxvuWTr0prSyKc+KC8QsLuX3A+CAdSgxqm09NbumQ==", - "requires": { - "abort-controller": "^3.0.0", - "abortable-iterator": "^3.0.0", - "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" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - } - } - }, - "libp2p-noise": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/libp2p-noise/-/libp2p-noise-2.0.5.tgz", - "integrity": "sha512-hmR1Y4bJ6hxEO+1aIF1HeJrUNh9NHUbH8gUTtMqpIe7zfdggGau9XKMY0InbafBPFF/WxeIOJDKZiQV4qy2fFg==", - "requires": { - "bcrypto": "^5.4.0", - "debug": "^4.3.1", - "it-buffer": "^0.1.1", - "it-length-prefixed": "^3.0.0", - "it-pair": "^1.0.0", - "it-pb-rpc": "^0.1.9", - "it-pipe": "^1.1.0", - "libp2p-crypto": "^0.19.0", - "peer-id": "^0.14.3", - "protobufjs": "^6.10.1", - "uint8arrays": "^2.0.5" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "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==", - "requires": { - "events": "^3.3.0", - "readable-stream": "^3.4.0" - } - }, - "libp2p-crypto": { - "version": "0.19.7", - "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.19.7.tgz", - "integrity": "sha512-Qb5o/3WFKF2j6mYSt4UBPyi2kbKl3jYV0podBJoJCw70DlpM5Xc+oh3fFY9ToSunu8aSQQ5GY8nutjXgX/uGRA==", - "requires": { - "err-code": "^3.0.1", - "is-typedarray": "^1.0.0", - "iso-random-stream": "^2.0.0", - "keypair": "^1.0.1", - "multiformats": "^9.4.5", - "node-forge": "^0.10.0", - "pem-jwk": "^2.0.0", - "protobufjs": "^6.11.2", - "secp256k1": "^4.0.0", - "uint8arrays": "^3.0.0", - "ursa-optional": "^0.10.1" - }, - "dependencies": { - "uint8arrays": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", - "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "libp2p-record": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/libp2p-record/-/libp2p-record-0.9.0.tgz", - "integrity": "sha512-8FlhzP+UlXTYOR+9D8nYoGOIJ6S8XogKD625bqzHJbXJQyJNCNaW3tZPHqrQrvUW7o6GsAeyQAfCp5WLEH0FZg==", - "requires": { - "err-code": "^2.0.0", - "multihashes": "^3.0.1", - "multihashing-async": "^2.0.1", - "protons": "^2.0.0", - "uint8arrays": "^1.1.0" - } - }, - "libp2p-tcp": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/libp2p-tcp/-/libp2p-tcp-0.15.4.tgz", - "integrity": "sha512-MqXIlqV7t9z0A1Ww9Omd2XIlndcYOAh5R6kWRZ8Vo/CITazKUC5ZGNoj23hq/aEPaX8p5XmJs2BKESg/OuhGhQ==", - "requires": { - "abortable-iterator": "^3.0.0", - "class-is": "^1.1.0", - "debug": "^4.3.1", - "err-code": "^3.0.1", - "libp2p-utils": "^0.3.0", - "mafmt": "^9.0.0", - "multiaddr": "^9.0.1", - "stream-to-it": "^0.2.2" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "mafmt": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-9.0.0.tgz", - "integrity": "sha512-BwKL6FJxc6R85K6gFE/pX7MVyCp0NkM2DJHg0RatxVgDlK4g9kqtfXQUt2iReSmTcgZss/Q/Bdfa2KTg4KyC+g==", - "requires": { - "multiaddr": "^9.0.1" - } - }, - "multiaddr": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-9.0.2.tgz", - "integrity": "sha512-YFaEb9t4yXSbaGksSEdg+Kn2U02s7w4wXUgyEMQmPxFJj7CfVHY10WOsScAX/rK6Soa15S1zXYadqH9TtlVreQ==", - "requires": { - "cids": "^1.0.0", - "dns-over-http-resolver": "^1.0.0", - "err-code": "^3.0.1", - "is-ip": "^3.1.0", - "multibase": "^4.0.2", - "uint8arrays": "^2.1.3", - "varint": "^6.0.0" - } - }, - "multibase": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", - "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "libp2p-utils": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/libp2p-utils/-/libp2p-utils-0.3.1.tgz", - "integrity": "sha512-LOVfww7a6Rhtoupl3z1ABuTEli5whY3VLTB9QntsOIwbOcX9GfmjuhqYbEDht9lVPAQl+rCUWbfDMvK121ryUg==", - "requires": { - "abortable-iterator": "^3.0.0", - "debug": "^4.3.0", - "err-code": "^3.0.1", - "ip-address": "^7.1.0", - "is-loopback-addr": "^1.0.0", - "multiaddr": "^9.0.1", - "private-ip": "^2.1.1" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "multiaddr": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-9.0.2.tgz", - "integrity": "sha512-YFaEb9t4yXSbaGksSEdg+Kn2U02s7w4wXUgyEMQmPxFJj7CfVHY10WOsScAX/rK6Soa15S1zXYadqH9TtlVreQ==", - "requires": { - "cids": "^1.0.0", - "dns-over-http-resolver": "^1.0.0", - "err-code": "^3.0.1", - "is-ip": "^3.1.0", - "multibase": "^4.0.2", - "uint8arrays": "^2.1.3", - "varint": "^6.0.0" - } - }, - "multibase": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", - "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "libp2p-webrtc-peer": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/libp2p-webrtc-peer/-/libp2p-webrtc-peer-10.0.1.tgz", - "integrity": "sha512-Qi/YVrSI5sjU+iBvr1iAjGrakIEvzCS8S76v4q43jjlDb6Wj+S4OnFLH/uRlt7eLXcx4vlaI6huMzYrUAoopMg==", - "requires": { - "debug": "^4.0.1", - "err-code": "^2.0.3", - "get-browser-rtc": "^1.0.0", - "queue-microtask": "^1.1.0", - "randombytes": "^2.0.3", - "readable-stream": "^3.4.0" - } - }, - "libp2p-webrtc-star": { - "version": "0.20.8", - "resolved": "https://registry.npmjs.org/libp2p-webrtc-star/-/libp2p-webrtc-star-0.20.8.tgz", - "integrity": "sha512-SvcPu4be/EfMXPbR3I+SemIuGNWmQiAAtUsire5M5Bomb2aSp7yeO1DKvl8+rZbhjn3YsSr8GlB+Wk9vRDm7tA==", - "requires": { - "@hapi/hapi": "^20.0.0", - "@hapi/inert": "^6.0.3", - "abortable-iterator": "^3.0.0", - "class-is": "^1.1.0", - "debug": "^4.2.0", - "err-code": "^2.0.3", - "ipfs-utils": "^6.0.0", - "it-pipe": "^1.1.0", - "libp2p-utils": "^0.2.1", - "libp2p-webrtc-peer": "^10.0.1", - "mafmt": "^8.0.0", - "menoetius": "0.0.2", - "minimist": "^1.2.5", - "multiaddr": "^8.0.0", - "p-defer": "^3.0.0", - "peer-id": "^0.14.2", - "prom-client": "^13.0.0", - "socket.io": "^2.3.0", - "socket.io-client": "^2.3.0", - "stream-to-it": "^0.2.2", - "streaming-iterables": "^5.0.3" - }, - "dependencies": { - "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" - } - }, - "ip-address": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-6.4.0.tgz", - "integrity": "sha512-c5uxc2WUTuRBVHT/6r4m7HIr/DfV0bF6DvLH3iZGSK8wp8iMwwZSgIq2do0asFf8q9ECug0SE+6+1ACMe4sorA==", - "requires": { - "jsbn": "1.1.0", - "lodash.find": "4.6.0", - "lodash.max": "4.0.1", - "lodash.merge": "4.6.2", - "lodash.padstart": "4.6.1", - "lodash.repeat": "4.1.0", - "sprintf-js": "1.1.2" - } - }, - "ipfs-utils": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-6.0.8.tgz", - "integrity": "sha512-mDDQaDisI/uWk+X08wyw+jBcq76IXwMjgyaoyEgJDb/Izb+QbBCSJjo9q+EvbMxh6/l6q0NiAfbbsxEyQYPW9w==", - "requires": { - "abort-controller": "^3.0.0", - "any-signal": "^2.1.0", - "buffer": "^6.0.1", - "electron-fetch": "^1.7.2", - "err-code": "^3.0.1", - "is-electron": "^2.2.0", - "iso-url": "^1.0.0", - "it-glob": "~0.0.11", - "it-to-stream": "^1.0.0", - "merge-options": "^3.0.4", - "nanoid": "^3.1.20", - "native-abort-controller": "^1.0.3", - "native-fetch": "^3.0.0", - "node-fetch": "^2.6.1", - "stream-to-it": "^0.2.2" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - } - } - }, - "iso-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", - "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==" - }, - "it-glob": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.14.tgz", - "integrity": "sha512-TKKzs9CglbsihSpcwJPXN5DBUssu4akRzPlp8QJRCoLrKoaOpyY2V1qDlxx+UMivn0i114YyTd4AawWl7eqIdw==", - "requires": { - "@types/minimatch": "^3.0.4", - "minimatch": "^3.0.4" - } - }, - "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" - } - }, - "libp2p-utils": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/libp2p-utils/-/libp2p-utils-0.2.3.tgz", - "integrity": "sha512-9BoMCgvJF7LJ+JVMaHtqfCqhZN4i/sx0DrY6lf9U0Rq9uUgQ9qTai2O9LXcfr1LOS3OMMeRLsKk25MMgsf7W3w==", - "requires": { - "abortable-iterator": "^3.0.0", - "debug": "^4.2.0", - "err-code": "^2.0.3", - "ip-address": "^6.1.0", - "is-loopback-addr": "^1.0.0", - "multiaddr": "^8.0.0", - "private-ip": "^2.1.1" - } - }, - "merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "requires": { - "is-plain-obj": "^2.1.0" - } - }, - "native-abort-controller": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/native-abort-controller/-/native-abort-controller-1.0.4.tgz", - "integrity": "sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==" - }, - "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==" - } - } - }, - "libp2p-websockets": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/libp2p-websockets/-/libp2p-websockets-0.14.0.tgz", - "integrity": "sha512-UeI0uqw2xYXFhImJucewG7fuL6hOR2tnSwlSAAxilyK0Z3Yya+GeVkqy7Vufj9ax3EWFx6lPO8mC3uBl30TkpA==", - "requires": { - "abortable-iterator": "^3.0.0", - "class-is": "^1.1.0", - "debug": "^4.1.1", - "err-code": "^2.0.0", - "it-ws": "^3.0.0", - "libp2p-utils": "^0.2.0", - "mafmt": "^8.0.0", - "multiaddr": "^8.0.0", - "multiaddr-to-uri": "^6.0.0", - "p-timeout": "^3.2.0" - }, - "dependencies": { - "ip-address": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-6.4.0.tgz", - "integrity": "sha512-c5uxc2WUTuRBVHT/6r4m7HIr/DfV0bF6DvLH3iZGSK8wp8iMwwZSgIq2do0asFf8q9ECug0SE+6+1ACMe4sorA==", - "requires": { - "jsbn": "1.1.0", - "lodash.find": "4.6.0", - "lodash.max": "4.0.1", - "lodash.merge": "4.6.2", - "lodash.padstart": "4.6.1", - "lodash.repeat": "4.1.0", - "sprintf-js": "1.1.2" - } - }, - "libp2p-utils": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/libp2p-utils/-/libp2p-utils-0.2.3.tgz", - "integrity": "sha512-9BoMCgvJF7LJ+JVMaHtqfCqhZN4i/sx0DrY6lf9U0Rq9uUgQ9qTai2O9LXcfr1LOS3OMMeRLsKk25MMgsf7W3w==", - "requires": { - "abortable-iterator": "^3.0.0", - "debug": "^4.2.0", - "err-code": "^2.0.3", - "ip-address": "^6.1.0", - "is-loopback-addr": "^1.0.0", - "multiaddr": "^8.0.0", - "private-ip": "^2.1.1" - } - } - } - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "loady": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/loady/-/loady-0.0.5.tgz", - "integrity": "sha512-uxKD2HIj042/HBx77NBcmEPsD+hxCgAtjEWlYNScuUjIsh/62Uyu39GOR68TBR68v+jqDL9zfftCWoUo4y03sQ==" - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.find": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", - "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=" - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" - }, - "lodash.max": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.max/-/lodash.max-4.0.1.tgz", - "integrity": "sha1-hzVWbGGLNan3YFILSHrnllivE2o=" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "lodash.padstart": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" - }, - "lodash.repeat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-4.1.0.tgz", - "integrity": "sha1-/H3oEx2MisB+S0n3T/6CnR8r7EQ=" - }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, - "log-symbols": { - "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" - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" - }, - "mafmt": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-8.0.4.tgz", - "integrity": "sha512-wwZ5+PU0vQw10kwQRyZin1Z0dqVOp0BnYlX1xvXHS2fmLwrrQCfU1+3tlW5MRcihUwGz1virnVhbRAU1biKfiw==", - "requires": { - "multiaddr": "^8.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "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 - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "menoetius": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/menoetius/-/menoetius-0.0.2.tgz", - "integrity": "sha512-7W0ayHMNgvEdFh+m3m29KA87nvT0JIGCXeSZa26fiSof+bwpg+olEjD8AAvtxZ3uhTcp2d+5r1dcV/KhR8PBVQ==", - "requires": { - "prom-client": "^11.5.3" - }, - "dependencies": { - "prom-client": { - "version": "11.5.3", - "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-11.5.3.tgz", - "integrity": "sha512-iz22FmTbtkyL2vt0MdDFY+kWof+S9UB/NACxSn2aJcewtw+EERsen0urSkZ2WrHseNdydsvcxCTAnPcSMZZv4Q==", - "requires": { - "tdigest": "^0.1.1" - } - } - } - }, - "merge-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-2.0.0.tgz", - "integrity": "sha512-S7xYIeWHl2ZUKF7SDeBhGg6rfv5bKxVBdk95s/I7wVF8d+hjLSztJ/B271cnUiF6CAFduEQ5Zn3HYwAjT16DlQ==", - "requires": { - "is-plain-obj": "^2.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "dependencies": { - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - } - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" - }, - "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", - "requires": { - "mime-db": "1.49.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "mocha": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", - "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.2", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.7", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.25", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.1.5", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "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 - }, - "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 - }, - "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, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "locate-path": { - "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" - } - }, - "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 - }, - "nanoid": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", - "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", - "dev": true - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "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 - } - } - }, - "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==", - "requires": { - "nanoid": "^3.1.20", - "observable-webworkers": "^1.0.0", - "p-queue": "^6.0.0", - "promise-timeout": "^1.3.0" - } - }, - "moving-average": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/moving-average/-/moving-average-1.0.1.tgz", - "integrity": "sha512-Hl3aUJqu/7LMslHM6mz9Sk1mpFwe4jW5QcmJgukcUGFILBcQW5L9ot8BUVRSuUaW3o/1Twrwmu7w2NTGvw76cA==" - }, - "mri": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", - "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multiaddr": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-8.1.2.tgz", - "integrity": "sha512-r13IzW8+Sv9zab9Gt8RPMIN2WkptIPq99EpAzg4IbJ/zTELhiEwXWr9bAmEatSCI4j/LSA6ESJzvz95JZ+ZYXQ==", - "requires": { - "cids": "^1.0.0", - "class-is": "^1.1.0", - "dns-over-http-resolver": "^1.0.0", - "err-code": "^2.0.3", - "is-ip": "^3.1.0", - "multibase": "^3.0.0", - "uint8arrays": "^1.1.0", - "varint": "^5.0.0" - }, - "dependencies": { - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - } - } - }, - "multiaddr-to-uri": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/multiaddr-to-uri/-/multiaddr-to-uri-6.0.0.tgz", - "integrity": "sha512-OjpkVHOXEmIKMO8WChzzQ7aZQcSQX8squxmvtDbRpy7/QNmJ3Z7jv6qyD74C28QtaeNie8O8ngW2AkeiMmKP7A==", - "requires": { - "multiaddr": "^8.0.0" - } - }, - "multibase": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-3.1.2.tgz", - "integrity": "sha512-bpklWHs70LO3smJUHOjcnzGceJJvn9ui0Vau6Za0B/GBepaXswmW8Ufea0uD9pROf/qCQ4N4lZ3sf3U+SNf0tw==", - "requires": { - "@multiformats/base-x": "^4.0.1", - "web-encoding": "^1.0.6" - } - }, - "multicast-dns": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.4.tgz", - "integrity": "sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw==", - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "multicodec": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-2.1.0.tgz", - "integrity": "sha512-7AYpK/avswOWvnqQ9/jOkQCS7Fp4aKxw5ojvn5gyK2VQTZz3YVXeLMzoIZDBy745JSfJMXkTS0ptnHci5Mt1mA==", - "requires": { - "uint8arrays": "1.1.0", - "varint": "^6.0.0" - } - }, - "multiformats": { - "version": "9.4.5", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.4.5.tgz", - "integrity": "sha512-zQxukxsHM34EJi3yT3MkUlycY9wEouyrAz0PSN+CyCj6cYchJZ4LrTH74YtlsxVyAK6waz/gnVLmJwi3P0knKg==" - }, - "multihashes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-3.1.2.tgz", - "integrity": "sha512-AP4IoV/YzkNrfbQKZE3OMPibrmy350OmCd6cJkwyM8oExaXIlOY4UnOOVSQtAEuq/LR01XfXKCESidzZvSwHCQ==", - "requires": { - "multibase": "^3.1.0", - "uint8arrays": "^2.0.5", - "varint": "^6.0.0" - }, - "dependencies": { - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "multihashing": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/multihashing/-/multihashing-0.3.3.tgz", - "integrity": "sha512-jXVWf5uqnZUhc1mLFPWOssuOpkj/A/vVLKrtEscD1PzSLobXYocBy9Gqa/Aw4229/heGnl0RBHU3cD53MbHUig==", - "dev": true, - "requires": { - "blakejs": "^1.1.0", - "js-sha3": "~0.8.0", - "multihashes": "~0.4.14", - "webcrypto": "~0.1.1" - }, - "dependencies": { - "multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "dev": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - } - }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - } - } - }, - "multihashing-async": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-2.1.2.tgz", - "integrity": "sha512-FTPNnWWxwIK5dXXmTFhySSF8Fkdqf7vzqpV09+RWsmfUhrsL/b3Arg3+bRrBnXTtjxm3JRGI3wSAtQHL0QCxhQ==", - "requires": { - "blakejs": "^1.1.0", - "err-code": "^3.0.0", - "js-sha3": "^0.8.0", - "multihashes": "^4.0.1", - "murmurhash3js-revisited": "^3.0.0", - "uint8arrays": "^2.1.3" - }, - "dependencies": { - "blakejs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.1.tgz", - "integrity": "sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg==" - }, - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "multibase": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.4.tgz", - "integrity": "sha512-8/JmrdSGzlw6KTgAJCOqUBSGd1V6186i/X8dDCGy/lbCKrQ+1QB6f3HE+wPr7Tpdj4U3gutaj9jG2rNX6UpiJg==", - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "multihashes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.2.tgz", - "integrity": "sha512-xpx++1iZr4ZQHjN1mcrXS6904R36LWLxX/CBifczjtmrtCXEX623DMWOF1eiNSg+pFpiZDFVBgou/4v6ayCHSQ==", - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.2" - } - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - } - } - }, - "multistream-select": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/multistream-select/-/multistream-select-1.0.0.tgz", - "integrity": "sha512-82riQ+qZ0RPY+KbRdeeKKQnFSBCVpUbZ15EniGU2nfwM8NdrpPIeUYXFw4a/pyprcNeRfMgLlG9aCh874p8nJg==", - "requires": { - "bl": "^4.0.0", - "debug": "^4.1.1", - "err-code": "^2.0.0", - "it-handshake": "^1.0.2", - "it-length-prefixed": "^3.0.0", - "it-pipe": "^1.0.1", - "it-reader": "^2.0.0", - "p-defer": "^3.0.0", - "uint8arrays": "^1.1.0" - } - }, - "murmurhash3js-revisited": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz", - "integrity": "sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==" - }, - "mutable-proxy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mutable-proxy/-/mutable-proxy-1.0.0.tgz", - "integrity": "sha512-4OvNRr1DJpy2QuDUV74m+BWZ//n4gG4bmd21MzDSPqHEidIDWqwyOjcadU1LBMO3vXYGurVKjfBrxrSQIHFu9A==" - }, - "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" - }, - "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" - }, - "napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" - }, - "native-abort-controller": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/native-abort-controller/-/native-abort-controller-0.0.3.tgz", - "integrity": "sha512-YIxU5nWqSHG1Xbu3eOu3pdFRD882ivQpIcu6AiPVe2oSVoRbfYW63DVkZm3g1gHiMtZSvZzF6THSzTGEBYl8YA==", - "requires": { - "globalthis": "^1.0.1" - } - }, - "native-fetch": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-2.0.1.tgz", - "integrity": "sha512-gv4Bea+ga9QdXINurpkEqun3ap3vnB+WYoe4c8ddqUYEH7B2h6iD39RF8uVN7OwmSfMY3RDxkvBnoI4e2/vLXQ==", - "requires": { - "globalthis": "^1.0.1" - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" - }, - "nise": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz", - "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==", - "requires": { - "@sinonjs/commons": "^1.7.0", - "@sinonjs/fake-timers": "^6.0.0", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" - } - }, - "noble-bls12-381": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/noble-bls12-381/-/noble-bls12-381-0.4.3.tgz", - "integrity": "sha512-vG8EI2zQl/9ESZG6XabqLLre6xun96eYhP69PZ6c8SuAxxdylRSbTgK/nFFlE5GPFoWzuhIMnTxlPr66NYz/6A==", - "dev": true - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "node-loader": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/node-loader/-/node-loader-1.0.2.tgz", - "integrity": "sha512-myxAxpyMR7knjA4Uzwf3gjxaMtxSWj2vpm9o6AYWWxQ1S3XMBNeG2vzYcp/5eW03cBGfgSxyP+wntP8qhBJNhQ==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, - "requires": { - "process-on-spawn": "^1.0.0" - } - }, - "node-releases": { - "version": "1.1.74", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.74.tgz", - "integrity": "sha512-caJBVempXZPepZoZAPCWRTNxYQ+xtG/KAi4ozTA5A+nJ7IU+kLQCbqaUjb5Rwy14M9upBWiQ4NutcmW04LJSRw==", - "dev": true - }, - "nofilter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==" - }, - "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 - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, - "requires": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "dependencies": { - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - } - } - }, - "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "observable-webworkers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/observable-webworkers/-/observable-webworkers-1.0.0.tgz", - "integrity": "sha512-+cECwCR8IEh8UY5nefQVLO9Cydqpk1izO+o7BABmKjXfJZyEOzBWY3ss5jbOPM6KmEa9aQExvAtTW6tVTOsNAQ==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==" - }, - "optional": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz", - "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==", - "optional": true - }, - "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", - "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==" - }, - "p-fifo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-fifo/-/p-fifo-1.0.0.tgz", - "integrity": "sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==", - "requires": { - "fast-fifo": "^1.0.0", - "p-defer": "^3.0.0" - } - }, - "p-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", - "requires": { - "p-map": "^2.0.0" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - } - } - }, - "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": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "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" - } - }, - "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==" - }, - "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==", - "requires": { - "p-limit": "^2.2.2", - "p-reflect": "^2.1.0" - } - }, - "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": "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-times": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-times/-/p-times-3.0.0.tgz", - "integrity": "sha512-/Z7mcs8Liie8E7IHI9SBtmkHVW/GjLroQ94ALoAMIG20mqFMuh56/3WYhtOTqX9ccRSOxgaCkFC94Bat1Ofskg==", - "requires": { - "p-map": "^4.0.0" - } - }, - "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==" - }, - "p-try-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/p-try-each/-/p-try-each-1.0.1.tgz", - "integrity": "sha512-WyUjRAvK4CG9DUW21ZsNYcBj6guN7pgZAOFR8mUtyNXyPC5WUo3L48nxI5TsGEZ+VJhZXzyeH/Sxi2lxYcPp3A==" - }, - "p-wait-for": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-3.2.0.tgz", - "integrity": "sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==", - "requires": { - "p-timeout": "^3.0.0" - } - }, - "package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-duration": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-0.4.4.tgz", - "integrity": "sha512-KbAJuYGUhZkB9gotDiKLnZ7Z3VTacK3fgwmDdB6ZVDtJbMBT6MfLga0WJaYpPDu0mzqT0NgHtHDt5PY4l0nidg==" - }, - "parse-headers": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", - "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==" - }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, - "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==" - }, - "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 - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "peek-readable": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.0.1.tgz", - "integrity": "sha512-7qmhptnR0WMSpxT5rMHG9bW/mYSR1uqaPFj2MHvT+y/aOUu6msJijpKt5SkTDKySwg65OWG2JwTMBlgcbwMHrQ==" - }, - "peer-id": { - "version": "0.14.8", - "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.14.8.tgz", - "integrity": "sha512-GpuLpob/9FrEFvyZrKKsISEkaBYsON2u0WtiawLHj1ii6ewkoeRiSDFLyIefYhw0jGvQoeoZS05jaT52X7Bvig==", - "requires": { - "cids": "^1.1.5", - "class-is": "^1.1.0", - "libp2p-crypto": "^0.19.0", - "minimist": "^1.2.5", - "multihashes": "^4.0.2", - "protobufjs": "^6.10.2", - "uint8arrays": "^2.0.5" - }, - "dependencies": { - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "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==", - "requires": { - "events": "^3.3.0", - "readable-stream": "^3.4.0" - } - }, - "libp2p-crypto": { - "version": "0.19.7", - "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.19.7.tgz", - "integrity": "sha512-Qb5o/3WFKF2j6mYSt4UBPyi2kbKl3jYV0podBJoJCw70DlpM5Xc+oh3fFY9ToSunu8aSQQ5GY8nutjXgX/uGRA==", - "requires": { - "err-code": "^3.0.1", - "is-typedarray": "^1.0.0", - "iso-random-stream": "^2.0.0", - "keypair": "^1.0.1", - "multiformats": "^9.4.5", - "node-forge": "^0.10.0", - "pem-jwk": "^2.0.0", - "protobufjs": "^6.11.2", - "secp256k1": "^4.0.0", - "uint8arrays": "^3.0.0", - "ursa-optional": "^0.10.1" - }, - "dependencies": { - "uint8arrays": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", - "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "multibase": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", - "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", - "requires": { - "@multiformats/base-x": "^4.0.1" - } - }, - "multihashes": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.3.tgz", - "integrity": "sha512-0AhMH7Iu95XjDLxIeuCOOE4t9+vQZsACyKZ9Fxw2pcsRmlX4iCn1mby0hS0bb+nQOVpdQYWPpnyusw4da5RPhA==", - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^3.0.0", - "varint": "^5.0.2" - }, - "dependencies": { - "uint8arrays": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", - "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - } - } - }, - "pem-jwk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pem-jwk/-/pem-jwk-2.0.0.tgz", - "integrity": "sha512-rFxu7rVoHgQ5H9YsP50dDWf0rHjreVA2z0yPiWr5WdH/UHb29hKtF7h6l8vNd1cbYR1t0QL+JKhW55a2ZV4KtA==", - "requires": { - "asn1.js": "^5.0.1" - } - }, - "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 - }, - "pino": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.13.0.tgz", - "integrity": "sha512-mRXSTfa34tbfrWqCIp1sUpZLqBhcoaGapoyxfEwaWwJGMpLijlRdDKIQUyvq4M3DUfFH5vEglwSw8POZYwbThA==", - "requires": { - "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.8", - "flatstr": "^1.0.12", - "pino-std-serializers": "^3.1.0", - "quick-format-unescaped": "^4.0.3", - "sonic-boom": "^1.0.2" - } - }, - "pino-pretty": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-4.8.0.tgz", - "integrity": "sha512-mhQfHG4rw5ZFpWL44m0Utjo4GC2+HMfdNvxyA8lLw0sIqn6fCf7uQe6dPckUcW/obly+OQHD7B/MTso6LNizYw==", - "requires": { - "@hapi/bourne": "^2.0.0", - "args": "^5.0.1", - "chalk": "^4.0.0", - "dateformat": "^4.5.1", - "fast-safe-stringify": "^2.0.7", - "jmespath": "^0.15.0", - "joycon": "^2.2.5", - "pump": "^3.0.0", - "readable-stream": "^3.6.0", - "rfdc": "^1.3.0", - "split2": "^3.1.1", - "strip-json-comments": "^3.1.1" - } - }, - "pino-std-serializers": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", - "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" - }, - "private-ip": { - "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" - } - }, - "process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, - "requires": { - "fromentries": "^1.2.0" - } - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "prom-client": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-13.2.0.tgz", - "integrity": "sha512-wGr5mlNNdRNzEhRYXgboUU2LxHWIojxscJKmtG3R8f4/KiWqyYgXTLHs0+Ted7tG3zFT7pgHJbtomzZ1L0ARaQ==", - "requires": { - "tdigest": "^0.1.1" - } - }, - "prometheus-gc-stats": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/prometheus-gc-stats/-/prometheus-gc-stats-0.6.3.tgz", - "integrity": "sha512-vCX+HZ1jZHkha25r5dAcRSNjue+K3Hn0B33EcZl7y3hgp3o1YsQ4Y3x7oJWKvDdbelFIL0McsXGmRg3zBrmq+g==", - "optional": true, - "requires": { - "gc-stats": "^1.4.0", - "optional": "^0.1.3" - } - }, - "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==" - }, - "promise-to-callback": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", - "integrity": "sha1-XSp0kBC/tn2WNZj805YHRqaP7vc=", - "requires": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" - } - }, - "proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "requires": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - } - }, - "protocol-buffers-schema": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.5.1.tgz", - "integrity": "sha512-YVCvdhxWNDP8/nJDyXLuM+UFsuPk4+1PB7WGPVDzm3HTHbzFLxQYeW2iZpS4mmnXrQJGBzt230t/BbEb7PrQaw==" - }, - "protons": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/protons/-/protons-2.0.2.tgz", - "integrity": "sha512-EIPoT9ftVirJ9QJ3oFoueYUiBhmPqE1AoSBPypLSqbbvHvx+OcUeK9z84YIsk6jda+N3FL58dU1LcWmfGCZGHA==", - "requires": { - "protocol-buffers-schema": "^3.3.1", - "signed-varint": "^2.0.1", - "uint8arrays": "^2.1.3", - "varint": "^5.0.0" - }, - "dependencies": { - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - } - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "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 - }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "requires": { - "escape-goat": "^2.0.0" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "queue-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", - "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==" - }, - "quick-format-unescaped": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.3.tgz", - "integrity": "sha512-MaL/oqh02mhEo5m5J2rwsVL23Iw2PEaGVHgT2vFt8AAsr0lfvQA5dpXo9TPu0rz7tSBdUPgkbam0j/fj5ZM8yg==" - }, - "rabin-wasm": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/rabin-wasm/-/rabin-wasm-0.1.5.tgz", - "integrity": "sha512-uWgQTo7pim1Rnj5TuWcCewRDTf0PEFTSlaUjWP4eY9EbLV9em08v89oCz/WO+wRxpYuO36XEHp4wgYQnAgOHzA==", - "requires": { - "@assemblyscript/loader": "^0.9.4", - "bl": "^5.0.0", - "debug": "^4.3.1", - "minimist": "^1.2.5", - "node-fetch": "^2.6.1", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "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" - } - }, - "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" - } - } - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - } - } - }, - "reachdown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reachdown/-/reachdown-1.1.0.tgz", - "integrity": "sha512-6LsdRe4cZyOjw4NnvbhUd/rGG7WQ9HMopPr+kyL018Uci4kijtxcGR5kVb5Ln13k4PEE+fEFQbjfOvNw7cnXmA==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", - "requires": { - "readable-stream": "^3.6.0" - } - }, - "readdirp": { - "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" - } - }, - "receptacle": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/receptacle/-/receptacle-1.3.2.tgz", - "integrity": "sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==", - "requires": { - "ms": "^2.1.1" - } - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "requires": { - "rc": "^1.2.8" - } - }, - "relative-url": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/relative-url/-/relative-url-1.0.2.tgz", - "integrity": "sha1-0hxSpy1gYQGLzun5yfwQa/fWUoc=" - }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "reset": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/reset/-/reset-0.1.0.tgz", - "integrity": "sha1-n8cxQXGZWubLC35YsGznUir0uvs=" - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "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", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "retimer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/retimer/-/retimer-2.0.0.tgz", - "integrity": "sha512-KLXY85WkEq2V2bKex/LOO1ViXVn2KGYe4PYysAdYdjmraYIUsVkXu8O4am+8+5UbaaGl1qho4aqAAPHNQ4GSbg==" - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/run/-/run-1.4.0.tgz", - "integrity": "sha1-4X2ekEOrL+F3dsspnhI3848LT/o=", - "requires": { - "minimatch": "*" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "requires": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "serialize-javascript": { - "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" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "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", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "signed-varint": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/signed-varint/-/signed-varint-2.0.1.tgz", - "integrity": "sha1-UKmYnafJjCxh2tEZvJdHDvhSgSk=", - "requires": { - "varint": "~5.0.0" - }, - "dependencies": { - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - } - } - }, - "sinon": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", - "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==", - "requires": { - "@sinonjs/commons": "^1.8.1", - "@sinonjs/fake-timers": "^6.0.1", - "@sinonjs/samsam": "^5.3.1", - "diff": "^4.0.2", - "nise": "^4.0.4", - "supports-color": "^7.1.0" - } - }, - "socket.io": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", - "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", - "requires": { - "debug": "~4.1.0", - "engine.io": "~3.5.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.4.0", - "socket.io-parser": "~3.4.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" - }, - "socket.io-client": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", - "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "socket.io-parser": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", - "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", - "requires": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - } - } - } - }, - "socket.io-parser": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", - "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", - "requires": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - } - } - }, - "sonic-boom": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", - "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", - "requires": { - "atomic-sleep": "^1.0.0", - "flatstr": "^1.0.12" - } - }, - "sort-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", - "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", - "requires": { - "is-plain-obj": "^2.0.0" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "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 - } - } - }, - "sparse-array": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/sparse-array/-/sparse-array-1.3.2.tgz", - "integrity": "sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg==" - }, - "spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "requires": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - } - }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "requires": { - "readable-stream": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "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" - } - }, - "streaming-iterables": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/streaming-iterables/-/streaming-iterables-5.0.4.tgz", - "integrity": "sha512-nEs6hBGIPsVz6uq6pscGGKfoPDQWrDQW0b0UHurtSDysekfKLmkPg7FQVRE2sj3Rad6yUo9E1sGTxOWyYsHQ/g==" - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "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==" - }, - "strtok3": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.2.4.tgz", - "integrity": "sha512-GO8IcFF9GmFDvqduIspUBwCzCbqzegyVKIsSymcMgiZKeCfrN9SowtUoi8+b59WZMAjIzVZic/Ft97+pynR3Iw==", - "requires": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^4.0.1" - } - }, - "subleveldown": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/subleveldown/-/subleveldown-6.0.1.tgz", - "integrity": "sha512-Cnf+cn2wISXU2xflY1SFIqfX4hG2d6lFk2P5F8RDQLmiqN9Ir4ExNfUFH6xnmizMseM/t+nMsDUKjN9Kw6ShFA==", - "dev": true, - "requires": { - "abstract-leveldown": "^7.2.0", - "encoding-down": "^7.1.0", - "inherits": "^2.0.3", - "level-option-wrap": "^1.1.0", - "levelup": "^5.1.1", - "reachdown": "^1.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "tdigest": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.1.tgz", - "integrity": "sha1-Ljyyw56kSeVdHmzZEReszKRYgCE=", - "requires": { - "bintrees": "1.0.1" - } - }, - "terser": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", - "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - } - }, - "terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", - "dev": true, - "requires": { - "jest-worker": "^27.0.6", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "dependencies": { - "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 - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "time-cache": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/time-cache/-/time-cache-0.3.0.tgz", - "integrity": "sha1-7Q388P2kXNyV+9YB/agw6/G9XYs=", - "requires": { - "lodash.throttle": "^4.1.1" - } - }, - "timeout-abort-controller": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/timeout-abort-controller/-/timeout-abort-controller-1.1.1.tgz", - "integrity": "sha512-BsF9i3NAJag6T0ZEjki9j654zoafI2X6ayuNd6Tp8+Ul6Tr5s4jo973qFeiWrRSweqvskC+AHDKUmIW4b7pdhQ==", - "requires": { - "abort-controller": "^3.0.0", - "retimer": "^2.0.0" - } - }, - "timestamp-nano": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/timestamp-nano/-/timestamp-nano-1.0.0.tgz", - "integrity": "sha512-NO/1CZigzlCWQiWdIGv8ebXt6Uk77zdLz2NE7KcZRU5Egj2+947lzUpk30xQUQlq5dRY25j7ZulG4RfA2DHYfA==" - }, - "tiny-each-async": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tiny-each-async/-/tiny-each-async-2.0.3.tgz", - "integrity": "sha1-jru/1tYpXxNwAD+7NxYq/loKUdE=" - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "tmp-promise": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.2.tgz", - "integrity": "sha512-OyCLAKU1HzBjL6Ev3gxUeraJNlbNingmi8IrHHEsYH8LTmEuhvYfqvhn2F/je+mjf4N58UmZ96OMEy1JanSCpA==", - "dev": true, - "requires": { - "tmp": "^0.2.0" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, - "to-regex-range": { - "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" - } - }, - "token-types": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.1.1.tgz", - "integrity": "sha512-hD+QyuUAyI2spzsI0B7gf/jJ2ggR4RjkAo37j3StuePhApJUwcWDjnHDOFdIWYSwNR28H14hpwm4EI+V1Ted1w==", - "requires": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - } - }, - "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=", - "requires": { - "utf8-byte-length": "^1.0.1" - } - }, - "ts-loader": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.1.tgz", - "integrity": "sha512-OkyShkcZTsTwyS3Kt7a4rsT/t2qvEVQuKCTg4LJmpj9fhFR7ukGdZwV6Qq3tRUkqcXtfGpPR7+hFKHCG/0d3Lw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - } - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "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" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "typical": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-6.0.1.tgz", - "integrity": "sha512-+g3NEp7fJLe9DPa1TArHm9QAA7YciZmWnfAqEaFrBihQ7epOv9i99rjtgb6Iz0wh3WuQDjsCTDfgRoGnmHN81A==" - }, - "uint8arrays": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-1.1.0.tgz", - "integrity": "sha512-cLdlZ6jnFczsKf5IH1gPHTtcHtPGho5r4CvctohmQjw8K7Q3gFdfIGHxSTdTaCKrL4w09SsPRJTqRS0drYeszA==", - "requires": { - "multibase": "^3.0.0", - "web-encoding": "^1.0.2" - } - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - } - }, - "uri-js": { - "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" - } - }, - "uri-to-multiaddr": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/uri-to-multiaddr/-/uri-to-multiaddr-4.0.0.tgz", - "integrity": "sha512-6zQ1uBlE+F//46CBA3lx3vBMhybSvdGJqgNyQPobSDsWGrDDdmJM/f95GPaswXAGFlRHPqOjrGKT11IcKmIfaA==", - "requires": { - "is-ip": "^3.1.0", - "multiaddr": "^8.0.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" - } - }, - "ursa-optional": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/ursa-optional/-/ursa-optional-0.10.2.tgz", - "integrity": "sha512-TKdwuLboBn7M34RcvVTuQyhvrA8gYKapuVdm0nBP0mnBc7oECOfUQZrY91cefL3/nm64ZyrejSRrhTVdX7NG/A==", - "requires": { - "bindings": "^1.5.0", - "nan": "^2.14.2" - } - }, - "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=" - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "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==", - "dev": true - }, - "varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" - }, - "varint-decoder": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/varint-decoder/-/varint-decoder-1.0.0.tgz", - "integrity": "sha512-JkOvdztASWGUAsXshCFHrB9f6AgR2Q8W08CEyJ+43b1qtFocmI8Sp1R/M0E/hDOY2FzVIqk63tOYLgDYWuJ7IQ==", - "requires": { - "varint": "^5.0.0" - }, - "dependencies": { - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - } - } - }, - "watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "web-encoding": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", - "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", - "requires": { - "@zxing/text-encoding": "0.9.0", - "util": "^0.12.3" - } - }, - "webcrypto": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/webcrypto/-/webcrypto-0.1.1.tgz", - "integrity": "sha512-BAvoatS38TbHdyt42ECLroi27NmDh5iea5l5rHC6nZTZjlbJlndrT0FoIiEq7fmPHpmNtP0lMFKVMEKZQFIrGA==", - "dev": true, - "requires": { - "crypto-browserify": "^3.10.0", - "detect-node": "^2.0.3" - } - }, - "webpack": { - "version": "5.65.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz", - "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.2" - } - }, - "webpack-cli": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", - "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.0", - "@webpack-cli/info": "^1.4.0", - "@webpack-cli/serve": "^1.6.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "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.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "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 - }, - "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 - }, - "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" - } - } - } - }, - "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.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "which-typed-array": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.6.tgz", - "integrity": "sha512-DdY984dGD5sQ7Tf+x1CkXzdg85b9uEel6nr4UkFg1LoE9OXv3uRuZhe5CoWdawhGACeFpEZXH8fFLQnDhbpm/Q==", - "requires": { - "available-typed-arrays": "^1.0.4", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.6" - } - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "requires": { - "string-width": "^4.0.0" - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" - }, - "xmlhttprequest-ssl": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", - "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==" - }, - "xor-distance": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xor-distance/-/xor-distance-2.0.0.tgz", - "integrity": "sha512-AsAqZfPAuWx7qB/0kyRDUEvoU3QKsHWzHU9smFlkaiprEpGfJ/NBbLze2Uq0rdkxCxkNM9uOLvz/KoNBCbZiLQ==" - }, - "xsalsa20": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.1.0.tgz", - "integrity": "sha512-zd3ytX2cm+tcSndRU+krm0eL4TMMpZE7evs5hLRAoOy6gviqLfe3qOlkjF3i5SeAkQUCeJk0lJZrEU56kHRfWw==" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "dependencies": { - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "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==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "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", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "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==", - "dev": true - } - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "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==" - } - } -} diff --git a/src/chains/filecoin/filecoin/package.json b/src/chains/filecoin/filecoin/package.json deleted file mode 100644 index e5db6dce98..0000000000 --- a/src/chains/filecoin/filecoin/package.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "name": "@ganache/filecoin", - "publishConfig": { - "access": "public" - }, - "version": "0.8.0", - "description": "Ganache's Filecoin client implementation", - "author": "Tim Coulter", - "homepage": "https://github.com/trufflesuite/ganache/tree/develop/src/filecoin#readme", - "license": "MIT", - "engines": { - "node": ">=12.17.0 <14.0.0 || >=14.0.1 <17.0.0", - "npm": ">=6.14.4" - }, - "main": "dist/node/ganache-filecoin.min.js", - "typings": "typings", - "source": "index.ts", - "directories": { - "lib": "lib", - "test": "tests" - }, - "files": [ - "lib/index.*", - "dist" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/trufflesuite/ganache.git", - "directory": "src/chains/filecoin" - }, - "scripts": { - "build": "webpack", - "tsc": "tsc --build", - "test": "ts-node-cwd ../../../../scripts/require-engines.ts || nyc --reporter lcov npm run mocha", - "mocha": "ts-node-cwd ../../../../scripts/require-engines.ts || cross-env TS_NODE_FILES=true TS_NODE_PROJECT=tsconfig.test.json mocha --timeout 60000 --no-parallel --exit --check-leaks --throw-deprecation --trace-warnings --require ts-node/register 'tests/**/*.test.ts'" - }, - "bugs": { - "url": "https://github.com/trufflesuite/ganache/issues" - }, - "keywords": [ - "ganache", - "ganache-filecoin", - "filecoin", - "blockchain", - "smart contracts", - "dapps", - "web3", - "tooling" - ], - "dependencies": { - "ipfs": "0.52.3", - "ipfs-http-server": "0.1.4", - "ipld-dag-cbor": "0.17.0", - "keccak": "3.0.2", - "leveldown": "6.1.0", - "secp256k1": "4.0.3", - "@trufflesuite/bigint-buffer": "1.1.10" - }, - "devDependencies": { - "@filecoin-shipyard/lotus-client-rpc": "0.2.0", - "@filecoin-shipyard/lotus-client-schema": "2.0.0", - "@ganache/filecoin-options": "0.8.0", - "@ganache/flavor": "0.9.0", - "@ganache/utils": "0.8.0", - "@types/abstract-leveldown": "7.2.0", - "@types/bn.js": "5.1.0", - "@types/deep-equal": "1.0.1", - "@types/encoding-down": "5.0.0", - "@types/levelup": "5.1.0", - "@types/lodash.clonedeep": "4.5.6", - "@types/mocha": "9.0.0", - "@types/secp256k1": "4.0.1", - "@types/terser-webpack-plugin": "5.0.2", - "@types/ws": "7.4.7", - "async-sema": "3.1.0", - "base32-encoding": "1.0.0", - "blakejs": "1.2.1", - "bn.js": "5.2.1", - "borc": "2.1.2", - "cids": "1.1.7", - "cross-env": "7.0.3", - "deep-equal": "2.0.3", - "emittery": "0.10.0", - "encoding-down": "7.1.0", - "fs-extra": "9.1.0", - "ipfs-http-client": "48.1.3", - "levelup": "5.1.1", - "lodash.clonedeep": "4.5.0", - "mocha": "9.1.3", - "multicodec": "2.1.0", - "multihashing": "0.3.3", - "noble-bls12-381": "0.4.3", - "node-loader": "1.0.2", - "nyc": "15.1.0", - "subleveldown": "6.0.1", - "terser-webpack-plugin": "5.2.5", - "tmp-promise": "3.0.2", - "ts-loader": "9.3.1", - "ts-node": "10.9.1", - "typescript": "4.7.4", - "webpack": "5.65.0", - "webpack-cli": "4.9.1", - "webpack-merge": "5.8.0", - "ws": "8.2.3" - } -} diff --git a/src/chains/filecoin/filecoin/src/@types/@filecoin-shipyard/lotus-client-schema/index.d.ts b/src/chains/filecoin/filecoin/src/@types/@filecoin-shipyard/lotus-client-schema/index.d.ts deleted file mode 100644 index a0cc67d13b..0000000000 --- a/src/chains/filecoin/filecoin/src/@types/@filecoin-shipyard/lotus-client-schema/index.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -declare module "@filecoin-shipyard/lotus-client-schema" { - export type Schema = { - methods: { - [propertyName: string]: { - subscription?: boolean; - namespace?: string; - }; - }; - }; - - export type MainNetDeclaration = { - common: Schema; - fullNode: Schema; - storageMiner: Schema; - gatewayApi: Schema; - walletApi: Schema; - workerApi: Schema; - }; - - let mainnet: MainNetDeclaration; -} diff --git a/src/chains/filecoin/filecoin/src/@types/@trufflesuite/uws-js-unofficial.d.ts b/src/chains/filecoin/filecoin/src/@types/@trufflesuite/uws-js-unofficial.d.ts deleted file mode 100644 index 005c70fe5f..0000000000 --- a/src/chains/filecoin/filecoin/src/@types/@trufflesuite/uws-js-unofficial.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import "uWebsockets.js"; - -enum ListenOptions { - LIBUS_LISTEN_DEFAULT = 0, - LIBUS_LISTEN_EXCLUSIVE_PORT = 1 -} -// uWebSockets.js doesn't include these in its TS def file. -declare module "uWebsockets.js" { - export interface TemplatedApp { - listen( - host: RecognizedString, - port: number, - options: ListenOptions, - cb: (listenSocket: us_listen_socket | false) => void - ): TemplatedApp; - - listen( - port: number, - options: ListenOptions, - cb: (listenSocket: us_listen_socket | false) => void - ): TemplatedApp; - } -} diff --git a/src/chains/filecoin/filecoin/src/@types/base32-encoding/index.d.ts b/src/chains/filecoin/filecoin/src/@types/base32-encoding/index.d.ts deleted file mode 100644 index 07dbaa49fa..0000000000 --- a/src/chains/filecoin/filecoin/src/@types/base32-encoding/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -declare module "base32-encoding" { - type Base32Encoder = { - /** - * Encode a normal Buffer as base32, meaning only the lower 5 bits are used. - * Takes `⌈len * 8 / 5⌉` bytes to encode. Takes optional Buffer `output` instead - * of allocating a new Buffer internally, and writes at optional `offset`. - * Returns `output`. Sets `base32.encode.bytes` to the number of bytes written. - */ - encode(buf: Buffer, output?: Buffer, offset?: number): Buffer; - - /** - * Decode a base32 Buffer as a normal, "base256" Buffer, meaning only the lower - * 5 bits are read from `buf` and assembled into complete 8 bit bytes. Takes - * `⌊len * 5 / 8⌋` bytes to encode. Takes optional Buffer `output` instead of - * allocating a new Buffer internally, and writes at optional `offset`. - * Returns `output`. Sets `base32.decode.bytes` to the number of bytes written. - */ - decode(b32: Buffer, output?: Buffer, offset?: number): Buffer; - - /** - * Encode `buf` to base32 and translate into a string using optional `alphabet`. - * `alphabet` defaults to `23456789abcdefghijkmnpqrstuvwxyz` (missing `o01l`). - */ - stringify(buf: Buffer, alphabet?: string): string; - - /** - * Decode `str` from base32 and translate into a Buffer using optional `alphabet`. - * `alphabet` defaults to `23456789abcdefghijkmnpqrstuvwxyz` (missing `o01l`). - */ - parse(str: string, alphabet?: string): Buffer; - }; - - let base32: Base32Encoder; - - export default base32; -} diff --git a/src/chains/filecoin/filecoin/src/@types/blakejs/index.d.ts b/src/chains/filecoin/filecoin/src/@types/blakejs/index.d.ts deleted file mode 100644 index ccbde08864..0000000000 --- a/src/chains/filecoin/filecoin/src/@types/blakejs/index.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -declare module "blakejs" { - type Blake = { - blake2b(buf: Buffer, key: Uint8Array | null, outLen: number): Uint8Array; - blake2s(buf: Buffer, key: Uint8Array | null, outLen: number): Uint8Array; - - blake2sInit(outputLen: number, obj: null): any; - blake2sUpdate(context: any, buf: Buffer); - blake2sFinal(context: any): Uint8Array; - }; - - let blake: Blake; - - export default blake; -} diff --git a/src/chains/filecoin/filecoin/src/@types/borc/index.d.ts b/src/chains/filecoin/filecoin/src/@types/borc/index.d.ts deleted file mode 100644 index e7de935796..0000000000 --- a/src/chains/filecoin/filecoin/src/@types/borc/index.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -declare module "borc" { - type Borc = { - encode(obj: any): Buffer; - }; - - let cbor: Borc; - - export default cbor; -} diff --git a/src/chains/filecoin/filecoin/src/@types/ipfs-http-server/index.d.ts b/src/chains/filecoin/filecoin/src/@types/ipfs-http-server/index.d.ts deleted file mode 100644 index 208248ea5f..0000000000 --- a/src/chains/filecoin/filecoin/src/@types/ipfs-http-server/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module "ipfs-http-server"; diff --git a/src/chains/filecoin/filecoin/src/@types/ipld-dag-cbor/index.d.ts b/src/chains/filecoin/filecoin/src/@types/ipld-dag-cbor/index.d.ts deleted file mode 100644 index 4d33b70502..0000000000 --- a/src/chains/filecoin/filecoin/src/@types/ipld-dag-cbor/index.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -declare module "ipld-dag-cbor" { - type RawCid = { - toString(): string; - }; - - type IpldCbor = { - util: { - cid( - obj: any, - options?: Partial<{ - cidVersion: number; - hashAlg: string; - }> - ): Promise; - }; - }; - - let dagCBOR: IpldCbor; - - export default dagCBOR; -} diff --git a/src/chains/filecoin/filecoin/src/@types/multihashing/index.d.ts b/src/chains/filecoin/filecoin/src/@types/multihashing/index.d.ts deleted file mode 100644 index 97acee4f2f..0000000000 --- a/src/chains/filecoin/filecoin/src/@types/multihashing/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module "multihashing"; diff --git a/src/chains/filecoin/filecoin/src/api.ts b/src/chains/filecoin/filecoin/src/api.ts deleted file mode 100644 index 55fb03c5fb..0000000000 --- a/src/chains/filecoin/filecoin/src/api.ts +++ /dev/null @@ -1,1295 +0,0 @@ -//#region Imports -import { Quantity, PromiEvent, Subscription, Api } from "@ganache/utils"; -import Blockchain from "./blockchain"; -import { - StartDealParams, - SerializedStartDealParams -} from "./things/start-deal-params"; -import { SerializedRootCID, RootCID } from "./things/root-cid"; -import { DealInfo, SerializedDealInfo } from "./things/deal-info"; -import { SerializedTipset, Tipset } from "./things/tipset"; -import { Address, AddressProtocol, SerializedAddress } from "./things/address"; -import { - SerializedRetrievalOrder, - RetrievalOrder -} from "./things/retrieval-order"; -import { SerializedQueryOffer } from "./things/query-offer"; -import Emittery from "emittery"; -import { HeadChange, HeadChangeType } from "./things/head-change"; -import { SubscriptionMethod, SubscriptionId } from "./types/subscriptions"; -// same as SubscriptionMethod.ChannelClosed, but api-extractor doesn't like the -// enum so I just hardcoded it here -const ChannelClosed = "xrpc.ch.close" as const; -import { FileRef, SerializedFileRef } from "./things/file-ref"; -import { MinerPower, SerializedMinerPower } from "./things/miner-power"; -import { PowerClaim } from "./things/power-claim"; -import { MinerInfo, SerializedMinerInfo } from "./things/miner-info"; -import { SerializedVersion, Version } from "./things/version"; -import { Message, SerializedMessage } from "./things/message"; -import { - MessageSendSpec, - SerializedMessageSendSpec -} from "./things/message-send-spec"; -import { - SerializedSignedMessage, - SignedMessage -} from "./things/signed-message"; -import { KeyType } from "./things/key-type"; -import { KeyInfo, SerializedKeyInfo } from "./things/key-info"; -import { SerializedSignature, Signature } from "./things/signature"; -import { SigType } from "./things/sig-type"; -import { SerializedBlockHeader } from "./things/block-header"; -import { SerializedBlockMessages } from "./things/block-messages"; -import { StorageDealStatus } from "./types/storage-deal-status"; - -export default class FilecoinApi implements Api { - readonly [index: string]: (...args: any) => Promise; - - readonly #getId = ( - id => () => - Quantity.from(++id) - )(0); - readonly #subscriptions = new Map(); - readonly #blockchain: Blockchain; - - constructor(blockchain: Blockchain) { - this.#blockchain = blockchain; - } - - async initialize() { - await this.#blockchain.initialize(); - } - - async stop(): Promise { - return await this.#blockchain.stop(); - } - - /** - * Provides information about the provider. - * - * @returns A `Version` object with various version details - * and the current block interval. - */ - async "Filecoin.Version"(): Promise { - return new Version({ - blockDelay: BigInt( - this.#blockchain.minerEnabled - ? this.#blockchain.options.miner.blockTime - : 0 - ) - }).serialize(); - } - - /** - * Returns the libp2p Peer ID. Since Filecoin-flavored Ganache - * does not connect to a network, it doesn't leverage libp2p. - * This method instead returns a hardcoded Peer ID based on - * the string "ganache". - * - * @returns `bafzkbzaced47iu7qygeshb3jamzkh2cqcmlxzcpxrnqsj6yoipuidor523jyg` - */ - async "Filecoin.ID"(): Promise { - // This is calculated with the below code - // Hardcoded as there's no reason to recalculate each time - // mh = require("multihashing")(Buffer.from("ganache"), "blake2b-256"); - // (new require("peer-id")(mh)).toString() - // Not sure what else to put here since we don't implement - // the Filecoin P2P network - return "bafzkbzaced47iu7qygeshb3jamzkh2cqcmlxzcpxrnqsj6yoipuidor523jyg"; - } - - /** - * Returns the genesis tipset (tipset.Height = 0). - * - * @returns The genesis tipset. - */ - async "Filecoin.ChainGetGenesis"(): Promise { - const tipset = this.#blockchain.genesisTipset(); - return tipset.serialize(); - } - - /** - * Returns the head of the blockchain, which is the latest tipset. - * - * @returns The latest tipset. - */ - async "Filecoin.ChainHead"(): Promise { - const tipset = this.#blockchain.latestTipset(); - return tipset.serialize(); - } - - /** - * Starts a subscription to receive the latest tipset once - * it has been mined. - * - * Reference implementation entry point: https://git.io/JtO3a - * - * @param rpcId - This parameter is not provided by the user, but - * injected by the internal system. - * @returns An object with the subscription ID and an unsubscribe - * function. - */ - "Filecoin.ChainNotify"(rpcId?: string): PromiEvent { - const subscriptionId = this.#getId(); - let promiEvent: PromiEvent; - - const currentHead = new HeadChange({ - type: HeadChangeType.HCCurrent, - val: this.#blockchain.latestTipset() - }); - - const unsubscribeFromEmittery = this.#blockchain.on( - "tipset", - (tipset: Tipset) => { - // Ganache currently doesn't support Filecoin reorgs, - // so we'll always only have one tipset per head change - // See reference implementations here: https://git.io/JtOOk; - // other lines of interest are line 207 which shows only the chainstore only - // references the "hcnf" (head change notification function) in the - // reorgWorker function (lines 485-560) - - // Ganache currently doesn't support Filecoin reverts, - // so we'll always use HCApply for now - - const newHead = new HeadChange({ - type: HeadChangeType.HCApply, - val: tipset - }); - - if (promiEvent) { - promiEvent.emit("message", { - type: SubscriptionMethod.ChannelUpdated, - data: [subscriptionId.toString(), [newHead.serialize()]] - }); - } - } - ); - - const unsubscribe = (): void => { - unsubscribeFromEmittery(); - // Per https://git.io/JtOc1 and https://git.io/JtO3H - // implementations, we're should cancel the subscription - // since the protocol technically supports multiple channels - // per subscription, but implementation seems to show that there's - // only one channel per subscription - if (rpcId) { - promiEvent.emit("message", { - type: SubscriptionMethod.SubscriptionCanceled, - data: [rpcId] - }); - } - }; - - promiEvent = PromiEvent.resolve({ - unsubscribe, - id: subscriptionId - }); - - // There currently isn't an unsubscribe method, - // but it would go here - this.#subscriptions.set(subscriptionId.toString()!, unsubscribe); - - promiEvent.emit("message", { - type: SubscriptionMethod.ChannelUpdated, - data: [subscriptionId.toString(), [currentHead.serialize()]] - }); - - return promiEvent; - } - - /** - * Receives the `xrpc.ch.close` method which cancels a - * subscription. - * - * @param subscriptionId - The subscription ID to cancel. - * @returns `false` if the subscription ID doesn't exist or - * if the subscription is already canceled, `true` otherwise. - */ - [ChannelClosed](subscriptionId: SubscriptionId): Promise { - const subscriptions = this.#subscriptions; - const unsubscribe = this.#subscriptions.get(subscriptionId); - - if (unsubscribe) { - subscriptions.delete(subscriptionId); - unsubscribe(); - return Promise.resolve(true); - } else { - return Promise.resolve(false); - } - } - - /** - * Returns the tipset for the provided tipset key. - * - * @param serializedTipsetKey - an array of the Block RootCIDs - * that are part of the tipset. Must be an exact match and - * must include exactly the same number of blocks that are - * actually in the tipset. - * @returns The matched tipset. - */ - async "Filecoin.ChainGetTipSet"( - serializedTipsetKey: Array - ): Promise { - await this.#blockchain.waitForReady(); - - const tipset = await this.#blockchain.getTipsetFromKey( - serializedTipsetKey.map(serializedCid => new RootCID(serializedCid)) - ); - return tipset.serialize(); - } - - /** - * Returns the tipset for the provided tipset height. - * - * @param height - A `number` which indicates the `tipset.Height` - * that you would like to retrieve. - * @param serializedTipsetKey - An optional tipset key, an array - * of the Block RootCIDs that are part of the tipset. Must be - * an exact match and must include exactly the same number of - * blocks that are actually in the tipset. - * @returns The matched tipset. - */ - async "Filecoin.ChainGetTipSetByHeight"( - height: number, - serializedTipsetKey?: Array - ): Promise { - await this.#blockchain.waitForReady(); - - let tipset: Tipset; - // we check if serializedTipsetKey is an array as well because - // of our voodoo json rpc ID gets appended to the args - if (serializedTipsetKey && Array.isArray(serializedTipsetKey)) { - tipset = await this.#blockchain.getTipsetByHeight( - height, - serializedTipsetKey.map(serializedCid => new RootCID(serializedCid)) - ); - } else { - tipset = await this.#blockchain.getTipsetByHeight(height); - } - - return tipset.serialize(); - } - - /** - * Returns a block for the given RootCID. - * - * @param serializedBlockCid - The RootCID of the block. - * @returns The matched Block. - */ - async "Filecoin.ChainGetBlock"( - serializedBlockCid: SerializedRootCID - ): Promise { - await this.#blockchain.waitForReady(); - - const blockCid = new RootCID(serializedBlockCid); - const blockHeader = await this.#blockchain.blockHeaderManager!.get( - blockCid.root.value - ); - - if (!blockHeader) { - throw new Error("Could not find a block for the provided CID"); - } - - return blockHeader.serialize(); - } - - /** - * Returns the BlockMessages object, or all of the messages - * that are part of a block, for a given block RootCID. - * - * @param serializedBlockCid - The RootCID of the block. - * @returns The matched BlockMessages object. - */ - async "Filecoin.ChainGetBlockMessages"( - serializedBlockCid: SerializedRootCID - ): Promise { - await this.#blockchain.waitForReady(); - - const blockCid = new RootCID(serializedBlockCid); - const blockMessages = - await this.#blockchain.blockMessagesManager!.getBlockMessages( - blockCid.root - ); - - if (!blockMessages) { - throw new Error("Could not find a block for the provided CID"); - } - - return blockMessages.serialize(); - } - - /** - * Returns a Message for a given RootCID. - * - * @param serializedMessageCid - The RootCID of the message. - * @returns The matched Message object. - */ - async "Filecoin.ChainGetMessage"( - serializedMessageCid: SerializedRootCID - ): Promise { - await this.#blockchain.waitForReady(); - - const blockMessageCid = new RootCID(serializedMessageCid); - const signedMessage = await this.#blockchain.signedMessagesManager!.get( - blockMessageCid.root.value - ); - - if (!signedMessage) { - throw new Error("Could not find a message for the provided CID"); - } - - return signedMessage.message.serialize(); - } - - /** - * Gets the next nonce of an address, including any pending - * messages in the current message pool. - * - * @param address - A `string` of the public address. - * @returns A `number` of the next nonce. - */ - async "Filecoin.MpoolGetNonce"(address: string): Promise { - await this.#blockchain.waitForReady(); - - const account = await this.#blockchain.accountManager!.getAccount(address); - const pendingMessagesForAccount = this.#blockchain.messagePool.filter( - queuedMessage => queuedMessage.message.from === address - ); - - if (pendingMessagesForAccount.length === 0) { - // account.nonce already stores the "next nonce" - // don't add more to it - return account.nonce; - } else { - // in this case, we have messages in the pool with - // already incremented nonces (account.nonce only - // increments when the block is mined). this will - // generate a nonce greater than any other nonce - const nonceFromPendingMessages = pendingMessagesForAccount.reduce( - (nonce, m) => { - return Math.max(nonce, m.message.nonce); - }, - account.nonce - ); - return nonceFromPendingMessages + 1; - } - } - - /** - * Submits a signed message to be added to the message - * pool. - * - * Only value transfers are supported (`Method = 0`). - * - * @param signedMessage - The SignedMessage object. - * @returns The RootCID of the signed message. - */ - async "Filecoin.MpoolPush"( - signedMessage: SerializedSignedMessage - ): Promise { - const rootCid = await this.#blockchain.pushSigned( - new SignedMessage(signedMessage) - ); - - return rootCid.serialize(); - } - - /** - * Submits an array of signed messages to be added to - * the message pool. - * - * Messages are processed in index order of the array; - * if any of them are invalid for any reason, the valid - * messages up to that point are still added to the message - * pool. The invalid message, as well as following messages - * in the array, will not be processed or added to the - * message pool. - * - * Only value transfers are supported (`Method = 0`). - * - * Reference implementation: https://git.io/JtgeG - * - * @param signedMessages - The array of SignedMessage objects. - * @returns An array of RootCIDs for signed messages that - * were valid and added to the message pool. The order of the - * output array matches the order of the input array. - */ - async "Filecoin.MpoolBatchPush"( - signedMessages: Array - ): Promise> { - const cids: RootCID[] = []; - - // The lotus code makes it seem like it tries to - // still send a response with the signed messages that - // succeeded if one of them fails (see line 195 in ref impl). - // However, after trying it on lotus-devnet, I only receive the - // error (if the second message is the one that errors). - // So just letting the error bubble up should do the trick here. - // The reference implementation also doesn't revert/clear the messages - // that did successfully get added. - for (const signedMessage of signedMessages) { - const cid = await this.#blockchain.pushSigned( - new SignedMessage(signedMessage) - ); - cids.push(cid); - } - - return cids.map(c => c.serialize()); - } - - /** - * Submits an unsigned message to be added to the message - * pool. - * - * The `From` address must be one of the addresses held - * in the wallet; see `Filecoin.WalletList` to retrieve - * a list of addresses currently in the wallet. The `Nonce` - * must be `0` and is filled in with the correct value in - * the response object. Gas-related parameters will be - * generated if not filled. - * - * Only value transfers are supported (`Method = 0`). - * - * @param message - The Message object. - * @param spec - The MessageSendSpec object which defines - * the MaxFee. - * @returns The corresponding SignedMessage that was added - * to the message pool. - */ - async "Filecoin.MpoolPushMessage"( - message: SerializedMessage, - spec: SerializedMessageSendSpec - ): Promise { - const signedMessage = await this.#blockchain.push( - new Message(message), - new MessageSendSpec(spec) - ); - - return signedMessage.serialize(); - } - - /** - * Submits an array of unsigned messages to be added to - * the message pool. - * - * Messages are processed in index order of the array; - * if any of them are invalid for any reason, the valid - * messages up to that point are still added to the message - * pool. The invalid message, as well as following messages - * in the array, will not be processed or added to the - * message pool. - * - * The `From` address must be one of the addresses - * held in the wallet; see `Filecoin.WalletList` to retrieve - * a list of addresses currently in the wallet. The `Nonce` - * must be `0` and is filled in with the correct value in - * the response object. Gas-related parameters will be - * generated if not filled. - * - * Only value transfers are supported (`Method = 0`). - * - * Reference implementation: https://git.io/JtgeU - * - * @param messages - The array of Message objects. - * @param spec - The MessageSendSpec object which defines - * the MaxFee. - * @returns An array of SignedMessages that were valid and - * added to the message pool. The order of the output array - * matches the order of the input array. - */ - async "Filecoin.MpoolBatchPushMessage"( - messages: Array, - spec: SerializedMessageSendSpec - ): Promise> { - const signedMessages: SignedMessage[] = []; - - // The lotus code makes it seem like it tries to - // still send a response with the signed messages that - // succeeded if one of them fails (see line 219 in ref impl). - // However, after trying it on lotus-devnet, I only receive the - // error (if the second message is the one that errors). - // So just letting the error bubble up should do the trick here. - // The reference implementation also doesn't revert/clear the messages - // that did successfully get added. - for (const message of messages) { - const signedMessage = await this.#blockchain.push( - new Message(message), - new MessageSendSpec(spec) - ); - signedMessages.push(signedMessage); - } - - return signedMessages.map(sm => sm.serialize()); - } - - /** - * Clears the current pending message pool; any messages in - * the pool will not be processed in the next tipset/block - * mine. - * - * @param local - In a normal Lotus node, setting this to `true` - * will only clear local messages from the message pool. Since - * Filecoin-flavored Ganache doesn't have a network, all messages - * are local, and therefore all messages from the message pool - * will be removed regardless of the value of this flag. - */ - async "Filecoin.MpoolClear"(local: boolean): Promise { - await this.#blockchain.mpoolClear(local); - } - - /** - * Returns a list of messages in the current pending message - * pool. - * - * @param tipsetKey - A normal Lotus node accepts an optional single - * parameter of the TipsetKey to refer to the pending messages. - * However, with the design of Filecoin-flavored Ganache, this - * parameter is not used. - * @returns An array of SignedMessage objects that are in the message pool. - */ - async "Filecoin.MpoolPending"( - tipsetKey: Array - ): Promise> { - const signedMessages = await this.#blockchain.mpoolPending(); - - return signedMessages.map(signedMessage => signedMessage.serialize()); - } - - /** - * Returns a list of pending messages for inclusion in the next block. - * Since all messages in the message pool are included in the next - * block for Filecoin-flavored Ganache, this method returns the same - * result as `Filecoin.MpoolPending`. - * - * Reference implementation: https://git.io/Jt24C - * - * @param tipsetKey - A normal Lotus node accepts an optional - * parameter of the TipsetKey to refer to the pending messages. - * However, with the design of Filecoin-flavored Ganache, this - * parameter is not used in Ganache. - * @param ticketQuality - Since all messages are included in the next - * block in Ganache, this number is ignored. A normal Lotus node uses - * this number to help determine which messages are going to be included - * in the next block. This parameter is also not used in Ganache. - * - * @returns - */ - async "Filecoin.MpoolSelect"( - tipsetKey: Array, - ticketQuality: number - ): Promise> { - const signedMessages = await this.#blockchain.mpoolPending(); - - return signedMessages.map(signedMessage => signedMessage.serialize()); - } - - /** - * Returns the miner actor address for the Filecoin-flavored - * Ganache node. This value is always the same and doesn't change. - * - * @returns `t01000` - */ - async "Filecoin.ActorAddress"(): Promise { - return this.#blockchain.miner.value; - } - - /** - * Returns a list of the miner addresses for the - * Filecoin-flavored Ganache. Ganache always has - * the same single miner. - * - * @returns `[ "t01000" ]` - */ - async "Filecoin.StateListMiners"(): Promise> { - return [this.#blockchain.miner.value]; - } - - /** - * Returns the miner power of a given miner address. - * - * "A storage miner's storage power is a value roughly proportional - * to the amount of storage capacity they make available on behalf - * of the network via capacity commitments or storage deals." - * From: https://docs.filecoin.io/reference/glossary/#storage-power - * - * Since Ganache is currently only supporting 1 miner per Ganache - * instance, then it will have a raw byte power of 1n and everything else will - * have 0n. This indicates the supported miner contains all of the storage - * power for the entire network (which is true). Any number would do, so we'll - * stick with 1n. - * - * Quality adjusted power will be 0n always as relative - * power doesn't change: - * "The storage power a storage miner earns from a storage deal offered by a - * verified client will be augmented by a multiplier." - * https://docs.filecoin.io/reference/glossary/#quality-adjusted-storage-power - * - * @param minerAddress - The miner address to get miner power for. - * @returns The MinerPower object. - */ - async "Filecoin.StateMinerPower"( - minerAddress: string - ): Promise { - if (minerAddress === this.#blockchain.miner.value) { - const power = new MinerPower({ - minerPower: new PowerClaim({ - rawBytePower: 1n, - qualityAdjPower: 0n - }), - totalPower: new PowerClaim({ - rawBytePower: 1n, - qualityAdjPower: 0n - }), - hasMinPower: false - }); - - return power.serialize(); - } else { - const power = new MinerPower({ - minerPower: new PowerClaim({ - rawBytePower: 0n, - qualityAdjPower: 0n - }), - totalPower: new PowerClaim({ - rawBytePower: 0n, - qualityAdjPower: 0n - }), - hasMinPower: false - }); - - return power.serialize(); - } - } - - /** - * Returns the miner info for the given miner address. - * - * @param minerAddress - - * @param tipsetKey - A normal Lotus node uses tipsetKey to get the - * miner info at that Tipset. However, the miner info in - * Filecoin-flavored Ganache will not change based on the tipset, - * so this parameter is ignored by Ganache. - * @returns The MinerInfo object. - */ - async "Filecoin.StateMinerInfo"( - minerAddress: string, - tipsetKey: Array - ): Promise { - if (minerAddress === this.#blockchain.miner.value) { - // The defaults are set up to correspond to the current - // miner address t0100, which is not configurable currently - return new MinerInfo().serialize(); - } else { - throw new Error("Failed to load miner actor: actor not found"); - } - } - - /** - * Returns the default address of the wallet; this is also the first address - * that is returned in `Filecoin.WalletList`. - * - * @returns A `string` of the public address. - */ - async "Filecoin.WalletDefaultAddress"(): Promise { - await this.#blockchain.waitForReady(); - const accounts = - await this.#blockchain.accountManager!.getControllableAccounts(); - return accounts[0].address.serialize(); - } - - /** - * Sets the default address to the provided address. This will move the - * address from its current position in the `Filecoin.WalletList` response - * to the front of the array. This change is persisted across Ganache sessions - * if you are using a persisted database with `database.db` or - * `database.dbPath` options. - * - * @param address - The public address to set as the default address. Must be an address - * that is in the wallet; see `Filecoin.WalletList` to get a list of addresses - * in the wallet. - */ - async "Filecoin.WalletSetDefault"(address: string): Promise { - await this.#blockchain.waitForReady(); - await this.#blockchain.privateKeyManager!.setDefault(address); - } - - /** - * Returns the balance of any address. - * - * @param address - The public address to retrieve the balance for. - * @returns A `string` of the `attoFIL` balance of `address`, - * encoded in base-10 (aka decimal format). - */ - async "Filecoin.WalletBalance"(address: string): Promise { - await this.#blockchain.waitForReady(); - - const account = await this.#blockchain.accountManager!.getAccount(address); - return account.balance.serialize(); - } - - /** - * Generate a new random address to add to the wallet. This new - * address is persisted across Ganache sessions if you are using - * a persisted database with `database.db` or `database.dbPath` options. - * - * @param keyType - The key type (`bls` or `secp256k1`) to use - * to generate the address. KeyType of `secp256k1-ledger` is - * not supported in Filecoin-flavored Ganache. - * @returns The public address as a `string`. - */ - async "Filecoin.WalletNew"(keyType: KeyType): Promise { - let protocol: AddressProtocol; - switch (keyType) { - case KeyType.KeyTypeBLS: { - protocol = AddressProtocol.BLS; - break; - } - case KeyType.KeyTypeSecp256k1: { - protocol = AddressProtocol.SECP256K1; - break; - } - case KeyType.KeyTypeSecp256k1Ledger: - default: { - throw new Error( - `KeyType of ${keyType} is not supported. Please use "bls" or "secp256k1".` - ); - } - } - - const account = await this.#blockchain.createAccount(protocol); - return account.address.serialize(); - } - - /** - * Returns the list of addresses in the wallet. The wallet stores the private - * key of these addresses and therefore can sign messages and random bytes. - * - * @returns An array of `string`'s of each public address in the wallet. - */ - async "Filecoin.WalletList"(): Promise> { - await this.#blockchain.waitForReady(); - - const accounts = - await this.#blockchain.accountManager!.getControllableAccounts(); - return accounts.map(account => account.address.serialize()); - } - - /** - * Checks whether or not the wallet includes the provided address. - * - * @param address - The public address of type `string` to check. - * @returns `true` if the address is in the wallet, `false` otherwise. - */ - async "Filecoin.WalletHas"(address: string): Promise { - await this.#blockchain.waitForReady(); - - return await this.#blockchain.privateKeyManager!.hasPrivateKey(address); - } - - /** - * Removes the address from the wallet. This method is unrecoverable. - * If you want to recover the address removed from this method, you - * must use `Filecoin.WalletImport` with the correct private key. - * Removing addresses from the wallet will persist between Ganache - * sessions if you are using a persisted database with - * `database.db` or `database.dbPath` options. - * - * @param address - A `string` of the public address to remove. - */ - async "Filecoin.WalletDelete"(address: string): Promise { - await this.#blockchain.waitForReady(); - - await this.#blockchain.privateKeyManager!.deletePrivateKey(address); - } - - /** - * Exports the private key information from an address stored in the wallet. - * - * @param address - A `string` of the public address to export. - * @returns The KeyInfo object. - */ - async "Filecoin.WalletExport"(address: string): Promise { - await this.#blockchain.waitForReady(); - - const privateKey = await this.#blockchain.privateKeyManager!.getPrivateKey( - address - ); - if (privateKey === null) { - throw new Error("key not found"); - } - - const protocol = Address.parseProtocol(address); - - const keyInfo = new KeyInfo({ - type: - protocol === AddressProtocol.BLS - ? KeyType.KeyTypeBLS - : KeyType.KeyTypeSecp256k1, - privateKey: Buffer.from(privateKey, "hex") - }); - - return keyInfo.serialize(); - } - - /** - * Imports an address into the wallet with provided private key info. - * Use this method to add more addresses to the wallet. Adding addresses - * to the wallet will persist between Ganache sessions if you are using - * a persisted database with with `database.db` or `database.dbPath` options. - * - * @param serializedKeyInfo - The private key KeyInfo object for the address to import. - * @returns The corresponding public address of type `string`. - */ - async "Filecoin.WalletImport"( - serializedKeyInfo: SerializedKeyInfo - ): Promise { - await this.#blockchain.waitForReady(); - - const keyInfo = new KeyInfo(serializedKeyInfo); - - if (keyInfo.type === KeyType.KeyTypeSecp256k1Ledger) { - throw new Error( - "Ganache doesn't support ledger accounts; please use 'bls' or 'secp256k1' key types." - ); - } - - const protocol = - keyInfo.type === KeyType.KeyTypeBLS - ? AddressProtocol.BLS - : AddressProtocol.SECP256K1; - - const address = Address.fromPrivateKey( - keyInfo.privateKey.toString("hex"), - protocol - ); - - await this.#blockchain.privateKeyManager!.putPrivateKey( - address.value, - address.privateKey! - ); - - return address.serialize(); - } - - /** - * Signs an arbitrary byte string using the private key info - * stored in the wallet. - * - * @param address - A `string` of the public address in the wallet to - * sign with. - * @param data - A `string` of a base-64 encoded byte array to sign. - * @returns A Signature object which contains the signature details. - */ - async "Filecoin.WalletSign"( - address: string, - data: string - ): Promise { - await this.#blockchain.waitForReady(); - - const account = await this.#blockchain.accountManager!.getAccount(address); - - const signedData = await account.address.signBuffer( - Buffer.from(data, "base64") - ); - - const signature = new Signature({ - type: - account.address.protocol === AddressProtocol.BLS - ? SigType.SigTypeBLS - : SigType.SigTypeSecp256k1, - data: signedData - }); - - return signature.serialize(); - } - - /** - * Signs a Message using the private key info stored in the wallet. - * - * @param address - A `string` of the public address in the wallet to - * sign with. - * @param serializedMessage - A Message object that needs signing. - * @returns The corresponding SignedMessage object. - */ - async "Filecoin.WalletSignMessage"( - address: string, - serializedMessage: SerializedMessage - ): Promise { - await this.#blockchain.waitForReady(); - - const account = await this.#blockchain.accountManager!.getAccount(address); - - const message = new Message(serializedMessage); - const signedData = await account.address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: - account.address.protocol === AddressProtocol.BLS - ? SigType.SigTypeBLS - : SigType.SigTypeSecp256k1, - data: signedData - }) - }); - - return signedMessage.serialize(); - } - - /** - * Verifies the validity of a signature for a given address - * and unsigned byte string. - * - * @param inputAddress - A `string` of the public address that - * supposedly signed `data` with `serializedSignature` - * @param data - A `string` of the data that was signed, encoded - * in base-64. - * @param serializedSignature - A Signature object of the signature - * you're trying to verify. - * @returns `true` if valid, `false` otherwise. - */ - async "Filecoin.WalletVerify"( - inputAddress: string, - data: string, - serializedSignature: SerializedSignature - ): Promise { - await this.#blockchain.waitForReady(); - - const signature = new Signature(serializedSignature); - - const protocol = Address.parseProtocol(inputAddress); - const isBLS = - protocol === AddressProtocol.BLS && signature.type === SigType.SigTypeBLS; - const isSecp = - protocol === AddressProtocol.SECP256K1 && - signature.type === SigType.SigTypeSecp256k1; - const isValid = isBLS || isSecp; - if (isValid) { - const address = new Address(inputAddress); - return await address.verifySignature( - Buffer.from(data, "base64"), - signature - ); - } else { - throw new Error( - "Invalid address protocol with signature. Address protocol should match the corresponding signature Type. Only BLS or SECP256K1 are supported" - ); - } - } - - /** - * Checks the validity of a given public address. - * - * @param inputAddress - The `string` of the public address to check. - * @returns If successful, it returns the address back as a `string`. - * Otherwise returns an error. - */ - async "Filecoin.WalletValidateAddress"( - inputAddress: string - ): Promise { - await this.#blockchain.waitForReady(); - - const address = Address.validate(inputAddress); - - return address.serialize(); - } - - /** - * Start a storage deal. The data must already be uploaded to - * the Ganache IPFS node. Deals are automatically accepted - * as long as the public address in `Wallet` is in Ganache's - * wallet (see `Filecoin.WalletList` or `Filecoin.WalletHas` - * to check). Storage deals in Ganache automatically progress - * each tipset from one state to the next towards the - * StorageDealStatusActive state. - * - * @param serializedProposal - A StartDealParams object of the deal details. - * @returns The RootCID of the new `DealInfo` =\> `DealInfo.ProposalCid` - */ - async "Filecoin.ClientStartDeal"( - serializedProposal: SerializedStartDealParams - ): Promise { - const proposal = new StartDealParams(serializedProposal); - const proposalRootCid = await this.#blockchain.startDeal(proposal); - - return proposalRootCid.serialize(); - } - - /** - * List all storage deals regardless of state, including expired deals. - * - * @returns An array of DealInfo objects. - */ - async "Filecoin.ClientListDeals"(): Promise> { - await this.#blockchain.waitForReady(); - - const deals = await this.#blockchain.dealInfoManager!.getDeals(); - - return deals.map(deal => deal.serialize()); - } - - /** - * Get the detailed info of a storage deal. - * - * Reference implementation: https://git.io/JthfU - * - * @param serializedCid - The `DealInfo.ProposalCid` RootCID for the - * deal you're searching for - * @returns A DealInfo object. - */ - async "Filecoin.ClientGetDealInfo"( - serializedCid: SerializedRootCID - ): Promise { - await this.#blockchain.waitForReady(); - - const dealInfo = await this.#blockchain.dealInfoManager!.get( - serializedCid["/"] - ); - if (dealInfo) { - // Verified that this is the correct lookup since dealsByCid - // uses the ProposalCid (ref impl: https://git.io/Jthv7) and the - // reference implementation of the lookup follows suit: https://git.io/Jthvp - // - return dealInfo.serialize(); - } else { - throw new Error("Could not find a deal for the provided CID"); - } - } - - /** - * Get the corresponding string that represents a StorageDealStatus - * code. - * - * Reference implementation: https://git.io/JqUXg - * - * @param statusCode - A `number` that's stored in `DealInfo.State` - * which represents the current state of a storage deal. - * @returns A `string` representation of the provided `statusCode`. - */ - async "Filecoin.ClientGetDealStatus"(statusCode: number): Promise { - const status = StorageDealStatus[statusCode]; - if (!status) { - throw new Error(`no such deal state ${statusCode}`); - } - return `StorageDeal${status}`; - } - - /** - * Starts a subscription to receive updates when storage deals - * change state. - * - * @param rpcId - This parameter is not provided by the user, but - * injected by the internal system. - * @returns An object with the subscription ID and an unsubscribe - * function. - */ - "Filecoin.ClientGetDealUpdates"(rpcId?: string): PromiEvent { - const subscriptionId = this.#getId(); - let promiEvent: PromiEvent; - - const unsubscribeFromEmittery = this.#blockchain.on( - "dealUpdate", - (deal: DealInfo) => { - if (promiEvent) { - promiEvent.emit("message", { - type: SubscriptionMethod.ChannelUpdated, - data: [subscriptionId.toString(), deal.serialize()] - }); - } - } - ); - - const unsubscribe = (): void => { - unsubscribeFromEmittery(); - // Per https://git.io/JtOc1 and https://git.io/JtO3H - // implementations, we're should cancel the subscription - // since the protocol technically supports multiple channels - // per subscription, but implementation seems to show that there's - // only one channel per subscription - if (rpcId) { - promiEvent.emit("message", { - type: SubscriptionMethod.SubscriptionCanceled, - data: [rpcId] - }); - } - }; - - promiEvent = PromiEvent.resolve({ - unsubscribe, - id: subscriptionId - }); - - // There currently isn't an unsubscribe method, - // but it would go here - this.#subscriptions.set(subscriptionId.toString()!, unsubscribe); - - return promiEvent; - } - - /** - * Ask the node to search for data stored in the IPFS node. - * - * @param rootCid - The RootCID to search for. - * @returns A QueryOffer with details of the data for further - * retrieval. - */ - async "Filecoin.ClientFindData"( - rootCid: SerializedRootCID - ): Promise> { - const remoteOffer = await this.#blockchain.createQueryOffer( - new RootCID(rootCid) - ); - return [remoteOffer.serialize()]; - } - - /** - * Returns whether or not the local IPFS node has the data - * requested. Since Filecoin-flavored Ganache doesn't connect - * to any external networks, all data on the IPFS node is local. - * - * @param rootCid - The RootCID to serach for. - * @returns `true` if the local IPFS node has the data, - * `false` otherwise. - */ - async "Filecoin.ClientHasLocal"( - rootCid: SerializedRootCID - ): Promise { - return await this.#blockchain.hasLocal(rootCid["/"]); - } - - /** - * Download the contents of a storage deal to disk (local - * to Ganache). - * - * @param retrievalOrder - A RetrievalOrder object detailing - * the deal, retrieval price, etc. - * @param ref - A FileRef object specifying where the file - * should be saved to. - */ - async "Filecoin.ClientRetrieve"( - retrievalOrder: SerializedRetrievalOrder, - ref: SerializedFileRef - ): Promise { - await this.#blockchain.retrieve( - new RetrievalOrder(retrievalOrder), - new FileRef(ref) - ); - } - - /** - * Manually mine a tipset immediately. Mines even if the - * miner is disabled. - * - * @returns The Tipset object that was mined. - */ - async "Ganache.MineTipset"(): Promise { - await this.#blockchain.mineTipset(); - const tipset = this.#blockchain.latestTipset(); - return tipset.serialize(); - } - - /** - * Enables the miner. - */ - async "Ganache.EnableMiner"(): Promise { - await this.#blockchain.enableMiner(); - } - - /** - * Disables the miner. - */ - async "Ganache.DisableMiner"(): Promise { - await this.#blockchain.disableMiner(); - } - - /** - * The current status on whether or not the miner - * is enabled. The initial value is determined by - * the option `miner.mine`. If `true`, then auto-mining - * (`miner.blockTime = 0`) and interval mining - * (`miner.blockTime > 0`) will be processed. - * If `false`, tipsets/blocks will only be mined with - * `Ganache.MineTipset` - * - * @returns A `boolean` on whether or not the miner is - * enabled. - */ - async "Ganache.MinerEnabled"(): Promise { - return this.#blockchain.minerEnabled; - } - - /** - * A subscription method that provides an update - * whenever the miner is enabled or disabled. - * - * @param rpcId - This parameter is not provided by the user, but - * injected by the internal system. - * @returns An object with the subscription ID and an unsubscribe - * function. - */ - "Ganache.MinerEnabledNotify"(rpcId?: string): PromiEvent { - const subscriptionId = this.#getId(); - let promiEvent: PromiEvent; - - const unsubscribeFromEmittery = this.#blockchain.on( - "minerEnabled", - (minerEnabled: boolean) => { - if (promiEvent) { - promiEvent.emit("message", { - type: SubscriptionMethod.ChannelUpdated, - data: [subscriptionId.toString(), minerEnabled] - }); - } - } - ); - - const unsubscribe = (): void => { - unsubscribeFromEmittery(); - // Per https://git.io/JtOc1 and https://git.io/JtO3H - // implementations, we're should cancel the subscription - // since the protocol technically supports multiple channels - // per subscription, but implementation seems to show that there's - // only one channel per subscription - if (rpcId) { - promiEvent.emit("message", { - type: SubscriptionMethod.SubscriptionCanceled, - data: [rpcId] - }); - } - }; - - promiEvent = PromiEvent.resolve({ - unsubscribe, - id: subscriptionId - }); - - // There currently isn't an unsubscribe method, - // but it would go here - this.#subscriptions.set(subscriptionId.toString()!, unsubscribe); - - promiEvent.emit("message", { - type: SubscriptionMethod.ChannelUpdated, - data: [subscriptionId.toString(), this.#blockchain.minerEnabled] - }); - - return promiEvent; - } - - /** - * Retrieves an internal `DealInfo` by its `DealID`. - * - * @param dealId - A `number` corresponding to the `DealInfo.DealID` - * for the deal to retrieve. - * @returns The matched DealInfo object. - */ - async "Ganache.GetDealById"(dealId: number): Promise { - await this.#blockchain.waitForReady(); - - const deal = await this.#blockchain.dealInfoManager!.getDealById(dealId); - if (deal) { - return deal.serialize(); - } else { - throw new Error("Could not find a deal for the provided ID"); - } - } -} diff --git a/src/chains/filecoin/filecoin/src/blockchain.ts b/src/chains/filecoin/filecoin/src/blockchain.ts deleted file mode 100644 index c48093fb0b..0000000000 --- a/src/chains/filecoin/filecoin/src/blockchain.ts +++ /dev/null @@ -1,987 +0,0 @@ -import { Tipset } from "./things/tipset"; -import { BlockHeader } from "./things/block-header"; -import { CID } from "./things/cid"; -import { RootCID } from "./things/root-cid"; -import { - Quantity, - RandomNumberGenerator, - uintToBuffer, - unref -} from "@ganache/utils"; -import Emittery from "emittery"; -import { DealInfo } from "./things/deal-info"; -import { StartDealParams } from "./things/start-deal-params"; -import { - dealIsInProcess, - StorageDealStatus, - nextSuccessfulState -} from "./types/storage-deal-status"; -import IPFSServer from "./ipfs-server"; -import dagCBOR from "ipld-dag-cbor"; -import { RetrievalOrder } from "./things/retrieval-order"; -import { FilecoinInternalOptions } from "@ganache/filecoin-options"; -import { QueryOffer } from "./things/query-offer"; -import { Ticket } from "./things/ticket"; -import { FileRef } from "./things/file-ref"; -import fs from "fs"; -import path from "path"; -import { CID as IPFS_CID } from "ipfs"; -import { Account } from "./things/account"; -import Database from "./database"; -import TipsetManager from "./data-managers/tipset-manager"; -import BlockHeaderManager from "./data-managers/block-header-manager"; -import { SignedMessage } from "./things/signed-message"; -import { Message } from "./things/message"; -import { MessageSendSpec } from "./things/message-send-spec"; -import { Address, AddressProtocol } from "./things/address"; -import { Signature } from "./things/signature"; -import { SigType } from "./things/sig-type"; -import { Sema } from "async-sema"; -import SignedMessageManager from "./data-managers/message-manager"; -import BlockMessagesManager from "./data-managers/block-messages-manager"; -import { BlockMessages } from "./things/block-messages"; -import AccountManager from "./data-managers/account-manager"; -import PrivateKeyManager from "./data-managers/private-key-manager"; -import { fillGasInformation, getBaseFee, getMinerFee } from "./gas"; -import { checkMessage } from "./message"; -import DealInfoManager from "./data-managers/deal-info-manager"; -import * as bls from "noble-bls12-381"; - -export type BlockchainEvents = { - ready: undefined; - tipset: Tipset; - minerEnabled: boolean; - dealUpdate: DealInfo; -}; - -// Reference implementation: https://git.io/JtEVW -const BurntFundsAddress = Address.fromId(99, true); - -export default class Blockchain extends Emittery { - public tipsetManager: TipsetManager | null; - public blockHeaderManager: BlockHeaderManager | null; - public accountManager: AccountManager | null; - public privateKeyManager: PrivateKeyManager | null; - public signedMessagesManager: SignedMessageManager | null; - public blockMessagesManager: BlockMessagesManager | null; - public dealInfoManager: DealInfoManager | null; - - readonly miner: Address; - readonly #miningLock: Sema; - #minerEnabled: boolean; - get minerEnabled() { - return this.#minerEnabled; - } - - public messagePool: Array; - readonly #messagePoolLock: Sema; - - readonly options: FilecoinInternalOptions; - - private ipfsServer: IPFSServer; - private miningTimeout: NodeJS.Timeout | null; - readonly #miningTimeoutLock: Sema; - private rng: RandomNumberGenerator; - - readonly #database: Database; - - // This is primarily used by Ganache UI to support workspaces - get dbDirectory(): string | null { - return this.#database.directory; - } - - private ready: boolean; - private stopped: boolean; - - constructor(options: FilecoinInternalOptions) { - super(); - this.options = options; - - this.rng = new RandomNumberGenerator(this.options.wallet.seed); - - this.miner = Address.fromId(0, false, true); - - this.messagePool = []; - this.#messagePoolLock = new Sema(1); - - this.ready = false; - this.stopped = false; - - // Create the IPFS server - this.ipfsServer = new IPFSServer(this.options.chain); - - this.miningTimeout = null; - this.#miningTimeoutLock = new Sema(1); - // to prevent us from stopping while mining or mining - // multiple times simultaneously - this.#miningLock = new Sema(1); - this.#minerEnabled = this.options.miner.mine; - - // We set these to null since they get initialized in - // an async callback below. We could ignore the TS error, - // but this is more technically correct (and check for not null later) - this.tipsetManager = null; - this.blockHeaderManager = null; - this.accountManager = null; - this.privateKeyManager = null; - this.signedMessagesManager = null; - this.blockMessagesManager = null; - this.dealInfoManager = null; - - this.#database = new Database(options.database); - } - - async initialize() { - await this.#database.initialize(); - - this.blockHeaderManager = await BlockHeaderManager.initialize( - this.#database.blocks! - ); - this.tipsetManager = await TipsetManager.initialize( - this.#database.tipsets!, - this.blockHeaderManager - ); - this.privateKeyManager = await PrivateKeyManager.initialize( - this.#database.privateKeys! - ); - this.accountManager = await AccountManager.initialize( - this.#database.accounts!, - this.privateKeyManager, - this.#database - ); - this.signedMessagesManager = await SignedMessageManager.initialize( - this.#database.signedMessages! - ); - this.blockMessagesManager = await BlockMessagesManager.initialize( - this.#database.blockMessages!, - this.signedMessagesManager - ); - this.dealInfoManager = await DealInfoManager.initialize( - this.#database.deals!, - this.#database.dealExpirations! - ); - - const controllableAccounts = - await this.accountManager.getControllableAccounts(); - if (controllableAccounts.length === 0) { - for (let i = 0; i < this.options.wallet.totalAccounts; i++) { - await this.accountManager.putAccount( - Account.random(this.options.wallet.defaultBalance, this.rng) - ); - } - } - - const recordedGenesisTipset = await this.tipsetManager.getTipsetWithBlocks( - 0 - ); - if (recordedGenesisTipset === null) { - // Create genesis tipset - const genesisBlock = new BlockHeader({ - ticket: new Ticket({ - // Reference implementation https://git.io/Jt31s - vrfProof: this.rng.getBuffer(32) - }), - parents: [ - // Both lotus and lotus-devnet always have the Filecoin genesis CID - // hardcoded here. Reference implementation: https://git.io/Jt3oK - new RootCID({ - "/": "bafyreiaqpwbbyjo4a42saasj36kkrpv4tsherf2e7bvezkert2a7dhonoi" - }) - ] - }); - - const genesisTipset = new Tipset({ - blocks: [genesisBlock], - height: 0 - }); - - this.tipsetManager.earliest = genesisTipset; // initialize earliest - await this.tipsetManager.putTipset(genesisTipset); // sets latest - await this.#database.db!.put("latest-tipset", uintToBuffer(0)); - } else { - this.tipsetManager.earliest = recordedGenesisTipset; // initialize earliest - const data: Buffer = await this.#database.db!.get("latest-tipset"); - const height = Quantity.toNumber(data); - const latestTipset = await this.tipsetManager.getTipsetWithBlocks(height); - this.tipsetManager.latest = latestTipset!; // initialize latest - } - - await this.ipfsServer.start(this.#database.directory!); - - // Fire up the miner if necessary - if (this.minerEnabled && this.options.miner.blockTime > 0) { - await this.enableMiner(); - } - - // Get this party started! - this.ready = true; - this.emit("ready"); - - // Don't log until things are all ready - this.logLatestTipset(); - } - - async waitForReady() { - return new Promise(resolve => { - if (this.ready) { - resolve(void 0); - } else { - this.on("ready", resolve); - } - }); - } - - /** - * Gracefully shuts down the blockchain service and all of its dependencies. - */ - async stop() { - // Don't try to stop if we're already stopped - if (this.stopped) { - return; - } - this.stopped = true; - - // make sure we wait until other stuff is finished, - // prevent it from starting up again by not releasing - await this.#miningLock.acquire(); - await this.#messagePoolLock.acquire(); - await this.#miningTimeoutLock.acquire(); - - if (this.miningTimeout) { - clearTimeout(this.miningTimeout); - } - if (this.ipfsServer) { - await this.ipfsServer.stop(); - } - if (this.#database) { - await this.#database.close(); - } - } - - // using `any` because the IPFS type that should be here can't be exported by - // api-extractor :-() - get ipfs(): any | null { - return this.ipfsServer.node; - } - - private async intervalMine(mine: boolean = true) { - await this.#miningTimeoutLock.acquire(); - - if (mine) { - await this.mineTipset(); - } - - this.miningTimeout = setTimeout( - this.intervalMine.bind(this), - this.options.miner.blockTime * 1000 - ); - unref(this.miningTimeout); - - this.#miningTimeoutLock.release(); - } - - async enableMiner() { - this.#minerEnabled = true; - this.emit("minerEnabled", true); - - if (this.options.miner.blockTime > 0) { - await this.intervalMine(false); - } - } - - async disableMiner() { - this.#minerEnabled = false; - this.emit("minerEnabled", false); - - await this.#miningTimeoutLock.acquire(); - if (this.miningTimeout) { - clearTimeout(this.miningTimeout); - this.miningTimeout = null; - } - this.#miningTimeoutLock.release(); - } - - genesisTipset(): Tipset { - if (!this.tipsetManager || !this.tipsetManager.earliest) { - throw new Error( - "Could not get genesis tipset due to not being initialized yet" - ); - } - return this.tipsetManager.earliest; - } - - latestTipset(): Tipset { - if (!this.tipsetManager || !this.tipsetManager.latest) { - throw new Error( - "Could not get latest tipset due to not being initialized yet" - ); - } - return this.tipsetManager.latest; - } - - // Reference Implementation: https://git.io/JtWnM - async push(message: Message, spec: MessageSendSpec): Promise { - await this.waitForReady(); - - if (message.method !== 0) { - throw new Error( - `Unsupported Method (${message.method}); only value transfers (Method: 0) are supported in Ganache.` - ); - } - - if (message.nonce !== 0) { - throw new Error( - `MpoolPushMessage expects message nonce to be 0, was ${message.nonce}` - ); - } - - // the reference implementation doesn't allow the address to be - // the ID protocol, but we're only going to support BLS for now - if ( - Address.parseProtocol(message.from) === AddressProtocol.ID || - Address.parseProtocol(message.from) === AddressProtocol.Unknown - ) { - throw new Error( - "The From address is an invalid protocol; please use a BLS or SECP256K1 address." - ); - } - if ( - Address.parseProtocol(message.to) === AddressProtocol.ID || - Address.parseProtocol(message.to) === AddressProtocol.Unknown - ) { - throw new Error( - "The To address is an invalid protocol; please use a BLS or SECP256K1 address." - ); - } - - fillGasInformation(message, spec); - - try { - await this.#messagePoolLock.acquire(); - - const account = await this.accountManager!.getAccount(message.from); - const pendingMessagesForAccount = this.messagePool.filter( - queuedMessage => queuedMessage.message.from === message.from - ); - - if (pendingMessagesForAccount.length === 0) { - // account.nonce already stores the "next nonce" - // don't add more to it - message.nonce = account.nonce; - } else { - // in this case, we have messages in the pool with - // already incremented nonces (account.nonce only - // increments when the block is mined). this will - // generate a nonce greater than any other nonce - const nonceFromPendingMessages = pendingMessagesForAccount.reduce( - (nonce, m) => { - return Math.max(nonce, m.message.nonce); - }, - account.nonce - ); - message.nonce = nonceFromPendingMessages + 1; - } - - // check if enough funds - const messageBalanceRequired = - message.gasFeeCap * BigInt(message.gasLimit) + message.value; - const pendingBalanceRequired = pendingMessagesForAccount.reduce( - (balanceSpent, m) => { - return ( - balanceSpent + - m.message.gasFeeCap * BigInt(m.message.gasLimit) + - m.message.value - ); - }, - 0n - ); - const totalRequired = messageBalanceRequired + pendingBalanceRequired; - if (account.balance.value < totalRequired) { - throw new Error( - `mpool push: not enough funds: ${ - account.balance.value - pendingBalanceRequired - } < ${messageBalanceRequired}` - ); - } - - // sign the message - const signature = await account.address.signMessage(message); - const signedMessage = new SignedMessage({ - Message: message.serialize(), - Signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }).serialize() - }); - - // add to pool - await this.pushSigned(signedMessage, false); - - this.#messagePoolLock.release(); - - return signedMessage; - } catch (e) { - this.#messagePoolLock.release(); - throw e; - } - } - - async pushSigned( - signedMessage: SignedMessage, - acquireLock: boolean = true - ): Promise { - const error = await checkMessage(signedMessage); - if (error) { - throw error; - } - - try { - if (acquireLock) { - await this.#messagePoolLock.acquire(); - } - - this.messagePool.push(signedMessage); - - if (acquireLock) { - this.#messagePoolLock.release(); - } - - if (this.minerEnabled && this.options.miner.blockTime === 0) { - // we should instamine this message - // purposely not awaiting on this as we'll - // deadlock for Filecoin.MpoolPushMessage calls - this.mineTipset(); - } - - return new RootCID({ - root: signedMessage.cid - }); - } catch (e) { - if (acquireLock) { - this.#messagePoolLock.release(); - } - throw e; - } - } - - // Reference implementation: https://git.io/Jt2lh - // I don't believe the reference implementation translates very - // easily to our architecture. The implementation below mimics - // the desired behavior - async mpoolClear(local: boolean): Promise { - await this.waitForReady(); - - try { - await this.#messagePoolLock.acquire(); - - if (local) { - this.messagePool = []; - } else { - const localAccounts = - await this.accountManager!.getControllableAccounts(); - const localAddressStrings = localAccounts.map( - account => account.address.value - ); - this.messagePool = this.messagePool.filter(signedMessage => { - return localAddressStrings.includes(signedMessage.message.from); - }); - } - - this.#messagePoolLock.release(); - } catch (e) { - this.#messagePoolLock.release(); - throw e; - } - } - - // Reference implementation: https://git.io/Jt28F - // The below implementation makes the assumption that - // it's not possible for the user to request a valid - // tipset key that is greater than the message pools - // pending height. This just cannot happen with the - // current design of Ganache. I believe this scenario - // would happen in other networks because of syncing - // issues preventing the state to always be at the - // network head. - async mpoolPending(): Promise> { - await this.waitForReady(); - - try { - await this.#messagePoolLock.acquire(); - - // this does a pseudo clone so that what we send - // won't change after the lock is released but before - // it goes out the api - const pendingMessages = this.messagePool.map( - sm => new SignedMessage(sm.serialize()) - ); - - this.#messagePoolLock.release(); - - return pendingMessages; - } catch (e) { - this.#messagePoolLock.release(); - throw e; - } - } - - // Note that this is naive - it always assumes the first block in the - // previous tipset is the parent of the new blocks. - async mineTipset(numNewBlocks: number = 1): Promise { - await this.waitForReady(); - - try { - await this.#miningLock.acquire(); - - // let's grab the messages going into the next tipset - // immediately and clear the message pool for the next tipset - let nextMessagePool: Array; - try { - await this.#messagePoolLock.acquire(); - nextMessagePool = ([] as Array).concat(this.messagePool); - this.messagePool = []; - this.#messagePoolLock.release(); - } catch (e) { - this.#messagePoolLock.release(); - throw e; - } - - const previousTipset: Tipset = this.latestTipset(); - const newTipsetHeight = previousTipset.height + 1; - - const newBlocks: Array = []; - - for (let i = 0; i < numNewBlocks; i++) { - newBlocks.push( - new BlockHeader({ - miner: this.miner, - parents: [previousTipset.cids[0]], - height: newTipsetHeight, - // Determined by interpreting the description of `weight` - // as an accumulating weight of win counts (which default to 1) - // See the description here: https://spec.filecoin.io/#section-glossary.weight - parentWeight: - BigInt(previousTipset.blocks[0].electionProof.winCount) + - previousTipset.blocks[0].parentWeight - }) - ); - } - - if (nextMessagePool.length > 0) { - const successfulMessages: SignedMessage[] = []; - const blsSignatures: Buffer[] = []; - for (const signedMessage of nextMessagePool) { - const { from, to, value } = signedMessage.message; - - const baseFee = getBaseFee(); - if (baseFee !== 0) { - const successful = await this.accountManager!.transferFunds( - from, - BurntFundsAddress.value, - getMinerFee(signedMessage.message) - ); - - if (!successful) { - // While we should have checked this when the message was sent, - // we double check here just in case - const fromAccount = await this.accountManager!.getAccount(from); - console.warn( - `Could not burn the base fee of ${baseFee} attoFIL from address ${from} due to lack of funds. ${fromAccount.balance.value} attoFIL available` - ); - continue; - } - } - - // send mining funds - let successful = await this.accountManager!.transferFunds( - from, - this.miner.value, - getMinerFee(signedMessage.message) - ); - - if (!successful) { - // While we should have checked this when the message was sent, - // we double check here just in case - const fromAccount = await this.accountManager!.getAccount(from); - console.warn( - `Could not transfer the mining fees of ${getMinerFee( - signedMessage.message - )} attoFIL from address ${from} due to lack of funds. ${ - fromAccount.balance.value - } attoFIL available` - ); - continue; - } - - successful = await this.accountManager!.transferFunds( - from, - to, - value - ); - - if (!successful) { - // While we should have checked this when the message was sent, - // we double check here just in case - const fromAccount = await this.accountManager!.getAccount(from); - console.warn( - `Could not transfer ${value} attoFIL from address ${from} to address ${to} due to lack of funds. ${fromAccount.balance.value} attoFIL available` - ); - - // do not revert miner transfer as the miner attempted to mine - continue; - } - - this.accountManager!.incrementNonce(from); - - successfulMessages.push(signedMessage); - - if (signedMessage.signature.type === SigType.SigTypeBLS) { - blsSignatures.push(signedMessage.signature.data); - } - } - - if (blsSignatures.length > 0) { - newBlocks[0].blsAggregate = new Signature({ - type: SigType.SigTypeBLS, - data: Buffer.from(bls.aggregateSignatures(blsSignatures).buffer) - }); - } else { - newBlocks[0].blsAggregate = new Signature({ - type: SigType.SigTypeBLS, - data: Buffer.from([]) - }); - } - - await this.blockMessagesManager!.putBlockMessages( - newBlocks[0].cid, - BlockMessages.fromSignedMessages(successfulMessages) - ); - } - - const newTipset = new Tipset({ - blocks: newBlocks, - height: newTipsetHeight - }); - - await this.tipsetManager!.putTipset(newTipset); - await this.#database.db!.put( - "latest-tipset", - uintToBuffer(newTipsetHeight) - ); - - // Advance the state of all deals in process. - const currentDeals = await this.dealInfoManager!.getDeals(); - const inProcessDeals = currentDeals.filter(deal => - dealIsInProcess(deal.state) - ); - for (const deal of inProcessDeals) { - deal.advanceState(); - await this.dealInfoManager!.updateDealInfo(deal); - this.emit("dealUpdate", deal); - } - - // Process deal expirations - const activeDeals = currentDeals.filter( - deal => deal.state === StorageDealStatus.Active - ); - for (const deal of activeDeals) { - const expirationTipset = await this.dealInfoManager!.getDealExpiration( - deal.proposalCid - ); - if (expirationTipset !== null && newTipset.height > expirationTipset) { - deal.state = StorageDealStatus.Expired; - await this.dealInfoManager!.updateDealInfo(deal); - this.emit("dealUpdate", deal); - } - } - - this.logLatestTipset(); - - this.emit("tipset", newTipset); - - this.#miningLock.release(); - } catch (e) { - this.#miningLock.release(); - throw e; - } - } - - async hasLocal(cid: string): Promise { - if (!this.ipfsServer.node) { - return false; - } - - try { - // This stat will fail if the object doesn't exist. - await this.ipfsServer.node.object.stat(cid, { - timeout: 500 // Enforce a timeout; otherwise will hang if CID not found - }); - return true; - } catch { - return false; - } - } - - private async getIPFSObjectSize(cid: string): Promise { - if (!this.ipfsServer.node) { - return 0; - } - - const stat = await this.ipfsServer.node.object.stat(cid, { - timeout: 500 // Enforce a timeout; otherwise will hang if CID not found - }); - - return stat.CumulativeSize; - } - - private async downloadFile(cid: string, ref: FileRef): Promise { - if (!this.ipfsServer.node) { - throw new Error("IPFS server is not running"); - } - - const dirname = path.dirname(ref.path); - let fileStream: fs.WriteStream; - try { - try { - if (!fs.existsSync(dirname)) { - await fs.promises.mkdir(dirname, { recursive: true }); - } - fileStream = fs.createWriteStream(`${ref.path}.partial`, { - encoding: "binary" - }); - } catch (e: any) { - throw new Error( - `Could not create file.\n CID: ${cid}\n Path: ${ - ref.path - }\n Error: ${e.toString()}` - ); - } - - const chunks = this.ipfsServer.node.files.read(new IPFS_CID(cid), { - timeout: 500 // Enforce a timeout; otherwise will hang if CID not found - }); - - for await (const chunk of chunks) { - try { - await new Promise((resolve, reject) => { - const shouldContinue = fileStream.write(chunk, error => { - if (error) { - reject(error); - } else { - if (shouldContinue) { - resolve(); - } else { - fileStream.once("drain", resolve); - } - } - }); - }); - } catch (e: any) { - throw new Error( - `Could not save file.\n CID: ${cid}\n Path: ${ - ref.path - }\n Error: ${e.toString()}` - ); - } - } - - await fs.promises.rename(`${ref.path}.partial`, ref.path); - } finally { - // @ts-ignore - if (fileStream) { - fileStream.close(); - } - } - } - - async startDeal(proposal: StartDealParams): Promise { - await this.waitForReady(); - - if (!proposal.wallet) { - throw new Error( - "StartDealParams.Wallet not provided and is required to start a storage deal." - ); - } - - // have to specify type since node types are not correct - const account = await this.accountManager!.getAccount( - proposal.wallet.value - ); - if (!account.address.privateKey) { - throw new Error( - `Invalid StartDealParams.Wallet provided. Ganache doesn't have the private key for account with address ${proposal.wallet.value}` - ); - } - - const signature = await account.address.signProposal(proposal); - - const proposalRawCid = await dagCBOR.util.cid(signature.toString("hex")); - const proposalCid = new CID(proposalRawCid.toString()); - - const currentDeals = await this.dealInfoManager!.getDeals(); - let deal = new DealInfo({ - proposalCid: new RootCID({ - root: proposalCid - }), - state: StorageDealStatus.Validating, // Not sure if this is right, but we'll start here - message: "", - provider: this.miner, - pieceCid: proposal.data.pieceCid, - size: - proposal.data.pieceSize || - (await this.getIPFSObjectSize(proposal.data.root.root.value)), - pricePerEpoch: proposal.epochPrice, - duration: proposal.minBlocksDuration, - dealId: currentDeals.length + 1 - }); - - // prepare future deal expiration - const activeTipsetHeight = - this.latestTipset().height + Object.keys(nextSuccessfulState).length - 1; - const expirationTipsetHeight = activeTipsetHeight + deal.duration; - - await this.dealInfoManager!.addDealInfo(deal, expirationTipsetHeight); - this.emit("dealUpdate", deal); - - // If we're automining, mine a new block. Note that this will - // automatically advance the deal to the active state. - if (this.minerEnabled && this.options.miner.blockTime === 0) { - while (deal.state !== StorageDealStatus.Active) { - await this.mineTipset(); - deal = (await this.dealInfoManager!.get(deal.proposalCid.root.value))!; - } - } - - // Subtract the cost from our current balance - const totalPrice = BigInt(deal.pricePerEpoch) * BigInt(deal.duration); - await this.accountManager!.transferFunds( - proposal.wallet.value, - proposal.miner.value, - totalPrice - ); - - return deal.proposalCid; - } - - async createQueryOffer(rootCid: RootCID): Promise { - await this.waitForReady(); - - const size = await this.getIPFSObjectSize(rootCid.root.value); - - return new QueryOffer({ - root: rootCid, - size: size, - miner: this.miner, - minPrice: BigInt(size * 2) // This seems to be what powergate does - }); - } - - async retrieve(retrievalOrder: RetrievalOrder, ref: FileRef): Promise { - await this.waitForReady(); - - const hasLocal: boolean = await this.hasLocal( - retrievalOrder.root.root.value - ); - - const account = await this.accountManager!.getAccount( - retrievalOrder.client.value - ); - if (!account.address.privateKey) { - throw new Error( - `Invalid RetrievalOrder.Client provided. Ganache doesn't have the private key for account with address ${retrievalOrder.client}` - ); - } - - if (!hasLocal) { - throw new Error(`Object not found: ${retrievalOrder.root.root.value}`); - } - - await this.downloadFile(retrievalOrder.root.root.value, ref); - - await this.accountManager!.transferFunds( - retrievalOrder.client.value, - retrievalOrder.miner.value, - retrievalOrder.total - ); - } - - // Reference implementation: https://git.io/Jt7eQ - async getTipsetFromKey(tipsetKey?: Array): Promise { - await this.waitForReady(); - - if (!tipsetKey || tipsetKey.length === 0) { - return this.tipsetManager!.latest!; - } - - // Instead of using the `LoadTipSet` implementation - // found in the reference implementation, we can greatly - // simplify the process due to our current "a block can - // only be part of one tipset". This is a special condition - // of Ganache due to not dealing with a real network. - for (const cid of tipsetKey) { - const cidString = cid.root.value; - const blockHeader = await this.blockHeaderManager!.get( - Buffer.from(cidString) - ); - if (blockHeader) { - const tipset = await this.tipsetManager!.getTipsetWithBlocks( - blockHeader.height - ); - if (tipset) { - return tipset; - } - } - } - - throw new Error("Could not retrieve tipset from tipset key"); - } - - // Reference implementation: https://git.io/Jt7vk - async getTipsetByHeight( - height: number, - tipsetKey?: Array - ): Promise { - await this.waitForReady(); - - let tipset: Tipset | null = await this.getTipsetFromKey(tipsetKey); - - // Reference implementation: https://git.io/Jt7vI - if (height > tipset.height) { - throw new Error( - "looking for tipset with height greater than start point" - ); - } - - if (height === tipset.height) { - return tipset; - } - - // The reference implementation then calls `cs.cindex.GetTipsetByHeight` - // which is specific to their blockchain implementation of needing to - // walk back different caches. The way ganache stores these currently - // is much simpler, and we can fetch the tipset directly from the height - tipset = await this.tipsetManager!.getTipsetWithBlocks(height); - if (tipset) { - return tipset; - } else { - throw new Error("Could not find tipset with the provided height"); - } - } - - async createAccount(protocol: AddressProtocol): Promise { - await this.waitForReady(); - - const account = Account.random(0, this.rng, protocol); - await this.accountManager!.putAccount(account); - return account; - } - - private logLatestTipset() { - const date = new Date().toISOString(); - const tipset = this.latestTipset(); - - this.options.logging.logger.log( - `${date} INFO New heaviest tipset! [${tipset.cids[0].root.value}] (height=${tipset.height})` - ); - } -} diff --git a/src/chains/filecoin/filecoin/src/connector.ts b/src/chains/filecoin/filecoin/src/connector.ts deleted file mode 100644 index 448a866867..0000000000 --- a/src/chains/filecoin/filecoin/src/connector.ts +++ /dev/null @@ -1,72 +0,0 @@ -import FilecoinApi from "./api"; -import type { - Executor, - Connector as IConnector, - RecognizedString, - HttpRequest, - WebSocket -} from "@ganache/flavor"; -import { - JsonRpcRequest, - JsonRpcResponse, - makeResponse, - makeError, - KnownKeys -} from "@ganache/utils"; -import { FilecoinProviderOptions } from "@ganache/filecoin-options"; -import { FilecoinProvider } from "./provider"; -export { FilecoinProvider } from "./provider"; -export { StorageDealStatus } from "./types/storage-deal-status"; - -/** - * @internal - */ -export class Connector< - R extends JsonRpcRequest< - FilecoinApi, - KnownKeys - > = JsonRpcRequest> -> implements IConnector -{ - #provider: FilecoinProvider; - - get provider(): FilecoinProvider { - return this.#provider; - } - - constructor( - providerOptions: FilecoinProviderOptions | null = null, - executor: Executor - ) { - this.#provider = new FilecoinProvider(providerOptions, executor); - } - - async connect() { - await this.#provider.initialize(); - } - - parse(message: Buffer) { - return JSON.parse(message) as R; - } - - handle(payload: R, _connection: HttpRequest | WebSocket): Promise { - return this.#provider._requestRaw(payload); - } - - format(result: any, payload: R): RecognizedString { - const json = makeResponse(payload.id, result); - return JSON.stringify(json); - } - - formatError(error: Error & { code: number }, payload: R): RecognizedString { - const json = makeError( - payload && payload.id ? payload.id : undefined, - error - ); - return JSON.stringify(json); - } - - async close() { - return await this.#provider.stop(); - } -} diff --git a/src/chains/filecoin/filecoin/src/data-managers/account-manager.ts b/src/chains/filecoin/filecoin/src/data-managers/account-manager.ts deleted file mode 100644 index fb45633520..0000000000 --- a/src/chains/filecoin/filecoin/src/data-managers/account-manager.ts +++ /dev/null @@ -1,114 +0,0 @@ -import Manager from "./manager"; -import { LevelUp } from "levelup"; -import { Account, AccountConfig } from "../things/account"; -import PrivateKeyManager from "./private-key-manager"; -import { Address } from "../things/address"; -import Database from "../database"; - -export default class AccountManager extends Manager { - #privateKeyManager: PrivateKeyManager; - #database: Database; - - static async initialize( - base: LevelUp, - privateKeyManager: PrivateKeyManager, - database: Database - ) { - const manager = new AccountManager(base, privateKeyManager, database); - return manager; - } - - constructor( - base: LevelUp, - privateKeyManager: PrivateKeyManager, - database: Database - ) { - super(base, Account); - - // the account manager doesn't handle private keys directly - // we need to use the private key manager for that - this.#privateKeyManager = privateKeyManager; - - this.#database = database; - } - - // TODO(perf): (Issue ganache#876) There's probably a bit of - // performance optimizations that could be done here. putAccount - // is called whenever the account changes (balance, nonce, - // private key) - async putAccount(account: Account) { - await this.#database.batch(() => { - super.set(account.address.value, account); - - if (account.address.privateKey) { - this.#privateKeyManager.putPrivateKey( - account.address.value, - account.address.privateKey - ); - } - }); - } - - async getAccount(address: string): Promise { - let account = await super.get(address); - if (!account) { - account = new Account({ - address: new Address(address) - }); - await this.putAccount(account); - } - - const privateKey = await this.#privateKeyManager.getPrivateKey( - account.address.value - ); - if (privateKey) { - account.address.setPrivateKey(privateKey); - } - - return account; - } - - /** - * Returns an array of accounts which we have private keys - * for. The order is the order in which they were stored. - * To add a controllable account, use `AccountManager.putAccount(account)` - * where `account.address.privateKey` is set. - */ - async getControllableAccounts(): Promise> { - const addresses = this.#privateKeyManager.addressesWithPrivateKeys; - const accounts = await Promise.all( - addresses.map(async address => await this.getAccount(address)) - ); - return accounts; - } - - async mintFunds(address: string, amount: bigint) { - const account = await this.getAccount(address); - account.addBalance(amount); - await this.putAccount(account); - } - - async transferFunds( - from: string, - to: string, - amount: bigint - ): Promise { - const fromAccount = await this.getAccount(from); - const toAccount = await this.getAccount(to); - if (fromAccount.balance.value >= amount) { - fromAccount.subtractBalance(amount); - toAccount.addBalance(amount); - await this.putAccount(fromAccount); - await this.putAccount(toAccount); - return true; - } else { - return false; - } - } - - async incrementNonce(address: string) { - const account = await this.getAccount(address); - account.nonce++; - await this.putAccount(account); - } -} diff --git a/src/chains/filecoin/filecoin/src/data-managers/block-header-manager.ts b/src/chains/filecoin/filecoin/src/data-managers/block-header-manager.ts deleted file mode 100644 index 6a271f77b8..0000000000 --- a/src/chains/filecoin/filecoin/src/data-managers/block-header-manager.ts +++ /dev/null @@ -1,25 +0,0 @@ -import Manager from "./manager"; -import { LevelUp } from "levelup"; -import { BlockHeader, BlockHeaderConfig } from "../things/block-header"; - -export default class BlockHeaderManager extends Manager< - BlockHeader, - BlockHeaderConfig -> { - static async initialize(base: LevelUp) { - const manager = new BlockHeaderManager(base); - return manager; - } - - constructor(base: LevelUp) { - super(base, BlockHeader); - } - - /** - * Writes the blockHeader object to the underlying database. - * @param blockHeader - - */ - async putBlockHeader(blockHeader: BlockHeader) { - await super.set(blockHeader.cid.value, blockHeader); - } -} diff --git a/src/chains/filecoin/filecoin/src/data-managers/block-messages-manager.ts b/src/chains/filecoin/filecoin/src/data-managers/block-messages-manager.ts deleted file mode 100644 index c6cf75f128..0000000000 --- a/src/chains/filecoin/filecoin/src/data-managers/block-messages-manager.ts +++ /dev/null @@ -1,77 +0,0 @@ -import Manager from "./manager"; -import { LevelUp } from "levelup"; -import { BlockMessages, BlockMessagesConfig } from "../things/block-messages"; -import { SignedMessage } from "../things/signed-message"; -import { CID } from "../things/cid"; -import SignedMessageManager from "./message-manager"; -import { SigType } from "../things/sig-type"; - -export default class BlockMessagesManager extends Manager< - BlockMessages, - BlockMessagesConfig -> { - readonly #signedMessageManager: SignedMessageManager; - - static async initialize( - base: LevelUp, - signedMessageManager: SignedMessageManager - ) { - const manager = new BlockMessagesManager(base, signedMessageManager); - return manager; - } - - constructor(base: LevelUp, signedMessageManager: SignedMessageManager) { - super(base, BlockMessages); - this.#signedMessageManager = signedMessageManager; - } - - async putBlockMessages(blockCID: CID, messages: BlockMessages) { - // remove messages here as they'll be stored in their own manager - const blockMessagesCidsOnly = new BlockMessages({ - cids: messages.cids - }); - - await super.set(blockCID.value, blockMessagesCidsOnly); - - for (const message of messages.blsMessages) { - const signedMessageWrapper = new SignedMessage({ - message, - Signature: { - Type: SigType.SigTypeBLS, - Data: Buffer.from([0]).toString("base64") - } - }); - await this.#signedMessageManager.putSignedMessage(signedMessageWrapper); - } - - for (const message of messages.secpkMessages) { - await this.#signedMessageManager.putSignedMessage(message); - } - } - - async getBlockMessages(blockCID: CID): Promise { - const messages = await super.get(blockCID.value); - - if (!messages) { - return new BlockMessages(); - } - - for (const cid of messages.cids) { - const signedMessage = await this.#signedMessageManager.get( - cid.root.value - ); - if (!signedMessage) { - throw new Error( - `Could not find signed message with cid ${cid.root.value} for block ${blockCID.value}` - ); - } - if (signedMessage.signature.type === SigType.SigTypeBLS) { - messages.blsMessages.push(signedMessage.message); - } else { - messages.secpkMessages.push(signedMessage); - } - } - - return messages; - } -} diff --git a/src/chains/filecoin/filecoin/src/data-managers/deal-info-manager.ts b/src/chains/filecoin/filecoin/src/data-managers/deal-info-manager.ts deleted file mode 100644 index 60b7e1229f..0000000000 --- a/src/chains/filecoin/filecoin/src/data-managers/deal-info-manager.ts +++ /dev/null @@ -1,114 +0,0 @@ -import Manager from "./manager"; -import { LevelUp } from "levelup"; -import { DealInfo, DealInfoConfig } from "../things/deal-info"; -import { RootCID, SerializedRootCID } from "../things/root-cid"; - -const NOTFOUND = 404; - -/** - * TODO: (Issue ganache#868) This loads all Deal CIDs and - * then all the deals themselves into memory. The downstream - * consumers of this manager then filters them at every time - * it's used (i.e. filters them by DealInfo.State). - * - * We'll need to rework this in the future. LevelDB has a - * `createReadStream` method that could help with some of this; - * but David M. thinks we'll also need to add another sublevel - * that acts as an index for deal states. - */ -export default class DealInfoManager extends Manager { - static Deals = Buffer.from("deals"); - - #dealExpirations: LevelUp; - - static async initialize(base: LevelUp, dealExpirations: LevelUp) { - const manager = new DealInfoManager(base, dealExpirations); - return manager; - } - - constructor(base: LevelUp, dealExpirations: LevelUp) { - super(base, DealInfo); - this.#dealExpirations = dealExpirations; - } - - async updateDealInfo(deal: DealInfo) { - await super.set(deal.proposalCid.root.value, deal); - } - - async addDealInfo(deal: DealInfo, expirationTipsetHeight: number) { - await this.updateDealInfo(deal); - const cids = await this.getDealCids(); - cids.push(deal.proposalCid.serialize()); - await this.putDealCids(cids); - - this.#dealExpirations.put( - Buffer.from(deal.proposalCid.root.value), - Buffer.from(`${expirationTipsetHeight}`) - ); - } - - async getDealCids(): Promise> { - try { - const result: Buffer = await this.base.get(DealInfoManager.Deals); - return JSON.parse(result.toString()); - } catch (e: any) { - if (e.status === NOTFOUND) { - await this.base.put( - DealInfoManager.Deals, - Buffer.from(JSON.stringify([])) - ); - return []; - } - throw e; - } - } - - async getDeals(): Promise> { - const cids = await this.getDealCids(); - const deals = await Promise.all( - cids.map(async cid => await super.get(cid["/"])) - ); - - const cidsToKeep: SerializedRootCID[] = []; - const validDeals: DealInfo[] = []; - for (let i = 0; i < deals.length; i++) { - if (deals[i] !== null) { - cidsToKeep.push(cids[i]); - validDeals.push(deals[i] as DealInfo); - } - } - if (cids.length !== cidsToKeep.length) { - await this.putDealCids(cidsToKeep); - } - - return validDeals; - } - - async getDealById(dealId: number): Promise { - const cids = await this.getDealCids(); - const dealCid = cids[dealId - 1]; - if (dealCid) { - return await this.get(dealCid["/"]); - } else { - return null; - } - } - - async getDealExpiration(proposalId: RootCID): Promise { - try { - const result = await this.#dealExpirations.get( - Buffer.from(proposalId.root.value) - ); - return parseInt(result.toString(), 10); - } catch (e: any) { - if (e.status === NOTFOUND) { - return null; - } - throw e; - } - } - - private async putDealCids(cids: Array): Promise { - await this.base.put(DealInfoManager.Deals, JSON.stringify(cids)); - } -} diff --git a/src/chains/filecoin/filecoin/src/data-managers/manager.ts b/src/chains/filecoin/filecoin/src/data-managers/manager.ts deleted file mode 100644 index 1ca7464a01..0000000000 --- a/src/chains/filecoin/filecoin/src/data-managers/manager.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { LevelUp } from "levelup"; -import { SerializableObject, BaseConfig } from "../things/serializable-object"; -const NOTFOUND = 404; - -export type Instantiable = { new (...args: any[]): T }; - -export default class Manager< - T extends SerializableObject, - C extends BaseConfig -> { - #Type: Instantiable; - #options: {}; - protected base: LevelUp; - constructor( - base: LevelUp, - type: Instantiable, - options?: ConstructorParameters>[1] - ) { - this.#Type = type; - this.#options = options; - this.base = base; - } - - async getRaw(key: number | string | Buffer): Promise { - if (typeof key === "string" || typeof key === "number") { - key = Buffer.from(`${key}`); - } - - if (key.length === 0) { - return null; - } - - return this.base.get(key).catch(e => { - if (e.status === NOTFOUND) return null; - throw e; - }) as Promise; - } - - async get(key: number | string | Buffer): Promise { - const raw = await this.getRaw(key); - if (!raw) return null; - return new this.#Type(JSON.parse(raw.toString()), this.#options); - } - - async setRaw(key: number | string | Buffer, value: Buffer): Promise { - if (typeof key === "string" || typeof key === "number") { - key = Buffer.from(`${key}`); - } - - if (key.length === 0) { - return; - } - - return await this.base.put(key, value); - } - - async set(key: number | string | Buffer, value: T): Promise { - return await this.setRaw( - key, - Buffer.from(JSON.stringify(value.serialize())) - ); - } - - del(key: Buffer) { - return this.base.del(key); - } -} diff --git a/src/chains/filecoin/filecoin/src/data-managers/message-manager.ts b/src/chains/filecoin/filecoin/src/data-managers/message-manager.ts deleted file mode 100644 index 64ab32af4b..0000000000 --- a/src/chains/filecoin/filecoin/src/data-managers/message-manager.ts +++ /dev/null @@ -1,21 +0,0 @@ -import Manager from "./manager"; -import { LevelUp } from "levelup"; -import { SignedMessage, SignedMessageConfig } from "../things/signed-message"; - -export default class SignedMessageManager extends Manager< - SignedMessage, - SignedMessageConfig -> { - static async initialize(base: LevelUp) { - const manager = new SignedMessageManager(base); - return manager; - } - - constructor(base: LevelUp) { - super(base, SignedMessage); - } - - async putSignedMessage(message: SignedMessage) { - await super.set(message.cid.value, message); - } -} diff --git a/src/chains/filecoin/filecoin/src/data-managers/private-key-manager.ts b/src/chains/filecoin/filecoin/src/data-managers/private-key-manager.ts deleted file mode 100644 index 7b9099dbce..0000000000 --- a/src/chains/filecoin/filecoin/src/data-managers/private-key-manager.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { LevelUp } from "levelup"; - -const NOTFOUND = 404; - -export default class PrivateKeyManager { - static AccountsWithPrivateKeysKey = Buffer.from("accounts-with-private-keys"); - private base: LevelUp; - #addressesWithPrivateKeys: string[]; - - get addressesWithPrivateKeys() { - return this.#addressesWithPrivateKeys; - } - - static async initialize(base: LevelUp) { - let addressesWithPrivateKeys: string[]; - try { - const result: Buffer = await base.get( - PrivateKeyManager.AccountsWithPrivateKeysKey - ); - addressesWithPrivateKeys = JSON.parse(result.toString()); - } catch (e: any) { - if (e.status === NOTFOUND) { - // if the array doesn't exist yet, initialize it - addressesWithPrivateKeys = []; - await base.put( - PrivateKeyManager.AccountsWithPrivateKeysKey, - Buffer.from(JSON.stringify(addressesWithPrivateKeys)) - ); - } else { - throw e; - } - } - - const manager = new PrivateKeyManager(base, addressesWithPrivateKeys); - - return manager; - } - - constructor(base: LevelUp, addressesWithPrivateKeys: string[]) { - this.base = base; - this.#addressesWithPrivateKeys = addressesWithPrivateKeys; - } - - async getPrivateKey(address: string): Promise { - address = address.toLowerCase(); - try { - const privateKey: Buffer = await this.base.get(Buffer.from(address)); - return privateKey.toString("hex"); - } catch (e: any) { - if (e.status === NOTFOUND) { - return null; - } - throw e; - } - } - - /** - * NOTE: This function should only be called from - * `AccountManager.putAccount` to ensure fields are written - * atomically. Only call this function if you know what you're doing. - */ - putPrivateKey(address: string, privateKey: string) { - address = address.toLowerCase(); - this.base.put(Buffer.from(address), Buffer.from(privateKey, "hex")); - - if (!this.#addressesWithPrivateKeys.includes(address)) { - this.#addressesWithPrivateKeys.push(address); - - // TODO(perf): (Issue ganache#875) If the number of private - // keys becomes very large (a highly unlikely event), this would - // kill performance whenever accounts were created - this.base.put( - PrivateKeyManager.AccountsWithPrivateKeysKey, - Buffer.from(JSON.stringify(this.#addressesWithPrivateKeys)) - ); - } - } - - async hasPrivateKey(address: string) { - address = address.toLowerCase(); - return this.#addressesWithPrivateKeys.includes(address); - } - - async deletePrivateKey(address: string) { - address = address.toLowerCase(); - if (this.#addressesWithPrivateKeys.includes(address)) { - this.#addressesWithPrivateKeys = this.#addressesWithPrivateKeys.filter( - a => a !== address - ); - this.base.del(Buffer.from(address)); - - // TODO(perf): (Issue ganache#875) If the number of private - // keys becomes very large (a highly unlikely event), this would - // kill performance whenever accounts were created - await this.base.put( - PrivateKeyManager.AccountsWithPrivateKeysKey, - Buffer.from(JSON.stringify(this.#addressesWithPrivateKeys)) - ); - } - } - - async setDefault(address: string) { - address = address.toLowerCase(); - if (await this.hasPrivateKey(address)) { - this.#addressesWithPrivateKeys = this.#addressesWithPrivateKeys.filter( - a => a !== address - ); - this.#addressesWithPrivateKeys.unshift(address); - - // TODO(perf): (Issue ganache#875) If the number of private - // keys becomes very large (a highly unlikely event), this would - // kill performance whenever accounts were created - await this.base.put( - PrivateKeyManager.AccountsWithPrivateKeysKey, - Buffer.from(JSON.stringify(this.#addressesWithPrivateKeys)) - ); - } else { - throw new Error( - `Cannot set ${address} as the default address as it's not part of the wallet.` - ); - } - } -} diff --git a/src/chains/filecoin/filecoin/src/data-managers/tipset-manager.ts b/src/chains/filecoin/filecoin/src/data-managers/tipset-manager.ts deleted file mode 100644 index 079ad6ab66..0000000000 --- a/src/chains/filecoin/filecoin/src/data-managers/tipset-manager.ts +++ /dev/null @@ -1,86 +0,0 @@ -import Manager from "./manager"; -import { LevelUp } from "levelup"; -import { Tipset, TipsetConfig } from "../things/tipset"; -import BlockHeaderManager from "./block-header-manager"; - -export default class TipsetManager extends Manager { - /** - * The earliest tipset - */ - public earliest: Tipset | null = null; - - /** - * The latest tipset - */ - public latest: Tipset | null = null; - - readonly #blockHeaderManager: BlockHeaderManager; - - static async initialize( - base: LevelUp, - blockHeaderManager: BlockHeaderManager - ) { - const manager = new TipsetManager(base, blockHeaderManager); - return manager; - } - - constructor(base: LevelUp, blockHeaderManager: BlockHeaderManager) { - super(base, Tipset); - this.#blockHeaderManager = blockHeaderManager; - } - - /** - * Writes the tipset object to the underlying database. - * @param tipset - - */ - async putTipset(tipset: Tipset) { - // remove blocks array here as they'll be stored in their own manager - const tipsetWithoutBlocks = new Tipset({ - height: tipset.height, - cids: tipset.cids - }); - - await super.set(tipset.height, tipsetWithoutBlocks); - - for (const block of tipset.blocks) { - await this.#blockHeaderManager.putBlockHeader(block); - } - - this.latest = tipset; - } - - async getTipsetWithBlocks(height: number): Promise { - const tipset = await super.get(height); - if (tipset === null) { - return null; - } - - await this.fillTipsetBlocks(tipset); - return tipset; - } - - async fillTipsetBlocks(tipset: Tipset) { - if (tipset.blocks.length === tipset.cids.length) { - // don't bother fetching blocks if we already have the amount we need - return; - } - - // if we don't have all of them, let's refetch all even if we have some - // we shouldn't really have a some, but not all, case. however, this ensures - // we get all of the blocks and they're in the correct order - tipset.blocks = []; - - for (const cid of tipset.cids) { - const cidString = cid.root.value; - const blockHeader = await this.#blockHeaderManager.get( - Buffer.from(cidString) - ); - if (!blockHeader) { - throw new Error( - `Could not find block with cid ${cidString} for tipset ${tipset.height}` - ); - } - tipset.blocks.push(blockHeader); - } - } -} diff --git a/src/chains/filecoin/filecoin/src/database.ts b/src/chains/filecoin/filecoin/src/database.ts deleted file mode 100644 index c866ba49dd..0000000000 --- a/src/chains/filecoin/filecoin/src/database.ts +++ /dev/null @@ -1,195 +0,0 @@ -import type { AbstractLevelDOWN } from "abstract-leveldown"; -import Emittery from "emittery"; -import { dir, setGracefulCleanup } from "tmp-promise"; -import { FilecoinInternalOptions } from "@ganache/filecoin-options"; -import encode from "encoding-down"; -import type { LevelUp } from "levelup"; -const levelup = require("levelup"); -const leveldown = require("leveldown"); -const sub = require("subleveldown"); - -setGracefulCleanup(); -const tmpOptions = { prefix: "ganache_", unsafeCleanup: true }; -const noop = () => Promise.resolve(); - -export default class Database extends Emittery { - readonly #options: FilecoinInternalOptions["database"]; - #cleanupDirectory = noop; - #closed = false; - - public directory: string | null = null; - public db: LevelUp | null = null; - - public tipsets: LevelUp | null = null; - public blocks: LevelUp | null = null; - public accounts: LevelUp | null = null; - public privateKeys: LevelUp | null = null; - public signedMessages: LevelUp | null = null; - public blockMessages: LevelUp | null = null; - public deals: LevelUp | null = null; - public dealExpirations: LevelUp | null = null; - - #initialized: boolean = false; - get initialized() { - return this.#initialized; - } - - #rootStore: AbstractLevelDOWN | null = null; - - /** - * The Database handles the creation of the database, and all access to it. - * Once the database has been fully initialized it will emit a `ready` - * event. - * @param options - Supports one of two options: `db` (a leveldown compliant - * store instance) or `dbPath` (the path to store/read the db instance) - * @param blockchain - - */ - constructor(options: FilecoinInternalOptions["database"]) { - super(); - - this.#options = options; - } - - initialize = async () => { - const levelupOptions: any = { valueEncoding: "binary" }; - const store = this.#options.db; - let db: LevelUp; - if (store) { - this.#rootStore = encode(store as AbstractLevelDOWN, levelupOptions); - db = levelup(this.#rootStore!, {}); - } else { - let directory = this.#options.dbPath; - if (!directory) { - const dirInfo = await dir(tmpOptions); - directory = dirInfo.path; - this.#cleanupDirectory = dirInfo.cleanup; - - // don't continue if we closed while we were waiting for the dir - if (this.#closed) return this.#cleanup(); - } - this.directory = directory; - - // specify an empty `prefix` for browser-based leveldown (level-js) - const leveldownOpts = { prefix: "" }; - const store = encode(leveldown(directory, leveldownOpts), levelupOptions); - this.#rootStore = store; - db = levelup(store, {}); - } - - // don't continue if we closed while we were waiting for the db - if (this.#closed) return this.#cleanup(); - - const open = db.open(); - - this.db = db; - await open; - - // don't continue if we closed while we were waiting for it to open - if (this.#closed) return this.#cleanup(); - - this.tipsets = sub(db, "t", levelupOptions); - this.blocks = sub(db, "b", levelupOptions); - this.accounts = sub(db, "a", levelupOptions); - this.privateKeys = sub(db, "pk", levelupOptions); - this.signedMessages = sub(db, "m", levelupOptions); - this.blockMessages = sub(db, "bm", levelupOptions); - this.deals = sub(db, "d", levelupOptions); - this.dealExpirations = sub(db, "de", levelupOptions); - - this.#initialized = true; - return this.emit("ready"); - }; - - /** - * Call `batch` to batch `put` and `del` operations within the same - * event loop tick of the provided function. All db operations within the - * batch _must_ be executed synchronously. - * @param fn - Within this function's event loop tick, all `put` and - * `del` database operations are applied in a single atomic operation. This - * provides a single write call and if any individual put/del's fail the - * entire operation fails and no modifications are made. - * @returns a Promise that resolves to the return value - * of the provided function. - */ - public batch(fn: () => T) { - if (!this.initialized) { - throw new Error( - "Could not call Database.batch as the database isn't initialized yet." - ); - } - - const rootDb = this.#rootStore!.db; - const batch = this.db!.batch(); - - const originalPut = rootDb.put; - const originalDel = rootDb.del; - - rootDb.put = batch.put.bind(batch); - rootDb.del = batch.del.bind(batch); - let prom: Promise; - try { - const ret = fn(); - // PSA: don't let vscode (or yourself) rewrite this to `await` the - // `batch.write` call. The `finally` block needs to run _before_ the - // write promise has resolved. - prom = batch.write().then(() => ret); - } finally { - rootDb.put = originalPut; - rootDb.del = originalDel; - } - return prom; - } - - /** - * Gracefully closes the database and cleans up the file system and waits for - * it to fully shut down. Emits a `close` event once complete. - * Note: only emits `close` once. - */ - public async close() { - const wasClosed = this.#closed; - this.#closed = true; - await this.#cleanup(); - - // only emit `close` once - if (!wasClosed) { - this.emit("close"); - return; - } - } - - /** - * Cleans up the database connections and our tmp directory. - */ - #cleanup = async () => { - const db = this.db; - if (db) { - await db.close(); - - if (this.tipsets) { - await this.tipsets.close(); - } - if (this.blocks) { - await this.blocks.close(); - } - if (this.accounts) { - await this.accounts.close(); - } - if (this.privateKeys) { - await this.privateKeys.close(); - } - if (this.signedMessages) { - await this.signedMessages.close(); - } - if (this.blockMessages) { - await this.blockMessages.close(); - } - if (this.deals) { - await this.deals.close(); - } - if (this.dealExpirations) { - await this.dealExpirations.close(); - } - } - return await this.#cleanupDirectory(); - }; -} diff --git a/src/chains/filecoin/filecoin/src/defaults.ts b/src/chains/filecoin/filecoin/src/defaults.ts deleted file mode 100644 index f8f0fa4732..0000000000 --- a/src/chains/filecoin/filecoin/src/defaults.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { OptionsConfig, ServerOptions, CliOptions } from "@ganache/flavor"; -import type { Defaults, ServerConfig, CliConfig } from "@ganache/flavor"; - -export type ServerDefaults = Defaults<{ - server: ServerConfig; -}>; -export const ServerDefaults: ServerDefaults = { - server: { - ...ServerOptions, - rpcEndpoint: { - ...ServerOptions.rpcEndpoint, - // use all server defaults other than `rpcEndpoint` - default: () => "/rpc/v0" - } - } -}; - -export type CliDefaults = Defaults<{ - server: CliConfig; -}>; -export const CliDefaults: CliDefaults = { - server: { - ...CliOptions, - port: { - ...CliOptions.port, - // use all CLI defaults other than `port` - default: () => 7777 - } - } -}; - -export type CliOptionsConfig = OptionsConfig<{ server: CliConfig }>; -export const CliOptionsConfig: CliOptionsConfig = new OptionsConfig( - CliDefaults -); - -export type ServerOptionsConfig = OptionsConfig<{ server: ServerConfig }>; -export const ServerOptionsConfig: ServerOptionsConfig = new OptionsConfig( - ServerDefaults -); diff --git a/src/chains/filecoin/filecoin/src/gas.ts b/src/chains/filecoin/filecoin/src/gas.ts deleted file mode 100644 index 631ba4bac1..0000000000 --- a/src/chains/filecoin/filecoin/src/gas.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { Message } from "./things/message"; -import { MessageSendSpec } from "./things/message-send-spec"; - -/** - * A subset of gas prices after the Filecoin Calico version upgrade. - * Reference implementation: https://git.io/JtEg6 - */ -export const GasPricesCalico = { - computeGasMulti: 1, - storageGasMulti: 1300, - onChainMessageComputeBase: 38863, - onChainMessageStorageBase: 36, - onChainMessageStoragePerByte: 1, - onChainReturnValuePerByte: 1, - sendBase: 29233, - sendTransferFunds: 27500, - sendTransferOnlyPremium: 159672, - sendInvokeMethod: -5377 -}; - -// Reference implementation: https://git.io/JtEgH -export function getGasForOnChainMessage(message: Message) { - const computeGas = GasPricesCalico.onChainMessageComputeBase; - - const messageSize = JSON.stringify(message.serialize()).length; - const storageForBytes = - GasPricesCalico.onChainMessageStoragePerByte * - messageSize * - GasPricesCalico.storageGasMulti; - const storageGas = - GasPricesCalico.onChainMessageStorageBase + storageForBytes; - - return computeGas + storageGas; -} - -export function getGasForOnMethodInvocation(message: Message) { - let gasUsed = GasPricesCalico.sendBase; - - if (message.value !== 0n) { - gasUsed += GasPricesCalico.sendTransferFunds; - if (message.method === 0) { - gasUsed += GasPricesCalico.sendTransferOnlyPremium; - } - } - - if (message.method !== 0) { - gasUsed += GasPricesCalico.sendInvokeMethod; - } - - return gasUsed; -} - -// Reference implementation: https://git.io/JtE2v adds the onchainmessage gas and return gas. -// https://git.io/JtE2Z gets called from above and adds invocation gas, which is simply just -// calling https://git.io/JtE2l. -// We don't add any return gas because transfers (method = 0) always return null in the ret -// value from vm.send() (which means there's no additional costs); see reference implementation -// here: https://git.io/JtE29. -export function getGasForMessage(message: Message) { - return ( - getGasForOnChainMessage(message) + getGasForOnMethodInvocation(message) - ); -} - -// Reference implementation: https://git.io/JtWnk -export function fillGasInformation(message: Message, spec: MessageSendSpec) { - if (message.gasLimit === 0) { - // Reference implementation: https://git.io/JtWZB - // We don't bother with adding the buffer since this is "exactimation" - message.gasLimit = getGasForMessage(message); - } - - if (message.gasPremium === 0n) { - // Reference implementation: https://git.io/JtWnm - // Since this seems to look at prior prices and try to determine - // them from there, and it implies a network coming up with those - // prices, I'm just going to use 1 * MinGasPremium (https://git.io/JtWnG) - message.gasPremium = 100000n; - } - - if (message.gasFeeCap === 0n) { - // Reference implementation: https://git.io/JtWn4 - // The effective computation is `GasFeeCap = GasPremium + BaseFee` - // where the BaseFee is computed as a growing number based on the - // block's ParentBaseFee, which we currently never set to non-zero in Ganache, - // so the algorithm is simplified to `GasFeeCap = GasPremium`. - // While there was no initial reason to set ParentBaseFee to a non-zero - // value, after reading the description here https://git.io/JtEaP, - // I believe that this is a fair assumption for Ganache. Ganache isn't meant - // (yet) to simulate a live network with network conditions and computations. - message.gasFeeCap = message.gasPremium; - } - - // Reference Implementation: https://git.io/JtWng - if (spec.maxFee === 0n) { - // since the default is to guess network on conditions if 0, we're just going to skip - return; - } else { - const totalFee = BigInt(message.gasLimit) * message.gasFeeCap; - if (totalFee <= spec.maxFee) { - return; - } - message.gasFeeCap = spec.maxFee / BigInt(message.gasLimit); - message.gasPremium = - message.gasFeeCap < message.gasPremium - ? message.gasFeeCap - : message.gasPremium; - } -} - -/** - * Ganache currently doesn't implement BaseFee as it is - * computed based on network conditions and block congestion, - * neither of which Ganache is meant to do (yet). - * - * @returns 0 - */ -export function getBaseFee(): number { - return 0; -} - -/** - * Helper function to get the miner fee for a message - */ -export function getMinerFee(message: Message): bigint { - // Reference: https://spec.filecoin.io/systems/filecoin_vm/gas_fee/ - // They state to use the GasLimit instead of GasUsed "in order to make - // message selection for miners more straightforward". 🤷 - return BigInt(message.gasLimit) * message.gasPremium; -} diff --git a/src/chains/filecoin/filecoin/src/ipfs-server.ts b/src/chains/filecoin/filecoin/src/ipfs-server.ts deleted file mode 100644 index 491c9fae8e..0000000000 --- a/src/chains/filecoin/filecoin/src/ipfs-server.ts +++ /dev/null @@ -1,88 +0,0 @@ -import path from "path"; -import fs from "fs"; - -import { IPFS, create as createIPFS } from "ipfs"; -import IPFSHttpServer from "ipfs-http-server"; -import { FilecoinInternalOptions } from "@ganache/filecoin-options"; - -type IPFSChainOptions = Pick< - FilecoinInternalOptions["chain"], - "ipfsHost" | "ipfsPort" ->; - -type IPFSHttpServer = { - start(): Promise; - stop(): Promise; -}; - -class IPFSServer { - public readonly options: IPFSChainOptions; - - public node: IPFS | null; - - private httpServer: IPFSHttpServer | null; - - constructor(chainOptions: IPFSChainOptions) { - this.options = chainOptions; - this.node = null; - this.httpServer = null; - } - - async start(parentDirectory: string) { - const folder = path.join(parentDirectory, "ganache-ipfs"); - if (!fs.existsSync(folder)) { - await fs.promises.mkdir(folder); - } - - this.node = await createIPFS({ - repo: folder, - config: { - Addresses: { - Swarm: [], // No need to connect to the swarm - // Note that this config doesn't actually trigger the API and gateway; see below. - API: `/ip4/${this.options.ipfsHost}/tcp/${this.options.ipfsPort}`, - Gateway: `/ip4/${this.options.ipfsHost}/tcp/9090` - }, - Bootstrap: [], - Discovery: { - MDNS: { - Enabled: false - }, - webRTCStar: { - Enabled: false - } - }, - // API isn't in the types, but it's used by ipfs-http-server - // @ts-ignore - API: { - HTTPHeaders: { - "Access-Control-Allow-Origin": ["*"], - "Access-Control-Allow-Credentials": "true" - } - } - }, - start: true, - silent: true - }); - - // remove all initial pins that IPFS pins automatically - for await (const pin of this.node.pin.ls({ type: "recursive" })) { - await this.node.pin.rm(pin.cid); - } - - this.httpServer = new IPFSHttpServer(this.node) as IPFSHttpServer; - - await this.httpServer.start(); - } - - async stop() { - if (this.httpServer) { - await this.httpServer.stop(); - } - if (this.node) { - await this.node.stop(); - } - } -} - -export default IPFSServer; diff --git a/src/chains/filecoin/filecoin/src/message.ts b/src/chains/filecoin/filecoin/src/message.ts deleted file mode 100644 index ff46e07b78..0000000000 --- a/src/chains/filecoin/filecoin/src/message.ts +++ /dev/null @@ -1,188 +0,0 @@ -import { Address, AddressProtocol } from "./things/address"; -import { Balance } from "./things/balance"; -import { Message } from "./things/message"; -import { SigType } from "./things/sig-type"; -import { SignedMessage } from "./things/signed-message"; -import cbor from "borc"; - -const ZeroAddress = - "t3yaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaby2smx7a"; -const TotalFilecoin = Balance.FILToLowestDenomination(2000000000); -const BlockGasLimit = 10000000000; -const minimumBaseFee = 100; - -// Reference implementation: https://git.io/JtErT -export function ValidForBlockInclusion( - m: Message, - minGas: number, - version: number -): Error | null { - if (m.version !== 0) { - return new Error("'Version' unsupported"); - } - - if (m.to.trim() === "") { - return new Error("'To' address cannot be empty"); - } - - if (m.to === ZeroAddress && version >= 7) { - return new Error("invalid 'To' address"); - } - - if (m.from.trim() === "") { - return new Error("'From' address cannot be empty"); - } - - // We would have already thrown when trying to deserialize null for Value - // if (m.Value.Int == nil) { - // return xerrors.New("'Value' cannot be nil") - // } - - if (m.value < 0n) { - return new Error("'Value' field cannot be negative"); - } - - if (m.value > TotalFilecoin) { - return new Error( - "'Value' field cannot be greater than total filecoin supply" - ); - } - - // We would have already thrown when trying to deserialize null for GasFeeCap - // if m.GasFeeCap.Int == nil { - // return xerrors.New("'GasFeeCap' cannot be nil") - // } - - if (m.gasFeeCap < 0n) { - return new Error("'GasFeeCap' field cannot be negative"); - } - - // We would have already thrown when trying to deserialize null for GasPremium - // if m.GasPremium.Int == nil { - // return xerrors.New("'GasPremium' cannot be nil") - // } - - if (m.gasPremium < 0n) { - return new Error("'GasPremium' field cannot be negative"); - } - - if (m.gasPremium > m.gasFeeCap) { - return new Error("'GasFeeCap' less than 'GasPremium'"); - } - - if (m.gasLimit > BlockGasLimit) { - return new Error( - "'GasLimit' field cannot be greater than a block's gas limit" - ); - } - - // since prices might vary with time, this is technically semantic validation - if (m.gasLimit < minGas) { - return new Error( - `'GasLimit' field cannot be less than the cost of storing a message on chain ${m.gasLimit} < ${minGas}` - ); - } - - return null; -} - -function sigCacheKey(signedMessage: SignedMessage): Error | string { - switch (signedMessage.signature.type) { - case SigType.SigTypeBLS: - if (signedMessage.signature.data.length < 90) { - return new Error("bls signature too short"); - } - - return ( - signedMessage.message.cid.value + - signedMessage.signature.data.subarray(64).toString() - ); - case SigType.SigTypeSecp256k1: - return signedMessage.message.cid.value; - default: - return new Error( - `unrecognized signature type: ${signedMessage.signature.type}` - ); - } -} - -export async function verifyMessageSignature( - signedMessage: SignedMessage -): Promise { - const sck = sigCacheKey(signedMessage); - if (sck instanceof Error) { - return sck; - } - - // we would have already errored trying to serialized null - // if sig == nil { - // return xerrors.Errorf("signature is nil") - // } - - if ( - Address.parseProtocol(signedMessage.message.from) === AddressProtocol.ID - ) { - return new Error( - "must resolve ID addresses before using them to verify a signature" - ); - } - - const address = new Address(signedMessage.message.from); - - switch (signedMessage.signature.type) { - case SigType.SigTypeBLS: { - const verified = await address.verifySignature( - Buffer.from(signedMessage.message.cid.value), - signedMessage.signature - ); - - return verified ? null : new Error("bls signature failed to verify"); - } - case SigType.SigTypeSecp256k1: { - const serialized = signedMessage.message.serialize(); - const encoded = cbor.encode(serialized); - const verified = await address.verifySignature( - encoded, - signedMessage.signature - ); - - return verified ? null : new Error("signature did not match"); - } - default: - return new Error( - `cannot verify signature of unsupported type: ${signedMessage.signature.type}` - ); - } -} - -// Reference implementation: https://git.io/JtErT -export async function checkMessage( - signedMessage: SignedMessage -): Promise { - const size = JSON.stringify(signedMessage.serialize()).length; - if (size > 32 * 1024) { - return new Error(`mpool message too large (${size}B): message too big`); - } - - const validForBlockInclusion = ValidForBlockInclusion( - signedMessage.message, - 0, - 8 - ); - if (validForBlockInclusion !== null) { - return new Error( - `message not valid for block inclusion: ${validForBlockInclusion.message}` - ); - } - - if (signedMessage.message.gasFeeCap < minimumBaseFee) { - return new Error("gas fee cap too low"); - } - - const verifySignature = await verifyMessageSignature(signedMessage); - if (verifySignature !== null) { - return verifySignature; - } - - return null; -} diff --git a/src/chains/filecoin/filecoin/src/provider.ts b/src/chains/filecoin/filecoin/src/provider.ts deleted file mode 100644 index 5591d7bc75..0000000000 --- a/src/chains/filecoin/filecoin/src/provider.ts +++ /dev/null @@ -1,182 +0,0 @@ -import Emittery from "emittery"; -import { - Executor, - PromiEvent, - JsonRpcRequest, - Subscription, - KnownKeys -} from "@ganache/utils"; - -import FilecoinApi from "./api"; -import GanacheSchema, { Schema } from "./schema"; - -import Blockchain from "./blockchain"; -import { - FilecoinOptionsConfig, - FilecoinProviderOptions, - FilecoinInternalOptions -} from "@ganache/filecoin-options"; -import cloneDeep from "lodash.clonedeep"; - -// Meant to mimic this provider: -// https://github.com/filecoin-shipyard/js-lotus-client-provider-browser -export class FilecoinProvider< - R extends JsonRpcRequest< - FilecoinApi, - KnownKeys - > = JsonRpcRequest> -> extends Emittery<{ connect: undefined; disconnect: undefined }> { - #options: FilecoinInternalOptions; - #api: FilecoinApi; - #executor: Executor; - - readonly blockchain: Blockchain; - - static readonly Schema: Schema = GanacheSchema; - - constructor(options: FilecoinProviderOptions | null = null, executor: Executor) { - super(); - const providerOptions = (this.#options = FilecoinOptionsConfig.normalize( - options as FilecoinProviderOptions - )); - - this.#executor = executor; - - this.blockchain = new Blockchain(providerOptions); - - this.#api = new FilecoinApi(this.blockchain); - } - - async initialize() { - await this.#api.initialize(); - await this.emit("connect"); - } - - /** - * Returns the options, including defaults and generated, used to start Ganache. - */ - public getOptions() { - return cloneDeep(this.#options); - } - - /** - * Returns the unlocked accounts - */ - public async getInitialAccounts() { - await this.blockchain.waitForReady(); - - const accounts: Record< - string, - { unlocked: boolean; secretKey: string; balance: bigint } - > = {}; - - const controllableAccounts = - await this.blockchain.accountManager!.getControllableAccounts(); - for (const account of controllableAccounts) { - accounts[account.address.serialize()] = { - unlocked: true, - secretKey: account.address.privateKey!, - balance: account.balance.value - }; - } - - return accounts; - } - - async connect() { - await this.blockchain.waitForReady(); - } - - async send(payload: R) { - const result = await this._requestRaw(payload); - return result.value; - } - - async _requestRaw( - payload: R - ) { - // The `as any` is needed here because of this hackery of appending the - // JSON `id` no longer fits within the strictly typed `execute` `params` - // argument - const result = await this.#executor.execute(this.#api, payload.method, [ - ...(payload.params || []), - payload.id - ] as any); - const promise = result.value as unknown as PromiseLike< - ReturnType - >; - - if (promise instanceof PromiEvent) { - promise.on("message", data => { - this.emit("message" as never, data as never); - }); - - const value = await promise; - - if ( - typeof value === "object" && - typeof value.unsubscribe === "function" - ) { - // since the class instance gets ripped away, - // we can't use instanceof Subscription, so we - // just use an interface and check for the unsubscribe - // function 🤷 - const newPromiEvent = PromiEvent.resolve(value.id); - promise.on("message", data => { - newPromiEvent.emit("message" as never, data as never); - }); - return { value: newPromiEvent }; - } - } - - return { value: promise }; - } - - async sendHttp() { - throw new Error("Method not supported (sendHttp)"); - } - - async sendWs() { - throw new Error("Method not supported (sendWs)"); - } - - // Reference implementation: https://git.io/JtO3H - async sendSubscription( - payload: R, - schemaMethod: { subscription?: boolean }, - subscriptionCallback: (data: any) => void - ) { - // I'm not entirely sure why I need the `as [string]`... but it seems to work. - const result = await this.#executor.execute(this.#api, payload.method, [ - ...(payload.params || []), - payload.id - ] as any); - const promiEvent = result.value as unknown as PromiEvent; - - if (promiEvent instanceof PromiEvent) { - promiEvent.on("message", data => { - subscriptionCallback(data); - }); - } - - const value = await promiEvent; - - return [value.unsubscribe, Promise.resolve(value.id.toString())]; - } - - async receive() { - throw new Error("Method not supported (receive)"); - } - - async import() { - throw new Error("Method not supported (import)"); - } - - async destroy() { - throw new Error("Method not supported (destroy)"); - } - - async stop() { - await this.#api.stop(); - } -} diff --git a/src/chains/filecoin/filecoin/src/ready.ts b/src/chains/filecoin/filecoin/src/ready.ts deleted file mode 100644 index a0808fc6c9..0000000000 --- a/src/chains/filecoin/filecoin/src/ready.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { CliSettings } from "@ganache/flavor"; -import { FilecoinProvider } from "./provider"; - -export type ready = typeof ready; - -export async function ready({ - provider, - options -}: { - provider: FilecoinProvider; - options: { server: CliSettings }; -}) { - const liveOptions = provider.getOptions(); - const accounts = await provider.getInitialAccounts(); - - console.log(""); - console.log("Available Accounts"); - console.log("=================="); - - const addresses = Object.keys(accounts); - const attoFILinFIL = 1000000000000000000n; - - addresses.forEach(function (address, index) { - const balance = accounts[address].balance; - const strBalance = balance / attoFILinFIL; - const about = balance % attoFILinFIL === 0n ? "" : "~"; - let line = `(${index}) ${address} (${about}${strBalance} FIL)`; - - if (!accounts[address].unlocked) { - line += " 🔒"; - } - - console.log(line); - }); - - console.log(""); - console.log("Private Keys"); - console.log("=================="); - - addresses.forEach(function (address, index) { - console.log(`(${index}) ${accounts[address].secretKey}`); - }); - - console.log(""); - console.log( - `Lotus RPC listening on ${options.server.host}:${options.server.port}` - ); - console.log( - `IPFS RPC listening on ${liveOptions.chain.ipfsHost}:${liveOptions.chain.ipfsPort}` - ); -} diff --git a/src/chains/filecoin/filecoin/src/schema.ts b/src/chains/filecoin/filecoin/src/schema.ts deleted file mode 100644 index 80d016c996..0000000000 --- a/src/chains/filecoin/filecoin/src/schema.ts +++ /dev/null @@ -1,46 +0,0 @@ -import FilecoinApi from "./api"; -import LotusSchema from "@filecoin-shipyard/lotus-client-schema"; -export type Schema = { - methods: { - [propertyName: string]: { - subscription?: boolean; - namespace?: string; - }; - }; -}; - -const GanacheSchema: Schema = { - methods: {} -} as Schema; - -const combinedMethods = { - ...LotusSchema.mainnet.fullNode.methods, - ...LotusSchema.mainnet.storageMiner.methods, - ...LotusSchema.mainnet.gatewayApi.methods, - ...LotusSchema.mainnet.walletApi.methods, - ...LotusSchema.mainnet.workerApi.methods -}; - -// Use the FilecoinAPI to create a schema object representing the functions supported. -for (const methodName of Object.getOwnPropertyNames(FilecoinApi.prototype)) { - if (methodName.startsWith("Filecoin.")) { - const schemaName = methodName.replace("Filecoin.", ""); - - GanacheSchema.methods[schemaName] = { - subscription: combinedMethods[schemaName].subscription === true - }; - } else { - const namespaceMatch = /^(.+)\./.exec(methodName); - if (namespaceMatch) { - const namespace = namespaceMatch[1]; - const schemaName = methodName.replace(".", ""); - - GanacheSchema.methods[schemaName] = { - subscription: /Notify$/i.exec(methodName) !== null, - namespace - }; - } - } -} - -export default GanacheSchema; diff --git a/src/chains/filecoin/filecoin/src/things/account.ts b/src/chains/filecoin/filecoin/src/things/account.ts deleted file mode 100644 index 0b94931a6b..0000000000 --- a/src/chains/filecoin/filecoin/src/things/account.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { RandomNumberGenerator } from "@ganache/utils"; -import { - Address, - AddressProtocol, - SerializedAddress, - AddressNetwork -} from "./address"; -import { Balance, SerializedBalance } from "./balance"; -import { - Definitions, - DeserializedObject, - SerializableObject, - SerializedObject -} from "./serializable-object"; - -// This is not a Filecoin type; this is used for Ganache stuff, but uses the -// same structure as the Filecoin types for easy (de)-serialization for persistence - -type AccountConfig = { - properties: { - address: { - type: Address; - serializedType: SerializedAddress; - serializedName: "Address"; - }; - balance: { - type: Balance; - serializedType: SerializedBalance; - serializedName: "Balance"; - }; - nonce: { - type: number; - serializedType: number; - serializedName: "Nonce"; - }; - }; -}; - -class Account - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - address: { - deserializedName: "address", - serializedName: "Address", - defaultValue: literal => - literal ? new Address(literal) : Address.random() - }, - balance: { - deserializedName: "balance", - serializedName: "Balance", - defaultValue: literal => - literal ? new Balance(literal) : new Balance("0") - }, - nonce: { - deserializedName: "nonce", - serializedName: "Nonce", - defaultValue: 0 - } - }; - } - - static random( - defaultFIL: number, - rng: RandomNumberGenerator = new RandomNumberGenerator(), - protocol: AddressProtocol = AddressProtocol.BLS, - network: AddressNetwork = AddressNetwork.Testnet - ): Account { - return new Account({ - address: Address.random(rng, protocol, network), - balance: new Balance( - Balance.FILToLowestDenomination(defaultFIL).toString() - ), - nonce: 0 - }); - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.address = super.initializeValue(this.config.address, options); - this.#balance = super.initializeValue(this.config.balance, options); - this.nonce = super.initializeValue(this.config.nonce, options); - } - - addBalance(val: string | number | bigint): void { - this.#balance.add(val); - } - - subtractBalance(val: string | number | bigint): void { - this.#balance.sub(val); - } - - readonly address: Address; - #balance: Balance; - nonce: number; - - get balance(): Balance { - return this.#balance; - } -} - -type SerializedAccount = SerializedObject; - -export { Account, AccountConfig, SerializedAccount }; diff --git a/src/chains/filecoin/filecoin/src/things/address.ts b/src/chains/filecoin/filecoin/src/things/address.ts deleted file mode 100644 index 07c2b9e173..0000000000 --- a/src/chains/filecoin/filecoin/src/things/address.ts +++ /dev/null @@ -1,401 +0,0 @@ -import { SerializableLiteral } from "./serializable-literal"; -import blake from "blakejs"; -import * as bls from "noble-bls12-381"; -import secp256K1 from "secp256k1"; -import base32 from "base32-encoding"; -import { StartDealParams } from "./start-deal-params"; -import cbor from "borc"; -import { RandomNumberGenerator } from "@ganache/utils"; -import { Message } from "./message"; -import { Signature } from "./signature"; - -// https://spec.filecoin.io/appendix/address/ - -interface AddressConfig { - type: string; -} - -enum AddressProtocol { - ID, - SECP256K1, // Represents the address SECP256K1 protocol - Actor, // Represents the address Actor protocol - BLS, // Represents the address BLS protocol - Unknown = 255 -} - -enum AddressNetwork { - Testnet = "t", - Mainnet = "f", - Unknown = "UNKNOWN" -} - -function switchEndianness(hexString: string) { - const regex = hexString.match(/.{2}/g); - if (!regex) { - throw new Error(`Could not switch endianness of hex string: ${hexString}`); - } - return regex.reverse().join(""); -} - -class Address extends SerializableLiteral { - get config() { - return {}; - } - - static readonly FirstNonSingletonActorId = 100; // Ref impl: https://git.io/JtgqT - static readonly FirstMinerId = 1000; // Ref impl: https://git.io/Jt2WE - static readonly CHECKSUM_BYTES = 4; - static readonly CustomBase32Alphabet = "abcdefghijklmnopqrstuvwxyz234567"; - - #privateKey?: string; - get privateKey(): string | undefined { - return this.#privateKey; - } - get network(): AddressNetwork { - return Address.parseNetwork(this.value); - } - get protocol(): AddressProtocol { - return Address.parseProtocol(this.value); - } - - constructor(publicAddress: string, privateKey?: string) { - super(publicAddress); - this.#privateKey = privateKey; - } - - setPrivateKey(privateKey: string) { - this.#privateKey = privateKey; - } - - async signProposal(proposal: StartDealParams): Promise { - if (this.#privateKey) { - const serialized = proposal.serialize(); - const encoded = cbor.encode(serialized); - - const signature = await bls.sign(encoded, this.#privateKey); - return Buffer.from(signature); - } else { - throw new Error( - `Could not sign proposal with address ${this.value} due to not having the associated private key.` - ); - } - } - - async signMessage(message: Message): Promise { - if (this.#privateKey) { - // TODO (Issue ganache#867): From the code at https://git.io/Jtud2, - // it appears that messages are signed using the CID. However there are - // two issues here that I spent too much time trying to figure out: - // 1. We don't generate an identical CID - // 2. Even if we did, this signature doesn't match what lotus provides - // But here's the catch, I know for certain `signBuffer` mimics lotus's - // Filecoin.WalletSign method. In other words, if I take the CID that lotus gives me - // and put it back into Filecoin.WalletSign, it matches the below output - // (given that message.cid.value was replaced by the CID string provided - // by lotus for the same message). I'm not sure what's wrong here without - // debugging lotus itself and watching the values change, but since we're - // not guaranteeing cryptographic integrity, I'm letting this one slide for now. - return await this.signBuffer(Buffer.from(message.cid.value)); - } else { - throw new Error( - `Could not sign message with address ${this.value} due to not having the associated private key.` - ); - } - } - - async signBuffer(buffer: Buffer): Promise { - if (this.#privateKey) { - switch (this.protocol) { - case AddressProtocol.BLS: { - const signature = await bls.sign( - buffer, - switchEndianness(this.#privateKey) - ); - return Buffer.from(signature); - } - case AddressProtocol.SECP256K1: { - const hash = blake.blake2b(buffer, null, 32); - const result = secp256K1.ecdsaSign( - hash, - Buffer.from(this.#privateKey, "hex") - ); - return Buffer.concat([result.signature, Buffer.from([result.recid])]); - } - default: { - throw new Error( - `Cannot sign with this protocol ${this.protocol}. Supported protocols: BLS and SECP256K1` - ); - } - } - } else { - throw new Error( - `Could not sign message with address ${this.value} due to not having the associated private key.` - ); - } - } - - async verifySignature( - buffer: Buffer, - signature: Signature - ): Promise { - switch (this.protocol) { - case AddressProtocol.BLS: { - return await bls.verify( - signature.data, - buffer, - Address.recoverBLSPublicKey(this.value) - ); - } - case AddressProtocol.SECP256K1: { - const hash = blake.blake2b(buffer, null, 32); - return secp256K1.ecdsaVerify( - signature.data.slice(0, 64), // remove the recid suffix (should be the last/65th byte) - hash, - Address.recoverSECP256K1PublicKey(signature, hash) - ); - } - default: { - return false; - } - } - } - - static recoverBLSPublicKey(address: string): Buffer { - const protocol = Address.parseProtocol(address); - const decoded = base32.parse( - address.slice(2), - Address.CustomBase32Alphabet - ); - const payload = decoded.slice(0, decoded.length - 4); - - if (protocol === AddressProtocol.BLS) { - return payload; - } else { - throw new Error( - "Address is not a BLS protocol; cannot recover the public key." - ); - } - } - - static recoverSECP256K1PublicKey( - signature: Signature, - message: Uint8Array - ): Buffer { - return Buffer.from( - secp256K1.ecdsaRecover( - signature.data.slice(0, 64), - signature.data[64], - message - ).buffer - ); - } - - static fromPrivateKey( - privateKey: string, - protocol: AddressProtocol = AddressProtocol.BLS, - network: AddressNetwork = AddressNetwork.Testnet - ): Address { - let publicKey: Buffer; - let payload: Buffer; - if (protocol === AddressProtocol.BLS) { - // Get the public key - // BLS uses big endian, but we use little endian - publicKey = Buffer.from(bls.getPublicKey(switchEndianness(privateKey))); - payload = publicKey; - } else if (protocol === AddressProtocol.SECP256K1) { - publicKey = Buffer.from( - secp256K1.publicKeyCreate(Buffer.from(privateKey, "hex"), false) - ); - // https://bit.ly/3atGMwX says blake2b-160, but calls the checksum - // both blake2b-4 and 4 bytes, so there is inconsistency of the - // terminology of bytes vs bits, but the implementation at - // https://git.io/JtEM6 shows 20 bytes and 4 bytes respectively - payload = Buffer.from(blake.blake2b(publicKey, null, 20)); - } else { - throw new Error( - "Protocol type not yet supported. Supported address protocols: BLS, SECP256K1" - ); - } - - const checksum = Address.createChecksum(protocol, payload); - - // Merge the public key and checksum - const payloadAndChecksum = Buffer.concat([payload, checksum]); - - // Use a custom alphabet to base32 encode the checksummed public key, - // and prepend the network and protocol identifiers. - const address = `${network}${protocol}${base32.stringify( - payloadAndChecksum, - Address.CustomBase32Alphabet - )}`; - - return new Address(address, privateKey); - } - - static random( - rng: RandomNumberGenerator = new RandomNumberGenerator(), - protocol: AddressProtocol = AddressProtocol.BLS, - network: AddressNetwork = AddressNetwork.Testnet - ): Address { - // Note that this private key isn't cryptographically secure! - // It uses insecure randomization! Don't use it in production! - const privateKey = rng.getBuffer(32).toString("hex"); - - return Address.fromPrivateKey(privateKey, protocol, network); - } - - static parseNetwork(publicAddress: string): AddressNetwork { - if (publicAddress.length < 1) { - return AddressNetwork.Unknown; - } - - switch (publicAddress.charAt(0)) { - case AddressNetwork.Mainnet: { - return AddressNetwork.Mainnet; - } - case AddressNetwork.Testnet: { - return AddressNetwork.Testnet; - } - default: { - return AddressNetwork.Unknown; - } - } - } - - static parseProtocol(publicAddress: string): AddressProtocol { - if (publicAddress.length < 2) { - return AddressProtocol.Unknown; - } - - switch (parseInt(publicAddress.charAt(1), 10)) { - case AddressProtocol.ID: { - return AddressProtocol.ID; - } - case AddressProtocol.BLS: { - return AddressProtocol.BLS; - } - case AddressProtocol.Actor: { - return AddressProtocol.Actor; - } - case AddressProtocol.SECP256K1: { - return AddressProtocol.SECP256K1; - } - default: { - return AddressProtocol.Unknown; - } - } - } - - /** - * Creates an AddressProtocol.ID address - * @param id - A positive integer for the id. - * @param isSingletonSystemActor - If false, it adds Address.FirstNonSingletonActorId to the id. - * Almost always `false`. See https://git.io/JtgqL for examples of singleton system actors. - * @param network - The AddressNetwork prefix for the address; usually AddressNetwork.Testnet for Ganache. - */ - static fromId( - id: number, - isSingletonSystemActor: boolean = false, - isMiner: boolean = false, - network: AddressNetwork = AddressNetwork.Testnet - ): Address { - if (Math.round(id) !== id || id < 0) { - throw new Error("id must be a positive integer"); - } - - return new Address( - `${network}${AddressProtocol.ID}${ - isSingletonSystemActor - ? id - : isMiner - ? Address.FirstMinerId + id - : Address.FirstNonSingletonActorId + id - }` - ); - } - - static createChecksum(protocol: AddressProtocol, payload: Buffer): Buffer { - // Create a checksum using the blake2b algorithm - const checksumBuffer = Buffer.concat([Buffer.from([protocol]), payload]); - const checksum = blake.blake2b( - checksumBuffer, - null, - Address.CHECKSUM_BYTES - ); - return Buffer.from(checksum.buffer); - } - - static validate(inputAddress: string): Address { - inputAddress = inputAddress.trim(); - - if (inputAddress === "" || inputAddress === "") { - throw new Error("invalid address length"); - } - - // MaxAddressStringLength is the max length of an address encoded as a string - // it includes the network prefix, protocol, and bls publickey (bls is the longest) - const MaxAddressStringLength = 2 + 84; - if ( - inputAddress.length > MaxAddressStringLength || - inputAddress.length < 3 - ) { - throw new Error("invalid address length"); - } - - const address = new Address(inputAddress); - const raw = address.value.slice(2); - - if (address.network === AddressNetwork.Unknown) { - throw new Error("unknown address network"); - } - - if (address.protocol === AddressProtocol.Unknown) { - throw new Error("unknown address protocol"); - } - - if (address.protocol === AddressProtocol.ID) { - if (raw.length > 20) { - throw new Error("invalid address length"); - } - const id = parseInt(raw, 10); - if (isNaN(id) || id.toString(10) !== raw) { - throw new Error("invalid address payload"); - } - return address; - } - - const payloadWithChecksum = base32.parse(raw, Address.CustomBase32Alphabet); - - if (payloadWithChecksum.length < Address.CHECKSUM_BYTES) { - throw new Error("invalid address checksum"); - } - - const payload = payloadWithChecksum.slice( - 0, - payloadWithChecksum.length - Address.CHECKSUM_BYTES - ); - const providedChecksum = payloadWithChecksum.slice( - payloadWithChecksum.length - Address.CHECKSUM_BYTES - ); - - if ( - address.protocol === AddressProtocol.SECP256K1 || - address.protocol === AddressProtocol.Actor - ) { - if (payload.length !== 20) { - throw new Error("invalid address payload"); - } - } - - const generatedChecksum = Address.createChecksum(address.protocol, payload); - if (!generatedChecksum.equals(providedChecksum)) { - throw new Error("invalid address checksum"); - } - - return address; - } -} - -type SerializedAddress = string; - -export { Address, SerializedAddress, AddressProtocol, AddressNetwork }; diff --git a/src/chains/filecoin/filecoin/src/things/balance.ts b/src/chains/filecoin/filecoin/src/things/balance.ts deleted file mode 100644 index 63f390bd6a..0000000000 --- a/src/chains/filecoin/filecoin/src/things/balance.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { LiteralDefinition, SerializableLiteral } from "./serializable-literal"; -import BN from "bn.js"; - -interface BalanceConfig { - type: bigint; -} - -// The smallest denomination of FIL is an attoFIL (10^-18 FIL) -class Balance extends SerializableLiteral { - get config(): LiteralDefinition { - return { - defaultValue: literal => - literal ? BigInt(literal) : Balance.FILToLowestDenomination(100) - }; - } - - sub(val: string | number | bigint): void { - this.value -= BigInt(val); - } - - add(val: string | number | bigint): void { - this.value += BigInt(val); - } - - toFIL(): number { - return Balance.LowestDenominationToFIL(this.value); - } - - static FILToLowestDenomination(fil: number): bigint { - return BigInt(fil) * 1000000000000000000n; - } - - static LowestDenominationToFIL(attoFil: bigint): number { - return new BN(attoFil.toString(10)) - .div(new BN(10).pow(new BN(18))) - .toNumber(); - } -} - -type SerializedBalance = string; - -export { Balance, SerializedBalance }; diff --git a/src/chains/filecoin/filecoin/src/things/beacon-entry.ts b/src/chains/filecoin/filecoin/src/things/beacon-entry.ts deleted file mode 100644 index 5957476244..0000000000 --- a/src/chains/filecoin/filecoin/src/things/beacon-entry.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -} from "./serializable-object"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/chain/types#BeaconEntry - -interface BeaconEntryConfig { - properties: { - round: { - type: number; - serializedType: number; - serializedName: "Round"; - }; - data: { - type: Buffer; - serializedType: string; - serializedName: "Data"; - }; - }; -} - -class BeaconEntry - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - round: { - deserializedName: "round", - serializedName: "Round", - defaultValue: 0 - }, - data: { - deserializedName: "data", - serializedName: "Data", - defaultValue: literal => - typeof literal !== "undefined" - ? Buffer.from(literal, "base64") - : Buffer.from([0]) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.round = super.initializeValue(this.config.round, options); - this.data = super.initializeValue(this.config.data, options); - } - - round: number; - data: Buffer; -} - -type SerializedBeaconEntry = SerializedObject; - -export { BeaconEntry, SerializedBeaconEntry }; diff --git a/src/chains/filecoin/filecoin/src/things/block-header.ts b/src/chains/filecoin/filecoin/src/things/block-header.ts deleted file mode 100644 index f3d1c464da..0000000000 --- a/src/chains/filecoin/filecoin/src/things/block-header.ts +++ /dev/null @@ -1,276 +0,0 @@ -import { Ticket, SerializedTicket } from "./ticket"; -import { ElectionProof, SerializedElectionProof } from "./election-proof"; -import { BeaconEntry, SerializedBeaconEntry } from "./beacon-entry"; -import { - SerializableObject, - DeserializedObject, - Definitions, - SerializedObject -} from "./serializable-object"; -import { PoStProof, SerializedPoStProof } from "./post-proof"; -import { RootCID, SerializedRootCID } from "./root-cid"; -import { SerializedSignature, Signature } from "./signature"; -import { Address, SerializedAddress } from "./address"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/chain/types#BlockHeader - -interface BlockHeaderConfig { - properties: { - miner: { - type: Address; - serializedType: SerializedAddress; - serializedName: "Miner"; - }; - ticket: { - type: Ticket; - serializedType: SerializedTicket; - serializedName: "Ticket"; - }; - electionProof: { - type: ElectionProof; - serializedType: SerializedElectionProof; - serializedName: "ElectionProof"; - }; - beaconEntries: { - type: Array; - serializedType: Array; - serializedName: "BeaconEntries"; - }; - winPoStProof: { - type: Array; - serializedType: Array; - serializedName: "WinPoStProof"; - }; - parents: { - type: Array; - serializedType: Array; - serializedName: "Parents"; - }; - parentWeight: { - type: bigint; - serializedType: string; - serializedName: "ParentWeight"; - }; - height: { - type: number; - serializedType: number; - serializedName: "Height"; - }; - parentStateRoot: { - type: RootCID; - serializedType: SerializedRootCID; - serializedName: "ParentStateRoot"; - }; - parentMessageReceipts: { - type: RootCID; - serializedType: SerializedRootCID; - serializedName: "ParentMessageReceipts"; - }; - messages: { - type: RootCID; - serializedType: SerializedRootCID; - serializedName: "Messages"; - }; - blsAggregate: { - type: Signature; - serializedType: SerializedSignature; - serializedName: "BLSAggregate"; - }; - timestamp: { - type: number; - serializedType: number; - serializedName: "Timestamp"; - }; - blockSignature: { - type: Signature; - serializedType: SerializedSignature; - serializedName: "BlockSig"; - }; - forkSignaling: { - type: 0 | 1; - serializedType: 0 | 1; - serializedName: "ForkSignaling"; - }; - parentBaseFee: { - type: bigint; - serializedType: string; - serializedName: "ParentBaseFee"; - }; - }; -} - -class BlockHeader - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - miner: { - deserializedName: "miner", - serializedName: "Miner", - defaultValue: literal => - literal ? new Address(literal) : Address.fromId(0, false, true) - }, - ticket: { - deserializedName: "ticket", - serializedName: "Ticket", - defaultValue: options => new Ticket(options) - }, - electionProof: { - deserializedName: "electionProof", - serializedName: "ElectionProof", - defaultValue: options => new ElectionProof(options) - }, - beaconEntries: { - deserializedName: "beaconEntries", - serializedName: "BeaconEntries", - defaultValue: options => - options ? options.map(entry => new BeaconEntry(entry)) : [] - }, - winPoStProof: { - deserializedName: "winPoStProof", - serializedName: "WinPoStProof", - defaultValue: options => - options ? options.map(proof => new PoStProof(proof)) : [] - }, - parents: { - deserializedName: "parents", - serializedName: "Parents", - defaultValue: options => - options ? options.map(parent => new RootCID(parent)) : [] - }, - parentWeight: { - deserializedName: "parentWeight", - serializedName: "ParentWeight", - defaultValue: literal => (literal ? BigInt(literal) : 0n) - }, - height: { - deserializedName: "height", - serializedName: "Height", - defaultValue: 0 - }, - parentStateRoot: { - deserializedName: "parentStateRoot", - serializedName: "ParentStateRoot", - defaultValue: options => new RootCID(options) - }, - parentMessageReceipts: { - deserializedName: "parentMessageReceipts", - serializedName: "ParentMessageReceipts", - defaultValue: options => new RootCID(options) - }, - messages: { - deserializedName: "messages", - serializedName: "Messages", - defaultValue: options => new RootCID(options) - }, - blsAggregate: { - deserializedName: "blsAggregate", - serializedName: "BLSAggregate", - defaultValue: options => new Signature(options) - }, - timestamp: { - deserializedName: "timestamp", - serializedName: "Timestamp", - defaultValue: literal => { - return typeof literal !== "undefined" - ? literal - : new Date().getTime() / 1000; - } - }, - blockSignature: { - deserializedName: "blockSignature", - serializedName: "BlockSig", - defaultValue: options => new Signature(options) - }, - forkSignaling: { - deserializedName: "forkSignaling", - serializedName: "ForkSignaling", - defaultValue: 0 - }, - parentBaseFee: { - deserializedName: "parentBaseFee", - serializedName: "ParentBaseFee", - defaultValue: literal => (literal ? BigInt(literal) : 0n) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.miner = super.initializeValue(this.config.miner, options); - this.ticket = super.initializeValue(this.config.ticket, options); - this.electionProof = super.initializeValue( - this.config.electionProof, - options - ); - this.beaconEntries = super.initializeValue( - this.config.beaconEntries, - options - ); - this.winPoStProof = super.initializeValue( - this.config.winPoStProof, - options - ); - this.parents = super.initializeValue(this.config.parents, options); - this.parentWeight = super.initializeValue( - this.config.parentWeight, - options - ); - this.height = super.initializeValue(this.config.height, options); - this.parentStateRoot = super.initializeValue( - this.config.parentStateRoot, - options - ); - this.parentMessageReceipts = super.initializeValue( - this.config.parentMessageReceipts, - options - ); - this.messages = super.initializeValue(this.config.messages, options); - this.blsAggregate = super.initializeValue( - this.config.blsAggregate, - options - ); - this.timestamp = super.initializeValue(this.config.timestamp, options); - this.blockSignature = super.initializeValue( - this.config.blockSignature, - options - ); - this.forkSignaling = super.initializeValue( - this.config.forkSignaling, - options - ); - this.parentBaseFee = super.initializeValue( - this.config.parentBaseFee, - options - ); - } - - miner: Address; - ticket: Ticket; - electionProof: ElectionProof; - beaconEntries: Array; - winPoStProof: Array; - parents: Array; - parentWeight: bigint; - height: number; - parentStateRoot: RootCID; - parentMessageReceipts: RootCID; - messages: RootCID; - blsAggregate: Signature; - /** - * Timestamp in seconds. Reference implementation: https://git.io/Jt3HJ. - */ - timestamp: number; - blockSignature: Signature; - forkSignaling: 0 | 1; - parentBaseFee: bigint; -} - -type SerializedBlockHeader = SerializedObject; - -export { BlockHeader, BlockHeaderConfig, SerializedBlockHeader }; diff --git a/src/chains/filecoin/filecoin/src/things/block-messages.ts b/src/chains/filecoin/filecoin/src/things/block-messages.ts deleted file mode 100644 index 995b4a6654..0000000000 --- a/src/chains/filecoin/filecoin/src/things/block-messages.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { Message, SerializedMessage } from "./message"; -import { RootCID, SerializedRootCID } from "./root-cid"; -import { - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -} from "./serializable-object"; -import { SigType } from "./sig-type"; -import { SerializedSignedMessage, SignedMessage } from "./signed-message"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/api#BlockMessages - -type BlockMessagesConfig = { - properties: { - blsMessages: { - type: Array; - serializedType: Array; - serializedName: "BlsMessages"; - }; - secpkMessages: { - type: Array; - serializedType: Array; - serializedName: "SecpkMessages"; - }; - cids: { - type: Array; - serializedType: Array; - serializedName: "Cids"; - }; - }; -}; - -class BlockMessages - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - blsMessages: { - deserializedName: "blsMessages", - serializedName: "BlsMessages", - defaultValue: options => - options ? options.map(message => new Message(message)) : [] - }, - secpkMessages: { - deserializedName: "secpkMessages", - serializedName: "SecpkMessages", - defaultValue: options => - options ? options.map(message => new SignedMessage(message)) : [] - }, - cids: { - deserializedName: "cids", - serializedName: "Cids", - defaultValue: options => - options ? options.map(rootCid => new RootCID(rootCid)) : [] - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.blsMessages = super.initializeValue(this.config.blsMessages, options); - this.secpkMessages = super.initializeValue( - this.config.secpkMessages, - options - ); - this.cids = super.initializeValue(this.config.cids, options); - this.initializeCids(); - } - - /** - * The messages in the block that were signed with BLS. - * In Ganache, this should always contain all of the - * messages due to always signing new blocks with BLS. - */ - blsMessages: Array; - /** - * The messages in the block that were signed with Secpk. - * In Ganache, this should always be empty due to always - * signing new blocks with BLS. - */ - secpkMessages: Array; - cids: Array; - - // Reference implementation: https://git.io/JtW8K - initializeCids() { - if ( - this.cids.length !== - this.blsMessages.length + this.secpkMessages.length - ) { - for (const blsMessage of this.blsMessages) { - this.cids.push( - new RootCID({ - root: blsMessage.cid - }) - ); - } - for (const secpkMessage of this.secpkMessages) { - this.cids.push( - new RootCID({ - root: secpkMessage.cid - }) - ); - } - } - } - - static fromSignedMessages( - signedMessages: Array - ): BlockMessages { - const blockMessages = new BlockMessages(); - - for (const signedMessage of signedMessages) { - if (signedMessage.signature.type === SigType.SigTypeBLS) { - blockMessages.blsMessages.push(signedMessage.message); - } else { - blockMessages.secpkMessages.push(signedMessage); - } - } - - blockMessages.initializeCids(); - - return blockMessages; - } -} - -type SerializedBlockMessages = SerializedObject; - -export { BlockMessages, BlockMessagesConfig, SerializedBlockMessages }; diff --git a/src/chains/filecoin/filecoin/src/things/channel-id.ts b/src/chains/filecoin/filecoin/src/things/channel-id.ts deleted file mode 100644 index 733d7d7c73..0000000000 --- a/src/chains/filecoin/filecoin/src/things/channel-id.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { - SerializableObject, - DeserializedObject, - Definitions, - SerializedObject -} from "./serializable-object"; - -// https://pkg.go.dev/github.com/filecoin-project/go-data-transfer@v1.2.5#ChannelID - -type ChannelIDConfig = { - properties: { - initiator: { - type: string; - serializedType: string; - serializedName: "Initiator"; - }; - responder: { - type: string; - serializedType: string; - serializedName: "Responder"; - }; - id: { - type: number; - serializedType: number; - serializedName: "ID"; - }; - }; -}; - -class ChannelID - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - initiator: { - deserializedName: "initiator", - serializedName: "Initiator", - defaultValue: "" - }, - responder: { - deserializedName: "responder", - serializedName: "Responder", - defaultValue: "" - }, - id: { - deserializedName: "id", - serializedName: "ID", - defaultValue: 0 - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.initiator = super.initializeValue(this.config.initiator, options); - this.responder = super.initializeValue(this.config.responder, options); - this.id = super.initializeValue(this.config.id, options); - } - - initiator: string; - responder: string; - id: number; -} - -type SerializedChannelID = SerializedObject; - -export { ChannelID, SerializedChannelID }; diff --git a/src/chains/filecoin/filecoin/src/things/cid.ts b/src/chains/filecoin/filecoin/src/things/cid.ts deleted file mode 100644 index 3faa4e2593..0000000000 --- a/src/chains/filecoin/filecoin/src/things/cid.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { SerializableLiteral } from "./serializable-literal"; -import cbor from "borc"; -import IPFSCid from "cids"; -import multihashing from "multihashing"; -import multicodec from "multicodec"; - -interface CIDConfig { - type: string; -} - -class CID extends SerializableLiteral { - get config() { - return {}; - } - - // Note: This does not (yet) check for cryptographic validity! - static isValid(value: string): boolean { - return value.length >= 59 && value.indexOf("ba") == 0; - } - - static nullCID(): CID { - const nilCbor = cbor.encode(0); // using null returns a not-nill cbor - const multihash = multihashing(nilCbor, "blake2b-256"); - const rawCid = new IPFSCid( - 1, - multicodec.print[multicodec.DAG_CBOR], - multihash - ); - - return new CID(rawCid.toString()); - } -} - -type SerializedCID = string; - -export { CID, SerializedCID }; diff --git a/src/chains/filecoin/filecoin/src/things/data-transfer-channel.ts b/src/chains/filecoin/filecoin/src/things/data-transfer-channel.ts deleted file mode 100644 index 7dc624279a..0000000000 --- a/src/chains/filecoin/filecoin/src/things/data-transfer-channel.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { RootCID, SerializedRootCID } from "./root-cid"; -import { - SerializableObject, - DeserializedObject, - Definitions, - SerializedObject -} from "./serializable-object"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/api#DataTransferChannel - -type DataTransferChannelConfig = { - properties: { - transferId: { - type: number; - serializedType: number; - serializedName: "TransferID"; - }; - status: { - type: number; - serializedType: number; - serializedName: "Status"; - }; - baseCID: { - type: RootCID; - serializedType: SerializedRootCID; - serializedName: "BaseCID"; - }; - isInitiator: { - type: boolean; - serializedType: boolean; - serializedName: "IsInitiator"; - }; - isSender: { - type: boolean; - serializedType: boolean; - serializedName: "IsSender"; - }; - voucher: { - type: string; - serializedType: string; - serializedName: "Voucher"; - }; - message: { - type: string; - serializedType: string; - serializedName: "Message"; - }; - otherPeer: { - type: string; - serializedType: string; - serializedName: "OtherPeer"; - }; - transferred: { - type: number; - serializedType: number; - serializedName: "Transferred"; - }; - }; -}; - -class DataTransferChannel - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - transferId: { - deserializedName: "transferId", - serializedName: "TransferID", - defaultValue: 0 - }, - status: { - deserializedName: "status", - serializedName: "Status", - defaultValue: 0 - }, - baseCID: { - deserializedName: "baseCID", - serializedName: "BaseCID", - defaultValue: options => - options ? new RootCID(options) : new RootCID({ "/": "Unknown" }) - }, - isInitiator: { - deserializedName: "isInitiator", - serializedName: "IsInitiator", - defaultValue: false - }, - isSender: { - deserializedName: "isSender", - serializedName: "IsSender", - defaultValue: false - }, - voucher: { - deserializedName: "voucher", - serializedName: "Voucher", - defaultValue: "" - }, - message: { - deserializedName: "message", - serializedName: "Message", - defaultValue: "" - }, - otherPeer: { - deserializedName: "otherPeer", - serializedName: "OtherPeer", - defaultValue: "" - }, - transferred: { - deserializedName: "transferred", - serializedName: "Transferred", - defaultValue: 0 - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.transferId = super.initializeValue(this.config.transferId, options); - this.status = super.initializeValue(this.config.status, options); - this.baseCID = super.initializeValue(this.config.baseCID, options); - this.isInitiator = super.initializeValue(this.config.isInitiator, options); - this.isSender = super.initializeValue(this.config.isSender, options); - this.voucher = super.initializeValue(this.config.voucher, options); - this.message = super.initializeValue(this.config.message, options); - this.otherPeer = super.initializeValue(this.config.otherPeer, options); - this.transferred = super.initializeValue(this.config.transferred, options); - } - - transferId: number; - status: number; - baseCID: RootCID; - isInitiator: boolean; - isSender: boolean; - voucher: string; - message: string; - otherPeer: string; - transferred: number; -} - -type SerializedDataTransferChannel = SerializedObject; - -export { DataTransferChannel, SerializedDataTransferChannel }; diff --git a/src/chains/filecoin/filecoin/src/things/deal-info.ts b/src/chains/filecoin/filecoin/src/things/deal-info.ts deleted file mode 100644 index 7a29c95f3c..0000000000 --- a/src/chains/filecoin/filecoin/src/things/deal-info.ts +++ /dev/null @@ -1,236 +0,0 @@ -import { RootCID, SerializedRootCID } from "./root-cid"; -import { - StorageDealStatus, - nextSuccessfulState -} from "../types/storage-deal-status"; -import { - SerializableObject, - DeserializedObject, - Definitions, - SerializedObject -} from "./serializable-object"; -import { - SerializedStorageMarketDataRef, - StorageMarketDataRef -} from "./storage-market-data-ref"; -import { ChannelID, SerializedChannelID } from "./channel-id"; -import { - DataTransferChannel, - SerializedDataTransferChannel -} from "./data-transfer-channel"; -import { Address, SerializedAddress } from "./address"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/api#DealInfo - -type DealInfoConfig = { - properties: { - proposalCid: { - type: RootCID; - serializedType: SerializedRootCID; - serializedName: "ProposalCid"; - }; - state: { - type: StorageDealStatus; - serializedType: StorageDealStatus; // Remember: Enums are numbers at runtime!, - serializedName: "State"; - }; - message: { - type: string; - serializedType: string; - serializedName: "Message"; - }; - provider: { - type: Address; - serializedType: SerializedAddress; - serializedName: "Provider"; - }; - dataRef: { - type: StorageMarketDataRef; - serializedType: SerializedStorageMarketDataRef; - serializedName: "DataRef"; - }; - pieceCid: { - type: RootCID | null; - serializedType: SerializedRootCID | null; - serializedName: "PieceCID"; - }; - size: { - type: number; - serializedType: number; - serializedName: "Size"; - }; - pricePerEpoch: { - type: bigint; - serializedType: string; - serializedName: "PricePerEpoch"; - }; - duration: { - type: number; - serializedType: number; - serializedName: "Duration"; - }; - dealId: { - type: number; - serializedType: number; - serializedName: "DealID"; - }; - creationTime: { - type: Date; - serializedType: string; - serializedName: "CreationTime"; - }; - verified: { - type: boolean; - serializedType: boolean; - serializedName: "Verified"; - }; - transferChannelId: { - type: ChannelID; - serializedType: SerializedChannelID; - serializedName: "TransferChannelID"; - }; - dataTransfer: { - type: DataTransferChannel; - serializedType: SerializedDataTransferChannel; - serializedName: "DataTransfer"; - }; - }; -}; - -class DealInfo - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - proposalCid: { - deserializedName: "proposalCid", - serializedName: "ProposalCid", - defaultValue: options => new RootCID(options) - }, - state: { - deserializedName: "state", - serializedName: "State", - defaultValue: StorageDealStatus.Unknown - }, - message: { - deserializedName: "message", - serializedName: "Message", - defaultValue: "" - }, - provider: { - deserializedName: "provider", - serializedName: "Provider", - defaultValue: literal => - literal ? new Address(literal) : Address.fromId(0, false, true) - }, - dataRef: { - deserializedName: "dataRef", - serializedName: "DataRef", - defaultValue: options => new StorageMarketDataRef(options) - }, - pieceCid: { - deserializedName: "pieceCid", - serializedName: "PieceCID", - defaultValue: options => (options ? new RootCID(options) : null) - }, - size: { - deserializedName: "size", - serializedName: "Size", - defaultValue: 0 - }, - pricePerEpoch: { - deserializedName: "pricePerEpoch", - serializedName: "PricePerEpoch", - defaultValue: literal => (literal ? BigInt(literal) : 0n) - }, - duration: { - deserializedName: "duration", - serializedName: "Duration", - defaultValue: 0 - }, - dealId: { - deserializedName: "dealId", - serializedName: "DealID", - defaultValue: 0 - }, - creationTime: { - deserializedName: "creationTime", - serializedName: "CreationTime", - defaultValue: new Date() - }, - verified: { - deserializedName: "verified", - serializedName: "Verified", - defaultValue: false - }, - transferChannelId: { - deserializedName: "transferChannelId", - serializedName: "TransferChannelID", - defaultValue: options => new ChannelID(options) - }, - dataTransfer: { - deserializedName: "dataTransfer", - serializedName: "DataTransfer", - defaultValue: options => new DataTransferChannel(options) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.proposalCid = super.initializeValue(this.config.proposalCid, options); - this.state = super.initializeValue(this.config.state, options); - this.message = super.initializeValue(this.config.message, options); - this.provider = super.initializeValue(this.config.provider, options); - this.dataRef = super.initializeValue(this.config.dataRef, options); - this.pieceCid = super.initializeValue(this.config.pieceCid, options); - this.size = super.initializeValue(this.config.size, options); - this.pricePerEpoch = super.initializeValue( - this.config.pricePerEpoch, - options - ); - this.duration = super.initializeValue(this.config.duration, options); - this.dealId = super.initializeValue(this.config.dealId, options); - this.creationTime = super.initializeValue( - this.config.creationTime, - options - ); - this.verified = super.initializeValue(this.config.verified, options); - this.transferChannelId = super.initializeValue( - this.config.transferChannelId, - options - ); - this.dataTransfer = super.initializeValue( - this.config.dataTransfer, - options - ); - } - - proposalCid: RootCID; - state: StorageDealStatus; - message: string; - provider: Address; - dataRef: StorageMarketDataRef; - pieceCid: RootCID | null; - size: number; - pricePerEpoch: bigint; - duration: number; - dealId: number; - creationTime: Date; - verified: boolean; - transferChannelId: ChannelID; - dataTransfer: DataTransferChannel; - - advanceState() { - this.state = nextSuccessfulState[this.state]; - } -} - -type SerializedDealInfo = SerializedObject; - -export { DealInfo, DealInfoConfig, SerializedDealInfo }; diff --git a/src/chains/filecoin/filecoin/src/things/election-proof.ts b/src/chains/filecoin/filecoin/src/things/election-proof.ts deleted file mode 100644 index bd9100c095..0000000000 --- a/src/chains/filecoin/filecoin/src/things/election-proof.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { - SerializableObject, - DeserializedObject, - SerializedObject, - Definitions -} from "./serializable-object"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/chain/types#ElectionProof - -interface ElectionProofConfig { - properties: { - winCount: { - type: number; - serializedType: number; - serializedName: "WinCount"; - }; - vrfProof: { - type: Buffer; - serializedType: string; - serializedName: "VRFProof"; - }; - }; -} - -class ElectionProof - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - winCount: { - deserializedName: "winCount", - serializedName: "WinCount", - defaultValue: 1 - }, - vrfProof: { - deserializedName: "vrfProof", - serializedName: "VRFProof", - defaultValue: literal => - typeof literal !== "undefined" - ? Buffer.from(literal, "base64") - : Buffer.from([0]) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.winCount = super.initializeValue(this.config.winCount, options); - this.vrfProof = super.initializeValue(this.config.vrfProof, options); - } - - winCount: number; - vrfProof: Buffer; -} - -type SerializedElectionProof = SerializedObject; - -export { ElectionProof, SerializedElectionProof }; diff --git a/src/chains/filecoin/filecoin/src/things/file-ref.ts b/src/chains/filecoin/filecoin/src/things/file-ref.ts deleted file mode 100644 index a682405fca..0000000000 --- a/src/chains/filecoin/filecoin/src/things/file-ref.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -} from "./serializable-object"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/api#FileRef - -type FileRefConfig = { - properties: { - path: { - type: string; - serializedType: string; - serializedName: "Path"; - }; - isCAR: { - type: boolean; - serializedType: boolean; - serializedName: "IsCAR"; - }; - }; -}; - -class FileRef - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - path: { - deserializedName: "path", - serializedName: "Path", - defaultValue: "" - }, - isCAR: { - deserializedName: "isCAR", - serializedName: "IsCAR", - defaultValue: false - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.path = super.initializeValue(this.config.path, options); - this.isCAR = super.initializeValue(this.config.isCAR, options); - } - - path: string; - isCAR: boolean; -} - -type SerializedFileRef = SerializedObject; - -export { FileRef, SerializedFileRef }; diff --git a/src/chains/filecoin/filecoin/src/things/head-change.ts b/src/chains/filecoin/filecoin/src/things/head-change.ts deleted file mode 100644 index 543f7e2926..0000000000 --- a/src/chains/filecoin/filecoin/src/things/head-change.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { - SerializableObject, - DeserializedObject, - Definitions, - SerializedObject -} from "./serializable-object"; -import { Tipset, SerializedTipset } from "./tipset"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/api#HeadChange - -interface HeadChangeConfig { - properties: { - type: { - type: string; - serializedType: string; - serializedName: "Type"; - }; - val: { - type: Tipset; - serializedType: SerializedTipset; - serializedName: "Val"; - }; - }; -} - -class HeadChange - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - type: { - deserializedName: "type", - serializedName: "Type", - defaultValue: options => options || HeadChangeType.HCCurrent - }, - val: { - deserializedName: "val", - serializedName: "Val", - defaultValue: options => new Tipset(options) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.type = super.initializeValue(this.config.type, options); - this.val = super.initializeValue(this.config.val, options); - } - - type: string; - val: Tipset; -} - -type SerializedHeadChange = SerializedObject; - -// Retrieved these from https://git.io/Jtvke -export enum HeadChangeType { - HCRevert = "revert", - HCApply = "apply", - HCCurrent = "current" -} - -export { HeadChange, SerializedHeadChange }; diff --git a/src/chains/filecoin/filecoin/src/things/key-info.ts b/src/chains/filecoin/filecoin/src/things/key-info.ts deleted file mode 100644 index 4af0c024b9..0000000000 --- a/src/chains/filecoin/filecoin/src/things/key-info.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { KeyType } from "./key-type"; -import { - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -} from "./serializable-object"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/chain/types#KeyInfo - -interface KeyInfoConfig { - properties: { - type: { - type: KeyType; - serializedType: KeyType; - serializedName: "Type"; - }; - privateKey: { - type: Buffer; - serializedType: string; - serializedName: "PrivateKey"; - }; - }; -} - -class KeyInfo - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - type: { - deserializedName: "type", - serializedName: "Type", - defaultValue: KeyType.KeyTypeBLS - }, - privateKey: { - deserializedName: "privateKey", - serializedName: "PrivateKey", - defaultValue: literal => - typeof literal !== "undefined" - ? Buffer.from(literal, "base64") - : Buffer.from([0]) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.type = super.initializeValue(this.config.type, options); - this.privateKey = super.initializeValue(this.config.privateKey, options); - } - - type: KeyType; - privateKey: Buffer; -} - -type SerializedKeyInfo = SerializedObject; - -export { KeyInfo, SerializedKeyInfo }; diff --git a/src/chains/filecoin/filecoin/src/things/key-type.ts b/src/chains/filecoin/filecoin/src/things/key-type.ts deleted file mode 100644 index 66aea8e348..0000000000 --- a/src/chains/filecoin/filecoin/src/things/key-type.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Reference implementation: https://git.io/JtwmZ -export enum KeyType { - KeyTypeBLS = "bls", - KeyTypeSecp256k1 = "secp256k1", - KeyTypeSecp256k1Ledger = "secp256k1-ledger" -} diff --git a/src/chains/filecoin/filecoin/src/things/message-send-spec.ts b/src/chains/filecoin/filecoin/src/things/message-send-spec.ts deleted file mode 100644 index cfff79c471..0000000000 --- a/src/chains/filecoin/filecoin/src/things/message-send-spec.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -} from "./serializable-object"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/api#MessageSendSpec - -type MessageSendSpecConfig = { - properties: { - maxFee: { - type: bigint; - serializedType: string; - serializedName: "MaxFee"; - }; - }; -}; - -class MessageSendSpec - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - maxFee: { - deserializedName: "maxFee", - serializedName: "MaxFee", - defaultValue: literal => (literal ? BigInt(literal) : 0n) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.maxFee = super.initializeValue(this.config.maxFee, options); - } - - maxFee: bigint; -} - -type SerializedMessageSendSpec = SerializedObject; - -export { MessageSendSpec, SerializedMessageSendSpec }; diff --git a/src/chains/filecoin/filecoin/src/things/message.ts b/src/chains/filecoin/filecoin/src/things/message.ts deleted file mode 100644 index 581e0ed100..0000000000 --- a/src/chains/filecoin/filecoin/src/things/message.ts +++ /dev/null @@ -1,159 +0,0 @@ -import { - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -} from "./serializable-object"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/chain/types#Message - -type MessageConfig = { - properties: { - version: { - type: number; - serializedType: number; - serializedName: "Version"; - }; - to: { - type: string; - serializedType: string; - serializedName: "To"; - }; - from: { - type: string; - serializedType: string; - serializedName: "From"; - }; - nonce: { - type: number; - serializedType: number; - serializedName: "Nonce"; - }; - value: { - type: bigint; - serializedType: string; - serializedName: "Value"; - }; - gasLimit: { - type: number; - serializedType: number; - serializedName: "GasLimit"; - }; - gasFeeCap: { - type: bigint; - serializedType: string; - serializedName: "GasFeeCap"; - }; - gasPremium: { - type: bigint; - serializedType: string; - serializedName: "GasPremium"; - }; - method: { - type: number; - serializedType: number; - serializedName: "Method"; - }; - params: { - type: Buffer; - serializedType: string; - serializedName: "Params"; - }; - }; -}; - -class Message - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - version: { - deserializedName: "version", - serializedName: "Version", - defaultValue: 0 - }, - to: { - deserializedName: "to", - serializedName: "To", - defaultValue: "" - }, - from: { - deserializedName: "from", - serializedName: "From", - defaultValue: "" - }, - nonce: { - deserializedName: "nonce", - serializedName: "Nonce", - defaultValue: 0 - }, - value: { - deserializedName: "value", - serializedName: "Value", - defaultValue: literal => (literal ? BigInt(literal) : 0n) - }, - gasLimit: { - deserializedName: "gasLimit", - serializedName: "GasLimit", - defaultValue: 0 // this gets updated in Blockchain if 0 - }, - gasFeeCap: { - deserializedName: "gasFeeCap", - serializedName: "GasFeeCap", - defaultValue: literal => (literal ? BigInt(literal) : 0n) - }, - gasPremium: { - deserializedName: "gasPremium", - serializedName: "GasPremium", - defaultValue: literal => (literal ? BigInt(literal) : 0n) - }, - method: { - deserializedName: "method", - serializedName: "Method", - defaultValue: 0 - }, - params: { - deserializedName: "params", - serializedName: "Params", - defaultValue: literal => - typeof literal !== "undefined" - ? Buffer.from(literal) - : Buffer.from([0]) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.version = super.initializeValue(this.config.version, options); - this.to = super.initializeValue(this.config.to, options); - this.from = super.initializeValue(this.config.from, options); - this.nonce = super.initializeValue(this.config.nonce, options); - this.value = super.initializeValue(this.config.value, options); - this.gasLimit = super.initializeValue(this.config.gasLimit, options); - this.gasFeeCap = super.initializeValue(this.config.gasFeeCap, options); - this.gasPremium = super.initializeValue(this.config.gasPremium, options); - this.method = super.initializeValue(this.config.method, options); - this.params = super.initializeValue(this.config.params, options); - } - - version: number; - to: string; - from: string; - nonce: number; - value: bigint; - gasLimit: number; - gasFeeCap: bigint; - gasPremium: bigint; - method: number; - params: Buffer; -} - -type SerializedMessage = SerializedObject; - -export { Message, SerializedMessage }; diff --git a/src/chains/filecoin/filecoin/src/things/miner-info.ts b/src/chains/filecoin/filecoin/src/things/miner-info.ts deleted file mode 100644 index 035249415c..0000000000 --- a/src/chains/filecoin/filecoin/src/things/miner-info.ts +++ /dev/null @@ -1,203 +0,0 @@ -import { - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -} from "./serializable-object"; -import { RegisteredSealProof } from "../types/registered-seal-proof"; -import { Address, SerializedAddress } from "./address"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/chain/actors/builtin/miner#MinerInfo - -type MinerInfoConfig = { - properties: { - owner: { - type: Address; - serializedType: SerializedAddress; - serializedName: "Owner"; - }; - worker: { - type: Address; - serializedType: SerializedAddress; - serializedName: "Worker"; - }; - newWorker: { - type: Address; - serializedType: SerializedAddress; - serializedName: "NewWorker"; - }; - controlAddresses: { - type: string[]; - serializedType: string[]; - serializedName: "ControlAddresses"; - }; - workerChangeEpoch: { - type: number; - serializedType: number; - serializedName: "WorkerChangeEpoch"; - }; - peerId: { - type: string; - serializedType: string; - serializedName: "PeerId"; - }; - multiaddrs: { - type: Uint8Array[]; - serializedType: Uint8Array[]; - serializedName: "Multiaddrs"; - }; - sealProofType: { - type: number; - serializedType: number; - serializedName: "SealProofType"; - }; - sectorSize: { - type: number; - serializedType: number; - serializedName: "SectorSize"; - }; - windowPoStPartitionSectors: { - type: number; - serializedType: number; - serializedName: "WindowPoStPartitionSectors"; - }; - consensusFaultElapsed: { - type: number; - serializedType: number; - serializedName: "ConsensusFaultElapsed"; - }; - }; -}; - -class MinerInfo - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - owner: { - deserializedName: "owner", - serializedName: "Owner", - defaultValue: literal => - literal ? new Address(literal) : Address.fromId(0, false, true) - }, - worker: { - deserializedName: "worker", - serializedName: "Worker", - defaultValue: literal => - literal ? new Address(literal) : Address.fromId(0, false, true) - }, - newWorker: { - deserializedName: "newWorker", - serializedName: "NewWorker", - defaultValue: literal => - literal ? new Address(literal) : Address.fromId(0, false, true) - }, - controlAddresses: { - deserializedName: "controlAddresses", - serializedName: "ControlAddresses", - defaultValue: [] - }, - workerChangeEpoch: { - deserializedName: "workerChangeEpoch", - serializedName: "WorkerChangeEpoch", - defaultValue: config => (typeof config !== "undefined" ? config : -1) - }, - peerId: { - deserializedName: "peerId", - serializedName: "PeerId", - defaultValue: "0" // defaulting this to 0 as we don't have any p2p technology in Ganache - }, - multiaddrs: { - deserializedName: "multiaddrs", - serializedName: "Multiaddrs", - defaultValue: [] - }, - sealProofType: { - deserializedName: "sealProofType", - serializedName: "SealProofType", - defaultValue: config => - typeof config !== "undefined" - ? config - : RegisteredSealProof.StackedDrg2KiBV1_1 - }, - sectorSize: { - deserializedName: "sectorSize", - serializedName: "SectorSize", - defaultValue: 2048 // sectors/sector sizes don't really matter in Ganache; defaulting to 2 KiB (lotus-devnet default) - }, - windowPoStPartitionSectors: { - deserializedName: "windowPoStPartitionSectors", - serializedName: "WindowPoStPartitionSectors", - defaultValue: config => (typeof config !== "undefined" ? config : 0) - }, - consensusFaultElapsed: { - deserializedName: "consensusFaultElapsed", - serializedName: "ConsensusFaultElapsed", - defaultValue: config => (typeof config !== "undefined" ? config : -1) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.owner = super.initializeValue(this.config.owner, options); - this.worker = super.initializeValue(this.config.worker, options); - this.newWorker = super.initializeValue(this.config.newWorker, options); - this.controlAddresses = super.initializeValue( - this.config.controlAddresses, - options - ); - this.workerChangeEpoch = super.initializeValue( - this.config.workerChangeEpoch, - options - ); - this.peerId = super.initializeValue(this.config.peerId, options); - this.multiaddrs = super.initializeValue(this.config.multiaddrs, options); - this.sealProofType = super.initializeValue( - this.config.sealProofType, - options - ); - this.sectorSize = super.initializeValue(this.config.sectorSize, options); - this.windowPoStPartitionSectors = super.initializeValue( - this.config.windowPoStPartitionSectors, - options - ); - this.consensusFaultElapsed = super.initializeValue( - this.config.consensusFaultElapsed, - options - ); - } - - /** - * The owner address corresponds to a Lotus node address provided during the miner initialization. - */ - owner: Address; - /** - * The worker address is used to send and pay for day-to-day operations performed by the miner. - */ - worker: Address; - newWorker: Address; - /** - * Control addresses are used to submit WindowPoSts proofs to the chain (unused by Ganache). - */ - controlAddresses: string[]; - /** - * The epoch time that `worker` becomes `newWorker`. A value of -1 indicates no change. - */ - workerChangeEpoch: number; - peerId: string; - multiaddrs: Uint8Array[]; - sealProofType: number; - sectorSize: number; - windowPoStPartitionSectors: number; - consensusFaultElapsed: number; -} - -type SerializedMinerInfo = SerializedObject; - -export { MinerInfo, SerializedMinerInfo }; diff --git a/src/chains/filecoin/filecoin/src/things/miner-power.ts b/src/chains/filecoin/filecoin/src/things/miner-power.ts deleted file mode 100644 index f2633ab2b8..0000000000 --- a/src/chains/filecoin/filecoin/src/things/miner-power.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { SerializedRootCID } from "./root-cid"; -import { - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -} from "./serializable-object"; -import { PowerClaim, SerializedPowerClaim } from "./power-claim"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/api#MinerPower - -type MinerPowerConfig = { - properties: { - minerPower: { - type: PowerClaim; - serializedType: SerializedPowerClaim; - serializedName: "MinerPower"; - }; - totalPower: { - type: PowerClaim; - serializedType: SerializedPowerClaim; - serializedName: "TotalPower"; - }; - hasMinPower: { - type: boolean; - serializedType: SerializedRootCID; - serializedName: "HasMinPower"; - }; - }; -}; - -class MinerPower - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - minerPower: { - deserializedName: "minerPower", - serializedName: "MinerPower", - defaultValue: options => new PowerClaim(options) - }, - totalPower: { - deserializedName: "totalPower", - serializedName: "TotalPower", - defaultValue: options => new PowerClaim(options) - }, - hasMinPower: { - deserializedName: "hasMinPower", - serializedName: "HasMinPower", - defaultValue: false - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.minerPower = super.initializeValue(this.config.minerPower, options); - this.totalPower = super.initializeValue(this.config.totalPower, options); - this.hasMinPower = super.initializeValue(this.config.hasMinPower, options); - } - - minerPower: PowerClaim; - totalPower: PowerClaim; - hasMinPower: boolean; -} - -type SerializedMinerPower = SerializedObject; - -export { MinerPower, SerializedMinerPower }; diff --git a/src/chains/filecoin/filecoin/src/things/post-proof.ts b/src/chains/filecoin/filecoin/src/things/post-proof.ts deleted file mode 100644 index 2dbf14a793..0000000000 --- a/src/chains/filecoin/filecoin/src/things/post-proof.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { - SerializableObject, - DeserializedObject, - SerializedObject, - Definitions -} from "./serializable-object"; - -// https://pkg.go.dev/github.com/filecoin-project/specs-actors@v0.9.13/actors/runtime/proof#PoStProof - -interface PoStProofConfig { - properties: { - postProof: { - type: number; - serializedType: number; - serializedName: "PoStProof"; - }; - proofBytes: { - type: Buffer; - serializedType: string; - serializedName: "ProofBytes"; - }; - }; -} - -class PoStProof - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - postProof: { - deserializedName: "postProof", - serializedName: "PoStProof", - defaultValue: 0 - }, - proofBytes: { - deserializedName: "proofBytes", - serializedName: "ProofBytes", - defaultValue: literal => - typeof literal !== "undefined" - ? Buffer.from(literal, "base64") - : Buffer.from([0]) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.postProof = super.initializeValue(this.config.postProof, options); - this.proofBytes = super.initializeValue(this.config.proofBytes, options); - } - - postProof: number; - proofBytes: Buffer; -} - -type SerializedPoStProof = SerializedObject; - -export { PoStProof, SerializedPoStProof }; diff --git a/src/chains/filecoin/filecoin/src/things/power-claim.ts b/src/chains/filecoin/filecoin/src/things/power-claim.ts deleted file mode 100644 index 320a8ab94a..0000000000 --- a/src/chains/filecoin/filecoin/src/things/power-claim.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -} from "./serializable-object"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/chain/actors/builtin/power#Claim - -type PowerClaimConfig = { - properties: { - rawBytePower: { - type: bigint; - serializedType: string; - serializedName: "RawBytePower"; - }; - qualityAdjPower: { - type: bigint; - serializedType: string; - serializedName: "QualityAdjPower"; - }; - }; -}; - -class PowerClaim - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - rawBytePower: { - deserializedName: "rawBytePower", - serializedName: "RawBytePower", - defaultValue: literal => (literal ? BigInt(literal) : 1n) - }, - qualityAdjPower: { - deserializedName: "qualityAdjPower", - serializedName: "QualityAdjPower", - defaultValue: literal => (literal ? BigInt(literal) : 1n) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.rawBytePower = super.initializeValue( - this.config.rawBytePower, - options - ); - this.qualityAdjPower = super.initializeValue( - this.config.qualityAdjPower, - options - ); - } - - rawBytePower: bigint; - qualityAdjPower: bigint; -} - -type SerializedPowerClaim = SerializedObject; - -export { PowerClaim, SerializedPowerClaim }; diff --git a/src/chains/filecoin/filecoin/src/things/query-offer.ts b/src/chains/filecoin/filecoin/src/things/query-offer.ts deleted file mode 100644 index c37b8034b9..0000000000 --- a/src/chains/filecoin/filecoin/src/things/query-offer.ts +++ /dev/null @@ -1,166 +0,0 @@ -import { RootCID, SerializedRootCID } from "./root-cid"; -import { - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -} from "./serializable-object"; -import { RetrievalPeer, SerializedRetrievalPeer } from "./retrieval-peer"; -import { Address, SerializedAddress } from "./address"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/api#QueryOffer - -type QueryOfferConfig = { - properties: { - err: { - type: string; - serializedType: string; - serializedName: "Err"; - }; - root: { - type: RootCID; - serializedType: SerializedRootCID; - serializedName: "Root"; - }; - piece: { - type: RootCID; - serializedType: SerializedRootCID; - serializedName: "Piece"; - }; - size: { - type: number; - serializedType: number; - serializedName: "Size"; - }; - minPrice: { - type: bigint; - serializedType: string; - serializedName: "MinPrice"; - }; - unsealPrice: { - type: bigint; - serializedType: string; - serializedName: "UnsealPrice"; - }; - paymentInterval: { - type: number; - serializedType: number; - serializedName: "PaymentInterval"; - }; - paymentIntervalIncrease: { - type: number; - serializedType: number; - serializedName: "PaymentIntervalIncrease"; - }; - miner: { - type: Address; - serializedType: SerializedAddress; - serializedName: "Miner"; - }; - minerPeer: { - type: RetrievalPeer; - serializedType: SerializedRetrievalPeer; - serializedName: "MinerPeer"; - }; - }; -}; - -class QueryOffer - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - err: { - deserializedName: "err", - serializedName: "Err", - defaultValue: "" - }, - root: { - deserializedName: "root", - serializedName: "Root", - defaultValue: options => new RootCID(options) - }, - piece: { - deserializedName: "piece", - serializedName: "Piece", - defaultValue: options => new RootCID(options) - }, - size: { - deserializedName: "size", - serializedName: "Size", - defaultValue: 0 - }, - minPrice: { - deserializedName: "minPrice", - serializedName: "MinPrice", - defaultValue: literal => (literal ? BigInt(literal) : 0n) - }, - unsealPrice: { - deserializedName: "unsealPrice", - serializedName: "UnsealPrice", - defaultValue: literal => (literal ? BigInt(literal) : 0n) - }, - paymentInterval: { - deserializedName: "paymentInterval", - serializedName: "PaymentInterval", - defaultValue: 1048576 - }, - paymentIntervalIncrease: { - deserializedName: "paymentIntervalIncrease", - serializedName: "PaymentIntervalIncrease", - defaultValue: 1048576 - }, - miner: { - deserializedName: "miner", - serializedName: "Miner", - defaultValue: literal => - literal ? new Address(literal) : Address.fromId(0, false, true) - }, - minerPeer: { - deserializedName: "minerPeer", - serializedName: "MinerPeer", - defaultValue: options => new RetrievalPeer(options) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.err = super.initializeValue(this.config.err, options); - this.root = super.initializeValue(this.config.root, options); - this.piece = super.initializeValue(this.config.piece, options); - this.size = super.initializeValue(this.config.size, options); - this.minPrice = super.initializeValue(this.config.minPrice, options); - this.unsealPrice = super.initializeValue(this.config.unsealPrice, options); - this.paymentInterval = super.initializeValue( - this.config.paymentInterval, - options - ); - this.paymentIntervalIncrease = super.initializeValue( - this.config.paymentIntervalIncrease, - options - ); - this.miner = super.initializeValue(this.config.miner, options); - this.minerPeer = super.initializeValue(this.config.minerPeer, options); - } - - err: string; - root: RootCID; - piece: RootCID; - size: number; - minPrice: bigint; - unsealPrice: bigint; - paymentInterval: number; - paymentIntervalIncrease: number; - miner: Address; - minerPeer: RetrievalPeer; -} - -type SerializedQueryOffer = SerializedObject; - -export { QueryOffer, SerializedQueryOffer }; diff --git a/src/chains/filecoin/filecoin/src/things/retrieval-order.ts b/src/chains/filecoin/filecoin/src/things/retrieval-order.ts deleted file mode 100644 index 64e301791f..0000000000 --- a/src/chains/filecoin/filecoin/src/things/retrieval-order.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { RootCID, SerializedRootCID } from "./root-cid"; -import { - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -} from "./serializable-object"; -import { RetrievalPeer, SerializedRetrievalPeer } from "./retrieval-peer"; -import { Address, SerializedAddress } from "./address"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/api#RetrievalOrder - -type RetrievalOrderConfig = { - properties: { - root: { - type: RootCID; - serializedType: SerializedRootCID; - serializedName: "Root"; - }; - piece: { - type: RootCID; - serializedType: SerializedRootCID; - serializedName: "Piece"; - }; - size: { - type: number; - serializedType: number; - serializedName: "Size"; - }; - total: { - type: bigint; - serializedType: string; - serializedName: "Total"; - }; - unsealPrice: { - type: bigint; - serializedType: string; - serializedName: "UnsealPrice"; - }; - paymentInterval: { - type: number; - serializedType: number; - serializedName: "PaymentInterval"; - }; - paymentIntervalIncrease: { - type: number; - serializedType: number; - serializedName: "PaymentIntervalIncrease"; - }; - client: { - type: Address; - serializedType: SerializedAddress; - serializedName: "Client"; - }; - miner: { - type: Address; - serializedType: SerializedAddress; - serializedName: "Miner"; - }; - minerPeer: { - type: RetrievalPeer; - serializedType: SerializedRetrievalPeer; - serializedName: "MinerPeer"; - }; - }; -}; - -class RetrievalOrder - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - root: { - deserializedName: "root", - serializedName: "Root", - defaultValue: options => new RootCID(options) - }, - piece: { - deserializedName: "piece", - serializedName: "Piece", - defaultValue: options => new RootCID(options) - }, - size: { - deserializedName: "size", - serializedName: "Size", - defaultValue: 0 - }, - total: { - deserializedName: "total", - serializedName: "Total", - defaultValue: literal => (literal ? BigInt(literal) : 0n) - }, - unsealPrice: { - deserializedName: "unsealPrice", - serializedName: "UnsealPrice", - defaultValue: literal => (literal ? BigInt(literal) : 0n) - }, - paymentInterval: { - deserializedName: "paymentInterval", - serializedName: "PaymentInterval", - defaultValue: 1048576 - }, - paymentIntervalIncrease: { - deserializedName: "paymentIntervalIncrease", - serializedName: "PaymentIntervalIncrease", - defaultValue: 1048576 - }, - client: { - deserializedName: "client", - serializedName: "Client", - defaultValue: literal => - literal ? new Address(literal) : Address.fromId(0) - }, - miner: { - deserializedName: "miner", - serializedName: "Miner", - defaultValue: literal => - literal ? new Address(literal) : Address.fromId(0, false, true) - }, - minerPeer: { - deserializedName: "minerPeer", - serializedName: "MinerPeer", - defaultValue: options => new RetrievalPeer(options) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.root = super.initializeValue(this.config.root, options); - this.piece = super.initializeValue(this.config.piece, options); - this.size = super.initializeValue(this.config.size, options); - this.total = super.initializeValue(this.config.total, options); - this.unsealPrice = super.initializeValue(this.config.unsealPrice, options); - this.paymentInterval = super.initializeValue( - this.config.paymentInterval, - options - ); - this.paymentIntervalIncrease = super.initializeValue( - this.config.paymentIntervalIncrease, - options - ); - this.client = super.initializeValue(this.config.client, options); - this.miner = super.initializeValue(this.config.miner, options); - this.minerPeer = super.initializeValue(this.config.minerPeer, options); - } - - root: RootCID; - piece: RootCID; - size: number; - total: bigint; - unsealPrice: bigint; - paymentInterval: number; - paymentIntervalIncrease: number; - client: Address; - miner: Address; - minerPeer: RetrievalPeer; -} - -type SerializedRetrievalOrder = SerializedObject; - -export { RetrievalOrder, SerializedRetrievalOrder }; diff --git a/src/chains/filecoin/filecoin/src/things/retrieval-peer.ts b/src/chains/filecoin/filecoin/src/things/retrieval-peer.ts deleted file mode 100644 index 465c03e6f4..0000000000 --- a/src/chains/filecoin/filecoin/src/things/retrieval-peer.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -} from "./serializable-object"; -import { RootCID, SerializedRootCID } from "./root-cid"; -import { Address, SerializedAddress } from "./address"; - -// https://pkg.go.dev/github.com/filecoin-project/go-fil-markets@v1.1.1/retrievalmarket#RetrievalPeer - -type RetrievalPeerConfig = { - properties: { - address: { - type: Address; - serializedType: SerializedAddress; - serializedName: "Address"; - }; - id: { - type: string; - serializedType: string; - serializedName: "ID"; - }; - pieceCID: { - type: RootCID; - serializedType: SerializedRootCID; - serializedName: "PieceCID"; - }; - }; -}; - -class RetrievalPeer - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - address: { - deserializedName: "address", - serializedName: "Address", - defaultValue: literal => - literal ? new Address(literal) : Address.fromId(0, false, true) - }, - id: { - deserializedName: "id", - serializedName: "ID", - defaultValue: "0" - }, - pieceCID: { - deserializedName: "pieceCID", - serializedName: "PieceCID", - defaultValue: options => new RootCID(options) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.address = super.initializeValue(this.config.address, options); - this.id = super.initializeValue(this.config.id, options); - this.pieceCID = super.initializeValue(this.config.pieceCID, options); - } - - address: Address; - id: string; - pieceCID: RootCID; -} - -type SerializedRetrievalPeer = SerializedObject; - -export { RetrievalPeer, SerializedRetrievalPeer }; diff --git a/src/chains/filecoin/filecoin/src/things/root-cid.ts b/src/chains/filecoin/filecoin/src/things/root-cid.ts deleted file mode 100644 index dbde268a95..0000000000 --- a/src/chains/filecoin/filecoin/src/things/root-cid.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { CID, SerializedCID } from "./cid"; -import { - SerializableObject, - DeserializedObject, - Definitions, - SerializedObject -} from "./serializable-object"; - -interface RootCIDConfig { - properties: { - root: { - type: CID; - serializedType: SerializedCID; - serializedName: "/"; - }; - }; -} - -class RootCID - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - root: { - deserializedName: "root", - serializedName: "/", - defaultValue: options => { - return options ? new CID(options) : CID.nullCID(); - } - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.root = super.initializeValue(this.config.root, options); - } - - asPath(): string { - return "/" + this.root.value; - } - - root: CID; -} - -type SerializedRootCID = SerializedObject; - -export { RootCID, SerializedRootCID }; diff --git a/src/chains/filecoin/filecoin/src/things/serializable-literal.ts b/src/chains/filecoin/filecoin/src/things/serializable-literal.ts deleted file mode 100644 index c3a2c1dde2..0000000000 --- a/src/chains/filecoin/filecoin/src/things/serializable-literal.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Serializable } from "./serializable-object"; - -type BaseConfig = { - type: number | string | Buffer | bigint | null; -}; - -type Literal = C["type"]; - -type SerializedLiteral = C["type"] extends bigint | Buffer - ? string - : Literal; - -type DefaultValue = D | ((options: S | undefined) => D); - -type LiteralDefinition = { - defaultValue?: DefaultValue, Literal>; -}; - -abstract class SerializableLiteral - implements Serializable> { - protected abstract get config(): LiteralDefinition; - value: Literal; - - constructor(literal?: SerializedLiteral) { - this.value = this.initialize(literal); - } - - private initialize(literal?: SerializedLiteral): Literal { - const def = this.config.defaultValue; - if (typeof def === "function") { - return def(literal); - } else if (typeof literal !== "undefined") { - return literal; - } else if (typeof def !== "function" && typeof def !== "undefined") { - return def; - } else { - throw new Error(`A value is required for class ${this.constructor.name}`); - } - } - - serialize(): SerializedLiteral { - if (typeof this.value === "bigint") { - return this.value.toString(10) as SerializedLiteral; - } else if (Buffer.isBuffer(this.value)) { - return this.value.toString("base64") as SerializedLiteral; - } else { - return this.value as SerializedLiteral; - } - } - - equals(obj: Serializable>): boolean { - const a: Literal = this.serialize(); - const b: Literal = obj.serialize(); - - return a === b; - } -} - -export { SerializableLiteral, LiteralDefinition, Literal }; diff --git a/src/chains/filecoin/filecoin/src/things/serializable-object.ts b/src/chains/filecoin/filecoin/src/things/serializable-object.ts deleted file mode 100644 index 35947f62b7..0000000000 --- a/src/chains/filecoin/filecoin/src/things/serializable-object.ts +++ /dev/null @@ -1,212 +0,0 @@ -import { SerializableLiteral } from "./serializable-literal"; -import deepEqual from "deep-equal"; -import { CID } from "./cid"; -import cbor from "borc"; -import { CID as IPFS_CID } from "ipfs"; -import multihashing from "multihashing"; -import multicodec from "multicodec"; - -// provides shape -export type BaseConfig = { - properties: { - // lowercase (deserialized) - [deserializedName: string]: { - type: any; - serializedName: string; - serializedType: any; - }; - }; -}; -// PropertyName, e.g. "cid" | "blsAggregate" -// N extends PropertyName, e.g. "cid" -type PropertyName = string & keyof C["properties"]; -type SerializedPropertyName< - C extends BaseConfig, - N extends PropertyName = PropertyName -> = C["properties"][N]["serializedName"]; -type PropertyType< - C extends BaseConfig, - N extends PropertyName = PropertyName -> = C["properties"][N]["type"]; - -type SerializedPropertyType< - C extends BaseConfig, - N extends PropertyName = PropertyName -> = C["properties"][N]["serializedType"]; -type DeserializedObject = { - [N in PropertyName]: PropertyType; -}; -/* - * { - * cid: { - * Cid: CID - * } - * } - */ -type SerializedObjectWrapper = { - [N in PropertyName]: { - [S in SerializedPropertyName]: SerializedPropertyType; - }; -}; - -interface Wrapper { - [propertyName: string]: { - [serializedPropertyName: string]: any; - }; -} -type Values = W[keyof W]; -// this evil magic comes from https://stackoverflow.com/a/50375286 -type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ( - k: infer I -) => void - ? I - : never; -// Flattens two union types into a single type with optional values -// i.e. FlattenUnion<{ a: number, c: number } | { b: string, c: number }> = { a?: number, b?: string, c: number } -// from https://www.roryba.in/programming/2019/10/12/flattening-typescript-union-types.html -type FlattenUnion = { - [K in keyof UnionToIntersection]: K extends keyof T - ? T[K] extends any[] - ? T[K] - : T[K] extends object - ? FlattenUnion - : T[K] - : UnionToIntersection[K]; -}; -type SerializedObject = FlattenUnion< - Values> ->; - -type DefaultValue = // A default value can be: - | D // the expected type - | ((options?: S) => D); // a fn that takes in a serialized object and returns the type -type Definition> = { - deserializedName: N; - serializedName: SerializedPropertyName; - defaultValue: DefaultValue, SerializedPropertyType>; -}; -// purpose of this type is to have a value -type Definitions = { - [N in PropertyName]: Definition; -}; -// lives in value land -const serializedPropertyName = < - C extends BaseConfig, - N extends PropertyName = PropertyName ->( - definitions: Definitions, - name: N -): SerializedPropertyName => definitions[name].serializedName; - -// concrete stuff follows - -interface Serializable { - serialize(): C; - equals(obj: Serializable): boolean; -} - -abstract class SerializableObject - implements Serializable> { - protected abstract get config(): Definitions; - - // The constructor can take in a serialized object, or a deserialized one. - // Note that SerializableObject is the deserialized object in value land. - - initializeValue>( - valueConfig: Definition, - options?: Partial> | Partial> - ): PropertyType { - if (!options) { - options = {}; - } - - const def = valueConfig.defaultValue; - - // We don't know whether we were passed a serialized object or a - // deserialized one, so let's look for both keys. - const deserializedInput: PropertyType | undefined = (options as any)[ - valueConfig.deserializedName - ]; - const serializedInput: - | SerializedPropertyType - | undefined = (options as any)[valueConfig.serializedName]; - - if (typeof deserializedInput !== "undefined") { - return deserializedInput; - } else if (typeof def === "function") { - const typedDef = def as ( - options?: SerializedPropertyType - ) => PropertyType; - return typedDef(serializedInput); - } else if (typeof serializedInput !== "undefined") { - return serializedInput; - } else if (typeof def !== "function") { - return def; - } else { - throw new Error( - `A value is required for ${this.constructor.name}.${valueConfig.deserializedName}` - ); - } - } - - private serializeValue(value: any) { - let returnVal: any = value; - if (typeof value === "bigint") { - returnVal = value.toString(10); - } else if (Buffer.isBuffer(value)) { - // golang serializes "byte[]" with base-64 encoding - // https://golang.org/src/encoding/json/encode.go?s=6458:6501#L55 - returnVal = value.toString("base64"); - } else if ( - value instanceof SerializableObject || - value instanceof SerializableLiteral - ) { - returnVal = value.serialize(); - } else if (value instanceof Array) { - returnVal = value.map(item => this.serializeValue(item)); - } - return returnVal; - } - - serialize(): SerializedObject { - const returnVal: SerializedObject = {} as SerializedObject; - - for (const [deserializedName, { serializedName }] of Object.entries( - this.config - )) { - const value = (this as any)[deserializedName]; - (returnVal as any)[serializedName] = this.serializeValue(value); - } - - return returnVal; - } - - equals(obj: Serializable>): boolean { - const a: SerializedObject = this.serialize(); - const b: SerializedObject = obj.serialize(); - - return deepEqual(a, b); - } - - get cid(): CID { - // We could have used the ipld-dag-cbor package for the following, - // but it was async, which caused a number of issues during object construction. - const cborBuffer = cbor.encode(this.serialize()); - const multihash = multihashing(cborBuffer, "blake2b-256"); - const rawCid = new IPFS_CID( - 1, - multicodec.print[multicodec.DAG_CBOR], - multihash - ); - - return new CID(rawCid.toString()); - } -} - -export { - Serializable, - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -}; diff --git a/src/chains/filecoin/filecoin/src/things/sig-type.ts b/src/chains/filecoin/filecoin/src/things/sig-type.ts deleted file mode 100644 index eafdd22c5c..0000000000 --- a/src/chains/filecoin/filecoin/src/things/sig-type.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Reference implementation: https://git.io/JtsJc -export enum SigType { - SigTypeUnknown = 255, - - SigTypeSecp256k1 = 1, // I don't fully understand `iota`, but I put this through a golang compiler and it said it's 1 - SigTypeBLS // Purposely not explicitly stating to coincide with reference implementation (which is autoincrement) -} diff --git a/src/chains/filecoin/filecoin/src/things/signature.ts b/src/chains/filecoin/filecoin/src/things/signature.ts deleted file mode 100644 index 4fcf0d47ab..0000000000 --- a/src/chains/filecoin/filecoin/src/things/signature.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { - SerializableObject, - DeserializedObject, - Definitions, - SerializedObject -} from "./serializable-object"; -import { SigType } from "./sig-type"; - -// https://pkg.go.dev/github.com/filecoin-project/go-state-types@v0.0.0-20201203022337-7cab7f0d4bfb/crypto#Signature - -interface SignatureConfig { - properties: { - type: { - type: SigType; - serializedType: SigType; - serializedName: "Type"; - }; - data: { - type: Buffer; - serializedType: string; - serializedName: "Data"; - }; - }; -} - -class Signature - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - type: { - deserializedName: "type", - serializedName: "Type", - defaultValue: SigType.SigTypeUnknown - }, - data: { - deserializedName: "data", - serializedName: "Data", - defaultValue: literal => - typeof literal !== "undefined" - ? Buffer.from(literal, "base64") - : Buffer.from([0]) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.type = super.initializeValue(this.config.type, options); - this.data = super.initializeValue(this.config.data, options); - } - - type: number; - data: Buffer; -} - -type SerializedSignature = SerializedObject; - -export { Signature, SerializedSignature }; diff --git a/src/chains/filecoin/filecoin/src/things/signed-message.ts b/src/chains/filecoin/filecoin/src/things/signed-message.ts deleted file mode 100644 index 8d9334479e..0000000000 --- a/src/chains/filecoin/filecoin/src/things/signed-message.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -} from "./serializable-object"; -import { Message, SerializedMessage } from "./message"; -import { SerializedSignature, Signature } from "./signature"; -import { CID } from "./cid"; -import { SigType } from "./sig-type"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/chain/types#SignedMessage - -type SignedMessageConfig = { - properties: { - message: { - type: Message; - serializedType: SerializedMessage; - serializedName: "Message"; - }; - signature: { - type: Signature; - serializedType: SerializedSignature; - serializedName: "Signature"; - }; - }; -}; - -class SignedMessage - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - message: { - deserializedName: "message", - serializedName: "Message", - defaultValue: options => new Message(options) - }, - signature: { - deserializedName: "signature", - serializedName: "Signature", - defaultValue: options => new Signature(options) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.message = super.initializeValue(this.config.message, options); - this.signature = super.initializeValue(this.config.signature, options); - } - - message: Message; - signature: Signature; - - // Reference implementation: https://git.io/Jt53i - get cid(): CID { - if (this.signature.type === SigType.SigTypeBLS) { - return this.message.cid; - } else { - return super.cid; - } - } -} - -type SerializedSignedMessage = SerializedObject; - -export { SignedMessage, SignedMessageConfig, SerializedSignedMessage }; diff --git a/src/chains/filecoin/filecoin/src/things/start-deal-params.ts b/src/chains/filecoin/filecoin/src/things/start-deal-params.ts deleted file mode 100644 index d807b008aa..0000000000 --- a/src/chains/filecoin/filecoin/src/things/start-deal-params.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { - StorageMarketDataRef, - SerializedStorageMarketDataRef -} from "./storage-market-data-ref"; -import { Address, SerializedAddress } from "./address"; -import { - SerializableObject, - DeserializedObject, - Definitions, - SerializedObject -} from "./serializable-object"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/api#StartDealParams - -type StartDealParamsConfig = { - properties: { - data: { - type: StorageMarketDataRef; - serializedType: SerializedStorageMarketDataRef; - serializedName: "Data"; - }; - wallet: { - type: Address | null; - serializedType: SerializedAddress | null; - serializedName: "Wallet"; - }; - miner: { - type: Address; - serializedType: SerializedAddress; - serializedName: "Miner"; - }; - epochPrice: { - type: bigint; - serializedType: string; - serializedName: "EpochPrice"; - }; - minBlocksDuration: { - type: number; - serializedType: number; - serializedName: "MinBlocksDuration"; - }; - providerCollateral: { - type: bigint; - serializedType: string; - serializedName: "ProviderCollateral"; - }; - dealStartEpoch: { - type: number; - serializedType: number; - serializedName: "dealStartEpoch"; - }; - fastRetrieval: { - type: boolean; - serializedType: boolean; - serializedName: "FastRetrieval"; - }; - verifiedDeal: { - type: boolean; - serializedType: boolean; - serializedName: "VerifiedDeal"; - }; - }; -}; - -class StartDealParams - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - data: { - deserializedName: "data", - serializedName: "Data", - defaultValue: options => new StorageMarketDataRef(options) - }, - wallet: { - deserializedName: "wallet", - serializedName: "Wallet", - defaultValue: options => (options ? new Address(options) : null) - }, - miner: { - deserializedName: "miner", - serializedName: "Miner", - defaultValue: literal => - literal ? new Address(literal) : Address.fromId(0, false, true) - }, - epochPrice: { - deserializedName: "epochPrice", - serializedName: "EpochPrice", - defaultValue: literal => (literal ? BigInt(literal) : 2500n) - }, - minBlocksDuration: { - deserializedName: "minBlocksDuration", - serializedName: "MinBlocksDuration", - defaultValue: 300 - }, - providerCollateral: { - deserializedName: "providerCollateral", - serializedName: "ProviderCollateral", - defaultValue: literal => (literal ? BigInt(literal) : 0n) - }, - dealStartEpoch: { - deserializedName: "dealStartEpoch", - serializedName: "dealStartEpoch", - defaultValue: 0 - }, - fastRetrieval: { - deserializedName: "fastRetrieval", - serializedName: "FastRetrieval", - defaultValue: false - }, - verifiedDeal: { - deserializedName: "verifiedDeal", - serializedName: "VerifiedDeal", - defaultValue: false - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.data = super.initializeValue(this.config.data, options); - this.wallet = super.initializeValue(this.config.wallet, options); - this.miner = super.initializeValue(this.config.miner, options); - this.epochPrice = super.initializeValue(this.config.epochPrice, options); - this.minBlocksDuration = super.initializeValue( - this.config.minBlocksDuration, - options - ); - this.providerCollateral = super.initializeValue( - this.config.providerCollateral, - options - ); - this.dealStartEpoch = super.initializeValue( - this.config.dealStartEpoch, - options - ); - this.fastRetrieval = super.initializeValue( - this.config.fastRetrieval, - options - ); - this.verifiedDeal = super.initializeValue( - this.config.verifiedDeal, - options - ); - } - - data: StorageMarketDataRef; - wallet: Address | null; - miner: Address; - epochPrice: bigint; - minBlocksDuration: number; - providerCollateral: bigint; - dealStartEpoch: number; - fastRetrieval: boolean; - verifiedDeal: boolean; -} - -type SerializedStartDealParams = SerializedObject; - -export { StartDealParams, SerializedStartDealParams }; diff --git a/src/chains/filecoin/filecoin/src/things/storage-market-data-ref.ts b/src/chains/filecoin/filecoin/src/things/storage-market-data-ref.ts deleted file mode 100644 index 5dd44a2a99..0000000000 --- a/src/chains/filecoin/filecoin/src/things/storage-market-data-ref.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { RootCID, SerializedRootCID } from "./root-cid"; -import { - SerializableObject, - SerializedObject, - DeserializedObject, - Definitions -} from "./serializable-object"; - -// https://pkg.go.dev/github.com/filecoin-project/go-fil-markets@v1.1.1/storagemarket#DataRef - -type StorageMarketDataRefConfig = { - properties: { - transferType: { - type: "graphsync"; - serializedType: "graphsync"; - serializedName: "TransferType"; - }; - root: { - type: RootCID; - serializedType: SerializedRootCID; - serializedName: "Root"; - }; - pieceCid: { - type: RootCID | null; - serializedType: SerializedRootCID | null; - serializedName: "PieceCid"; - }; - pieceSize: { - type: number; - serializedType: number; - serializedName: "PieceSize"; - }; - }; -}; - -class StorageMarketDataRef - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - transferType: { - deserializedName: "transferType", - serializedName: "TransferType", - defaultValue: "graphsync" - }, - root: { - deserializedName: "root", - serializedName: "Root", - defaultValue: options => new RootCID(options) - }, - pieceCid: { - deserializedName: "pieceCid", - serializedName: "PieceCid", - defaultValue: options => - new RootCID( - options || { - "/": "Piece CIDs are not supported in Ganache" - } - ) - }, - pieceSize: { - deserializedName: "pieceSize", - serializedName: "PieceSize", - defaultValue: 0 - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.transferType = super.initializeValue( - this.config.transferType, - options - ); - this.root = super.initializeValue(this.config.root, options); - this.pieceCid = super.initializeValue(this.config.pieceCid, options); - this.pieceSize = super.initializeValue(this.config.pieceSize, options); - } - - transferType: "graphsync"; - root: RootCID; - pieceCid: RootCID | null; - pieceSize: number; -} - -type SerializedStorageMarketDataRef = SerializedObject; - -export { StorageMarketDataRef, SerializedStorageMarketDataRef }; diff --git a/src/chains/filecoin/filecoin/src/things/ticket.ts b/src/chains/filecoin/filecoin/src/things/ticket.ts deleted file mode 100644 index 5ec3db1dfe..0000000000 --- a/src/chains/filecoin/filecoin/src/things/ticket.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { - SerializableObject, - DeserializedObject, - SerializedObject, - Definitions -} from "./serializable-object"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/chain/types#Ticket - -interface TicketConfig { - properties: { - vrfProof: { - type: Buffer; - serializedType: string; - serializedName: "VRFProof"; - }; - }; -} - -class Ticket - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - vrfProof: { - deserializedName: "vrfProof", - serializedName: "VRFProof", - defaultValue: literal => - typeof literal !== "undefined" - ? Buffer.from(literal, "base64") - : Buffer.from([0]) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.vrfProof = super.initializeValue(this.config.vrfProof, options); - } - - vrfProof: Buffer; -} - -type SerializedTicket = SerializedObject; - -export { Ticket, SerializedTicket }; diff --git a/src/chains/filecoin/filecoin/src/things/tipset.ts b/src/chains/filecoin/filecoin/src/things/tipset.ts deleted file mode 100644 index cab907b310..0000000000 --- a/src/chains/filecoin/filecoin/src/things/tipset.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { BlockHeader, SerializedBlockHeader } from "./block-header"; -import { - SerializableObject, - DeserializedObject, - Definitions, - SerializedObject -} from "./serializable-object"; -import { RootCID, SerializedRootCID } from "./root-cid"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/chain/types#TipSet - -interface TipsetConfig { - properties: { - cids: { - type: Array; - serializedType: Array; - serializedName: "Cids"; - }; - blocks: { - type: Array; - serializedType: Array; - serializedName: "Blocks"; - }; - height: { - type: number; - serializedType: number; - serializedName: "Height"; - }; - }; -} - -class Tipset - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - cids: { - deserializedName: "cids", - serializedName: "Cids", - defaultValue: options => - options ? options.map(rootCid => new RootCID(rootCid)) : [] - }, - blocks: { - deserializedName: "blocks", - serializedName: "Blocks", - defaultValue: options => - options ? options.map(block => new BlockHeader(block)) : [] - }, - height: { - deserializedName: "height", - serializedName: "Height", - defaultValue: 0 - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.cids = super.initializeValue(this.config.cids, options); - this.blocks = super.initializeValue(this.config.blocks, options); - this.height = super.initializeValue(this.config.height, options); - - // Calculate Cid's if not specified - if (this.cids.length === 0) { - for (const block of this.blocks) { - this.cids.push( - new RootCID({ - root: block.cid - }) - ); - } - } - } - - /** - * An array that contains the BlockHeader.cid(). - * If not provided, constructor will auto add this array. - * There's no documentation specifying this, so here is - * the reference Implementation: https://git.io/Jt3VM - */ - cids: Array; - blocks: Array; - height: number; -} - -type SerializedTipset = SerializedObject; - -export { Tipset, TipsetConfig, SerializedTipset }; diff --git a/src/chains/filecoin/filecoin/src/things/version.ts b/src/chains/filecoin/filecoin/src/things/version.ts deleted file mode 100644 index 3c77c60cab..0000000000 --- a/src/chains/filecoin/filecoin/src/things/version.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { - SerializableObject, - DeserializedObject, - SerializedObject, - Definitions -} from "./serializable-object"; - -const GanacheFilecoinVersion = process.env.GANACHE_FILECOIN_VERSION || "DEV"; - -// https://pkg.go.dev/github.com/filecoin-project/lotus@v1.4.0/api#Version - -function createBinarySemverVersion(version: string): number { - const versionParts = version.split("."); - - const majorVersion = - versionParts.length > 0 ? parseInt(versionParts[0], 10) : 0; - const minorVersion = - versionParts.length > 1 ? parseInt(versionParts[1], 10) : 0; - const patchVersion = - versionParts.length > 2 ? parseInt(versionParts[2], 10) : 0; - - const binaryVersion = - (majorVersion << 16) | (minorVersion << 8) | patchVersion; - - return binaryVersion; -} - -interface VersionConfig { - properties: { - version: { - type: string; - serializedType: string; - serializedName: "Version"; - }; - apiVersion: { - type: number; - serializedType: number; - serializedName: "APIVersion"; - }; - blockDelay: { - type: bigint; - serializedType: string; - serializedName: "BlockDelay"; - }; - }; -} - -class Version - extends SerializableObject - implements DeserializedObject { - get config(): Definitions { - return { - version: { - deserializedName: "version", - serializedName: "Version", - defaultValue: `@ganache/filecoin v${GanacheFilecoinVersion}` - }, - apiVersion: { - deserializedName: "apiVersion", - serializedName: "APIVersion", - // Version determined by what we're using for at https://pkg.go.dev/github.com/filecoin-project/lotus/api - defaultValue: createBinarySemverVersion("1.4.0") - }, - blockDelay: { - deserializedName: "blockDelay", - serializedName: "BlockDelay", - defaultValue: literal => (literal ? BigInt(literal) : 0n) - } - }; - } - - constructor( - options?: - | Partial> - | Partial> - ) { - super(); - - this.version = super.initializeValue(this.config.version, options); - this.apiVersion = super.initializeValue(this.config.apiVersion, options); - this.blockDelay = super.initializeValue(this.config.blockDelay, options); - } - - version: string; - apiVersion: number; - blockDelay: bigint; -} - -type SerializedVersion = SerializedObject; - -export { Version, SerializedVersion }; diff --git a/src/chains/filecoin/filecoin/src/types/registered-seal-proof.ts b/src/chains/filecoin/filecoin/src/types/registered-seal-proof.ts deleted file mode 100644 index 6efc99c780..0000000000 --- a/src/chains/filecoin/filecoin/src/types/registered-seal-proof.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Reference implementation: https://git.io/JtnP0 -export enum RegisteredSealProof { - StackedDrg2KiBV1 = 0, - StackedDrg8MiBV1 = 1, - StackedDrg512MiBV1 = 2, - StackedDrg32GiBV1 = 3, - StackedDrg64GiBV1 = 4, - StackedDrg2KiBV1_1 = 5, - StackedDrg8MiBV1_1 = 6, - StackedDrg512MiBV1_1 = 7, - StackedDrg32GiBV1_1 = 8, - StackedDrg64GiBV1_1 = 9 -} diff --git a/src/chains/filecoin/filecoin/src/types/storage-deal-status.ts b/src/chains/filecoin/filecoin/src/types/storage-deal-status.ts deleted file mode 100644 index eb0bf18a14..0000000000 --- a/src/chains/filecoin/filecoin/src/types/storage-deal-status.ts +++ /dev/null @@ -1,155 +0,0 @@ -// Note that the runtime number values of these enums match -// *exactly* the number values of the same states found at -// go-fil-markets/storagemarket/dealstatus.go (https://git.io/JtJAS) -// **DO NOT TRUST** other sources (i.e. lotus/lotuspond/front/src/Client.js -// or js-lotus-client-workshop/src/08-deals/deal-list.js) -// Don't reorganize unless you know what you're doing. - -// Updated to v1.1.1 (https://github.com/filecoin-project/go-fil-markets/blob/v1.1.1/storagemarket/dealstatus.go) -export enum StorageDealStatus { - // Unknown means the current status of a deal is undefined - Unknown, - - // ProposalNotFound is a status returned in responses when the deal itself cannot - // be located - ProposalNotFound, - - // ProposalRejected is returned by a StorageProvider when it chooses not to accept - // a DealProposal - ProposalRejected, - - // ProposalAccepted indicates an intent to accept a storage deal proposal - ProposalAccepted, - - // Staged means a deal has been published and data is ready to be put into a sector - Staged, - - // Sealing means a deal is in a sector that is being sealed - Sealing, - - // Finalizing means a deal is in a sealed sector and we're doing final - // housekeeping before marking it active - Finalizing, - - // Active means a deal is in a sealed sector and the miner is proving the data - // for the deal - Active, - - // Expired means a deal has passed its final epoch and is expired - Expired, - - // Slashed means the deal was in a sector that got slashed from failing to prove - Slashed, - - // Rejecting means the Provider has rejected the deal, and will send a rejection response - Rejecting, - - // Failing means something has gone wrong in a deal. Once data is cleaned up the deal will finalize on - // Error - Failing, - - // FundsReserved means we've deposited funds as necessary to create a deal, ready to move forward - FundsReserved, - - // CheckForAcceptance means the client is waiting for a provider to seal and publish a deal - CheckForAcceptance, - - // Validating means the provider is validating that deal parameters are good for a proposal - Validating, - - // AcceptWait means the provider is running any custom decision logic to decide whether or not to accept the deal - AcceptWait, - - // StartDataTransfer means data transfer is beginning - StartDataTransfer, - - // Transferring means data is being sent from the client to the provider via the data transfer module - Transferring, - - // WaitingForData indicates either a manual transfer - // or that the provider has not received a data transfer request from the client - WaitingForData, - - // VerifyData means data has been transferred and we are attempting to verify it against the PieceCID - VerifyData, - - // ReserveProviderFunds means that provider is making sure it has adequate funds for the deal in the StorageMarketActor - ReserveProviderFunds, - - // ReserveClientFunds means that client is making sure it has adequate funds for the deal in the StorageMarketActor - ReserveClientFunds, - - // ProviderFunding means that the provider has deposited funds in the StorageMarketActor and it is waiting - // to see the funds appear in its balance - ProviderFunding, - - // ClientFunding means that the client has deposited funds in the StorageMarketActor and it is waiting - // to see the funds appear in its balance - ClientFunding, - - // Publish means the deal is ready to be published on chain - Publish, - - // Publishing means the deal has been published but we are waiting for it to appear on chain - Publishing, - - // Error means the deal has failed due to an error, and no further updates will occur - Error, - - // ProviderTransferAwaitRestart means the provider has restarted while data - // was being transferred from client to provider, and will wait for the client to - // resume the transfer - ProviderTransferAwaitRestart, - - // ClientTransferRestart means a storage deal data transfer from client to provider will be restarted - // by the client - ClientTransferRestart, - - // AwaitingPreCommit means a deal is ready and must be pre-committed - AwaitingPreCommit -} - -export const terminalStates: Array = [ - StorageDealStatus.ProposalNotFound, - StorageDealStatus.ProposalRejected, - StorageDealStatus.Error, - StorageDealStatus.Expired -]; - -export const nextSuccessfulState: Record< - StorageDealStatus, - StorageDealStatus -> = [ - StorageDealStatus.Validating, - StorageDealStatus.Staged, - StorageDealStatus.ReserveProviderFunds, - StorageDealStatus.ReserveClientFunds, - StorageDealStatus.FundsReserved, - StorageDealStatus.ProviderFunding, - StorageDealStatus.ClientFunding, - StorageDealStatus.Publish, - StorageDealStatus.Publishing, - StorageDealStatus.Transferring, - StorageDealStatus.Sealing, - StorageDealStatus.Active -].reduce((obj, currentValue, index, array) => { - // This creates an object linking each state to its next state - - let nextValue: StorageDealStatus; - if (index + 1 < array.length) { - nextValue = array[index + 1]; - } else { - nextValue = array[index]; - } - - obj[currentValue] = nextValue; - - return obj; -}, {} as Record); - -export function dealIsInProcess(state: StorageDealStatus) { - return ( - state !== StorageDealStatus.Active && - typeof nextSuccessfulState[state] !== "undefined" - ); -} diff --git a/src/chains/filecoin/filecoin/src/types/subscriptions.ts b/src/chains/filecoin/filecoin/src/types/subscriptions.ts deleted file mode 100644 index b9ddb312bf..0000000000 --- a/src/chains/filecoin/filecoin/src/types/subscriptions.ts +++ /dev/null @@ -1,7 +0,0 @@ -export enum SubscriptionMethod { - ChannelUpdated = "xrpc.ch.val", - ChannelClosed = "xrpc.ch.close", - SubscriptionCanceled = "xrpc.cancel" -} - -export type SubscriptionId = string; diff --git a/src/chains/filecoin/filecoin/tests/api/filecoin/deals.test.ts b/src/chains/filecoin/filecoin/tests/api/filecoin/deals.test.ts deleted file mode 100644 index 8eda3d3fd0..0000000000 --- a/src/chains/filecoin/filecoin/tests/api/filecoin/deals.test.ts +++ /dev/null @@ -1,356 +0,0 @@ -import assert from "assert"; -import { FilecoinProvider } from "../../../src/provider"; -import getProvider from "../../helpers/getProvider"; -import getIpfsClient from "../../helpers/getIpfsClient"; -import { CID } from "../../../src/things/cid"; -import { StartDealParams } from "../../../src/things/start-deal-params"; -import { RootCID } from "../../../src/things/root-cid"; -import { StorageMarketDataRef } from "../../../src/things/storage-market-data-ref"; -import { DealInfo, SerializedDealInfo } from "../../../src/things/deal-info"; -import { SerializedRetrievalOrder } from "../../../src/things/retrieval-order"; -import BN from "bn.js"; -import { SerializedQueryOffer } from "../../../src/things/query-offer"; -import { SerializedFileRef } from "../../../src/things/file-ref"; -import tmp from "tmp-promise"; -import path from "path"; -import fs from "fs"; -import { Address } from "../../../src/things/address"; -import { StorageDealStatus } from "../../../src/types/storage-deal-status"; - -const LotusRPC = require("@filecoin-shipyard/lotus-client-rpc").LotusRPC; - -type LotusClient = any; - -describe("api", () => { - describe("filecoin", () => { - let provider: FilecoinProvider; - let client: LotusClient; - const data = "some data"; - const expectedSize = 17; - - before(async () => { - tmp.setGracefulCleanup(); - provider = await getProvider(); - client = new LotusRPC(provider, { schema: FilecoinProvider.Schema }); - }); - - after(async () => { - if (provider) { - await provider.stop(); - } - }); - - describe("Filecoin.ClientGetDealStatus", () => { - it("retrieves a string for a status code", async () => { - let status = await client.clientGetDealStatus(5); - assert.strictEqual(status, "StorageDealSealing"); - try { - status = await client.clientGetDealStatus(500); - assert.fail( - "Successfully retrieved status string for invalid status code" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert.strictEqual(e.message, "no such deal state 500"); - } - }); - }); - - describe("Filecoin.ClientStartDeal, Filecoin.ClientListDeals, Ganache.GetDealById, Filecoin.ClientGetDealInfo, and Filecoin.ClientGetDealUpdates", () => { - let ipfs: any; - let currentDeal: DealInfo = new DealInfo({ - dealId: -1 - }); - const dealStatuses: StorageDealStatus[] = []; - const dealDuration = 5; - - before(async () => { - ipfs = getIpfsClient(); - }); - - it("should start listening for deal updates", async () => { - await client.clientGetDealUpdates(update => { - const deal = update.data[1]; - currentDeal = new DealInfo(deal); - dealStatuses.push(currentDeal.state); - }); - }); - - it("should accept a new deal", async () => { - const miners = await client.stateListMiners(); - const accounts = - await provider.blockchain.accountManager?.getControllableAccounts()!; - const address = accounts[0].address; - const beginningBalance = await client.walletBalance(address.value); - - const result = await ipfs.add({ - content: data - }); - const cid = result.path; - - const proposal = new StartDealParams({ - data: new StorageMarketDataRef({ - transferType: "graphsync", - root: new RootCID({ - "/": cid - }), - pieceSize: 0 - }), - wallet: address, - miner: miners[0], - epochPrice: 2500n, - minBlocksDuration: dealDuration - }); - - const proposalCid = await client.clientStartDeal(proposal.serialize()); - - assert.ok(proposalCid["/"]); - assert(CID.isValid(proposalCid["/"])); - - // Test subscription - assert.strictEqual(currentDeal.dealId, 1); - assert.strictEqual(currentDeal.state, StorageDealStatus.Active); - assert.deepStrictEqual(dealStatuses, [ - StorageDealStatus.Validating, - StorageDealStatus.Staged, - StorageDealStatus.ReserveProviderFunds, - StorageDealStatus.ReserveClientFunds, - StorageDealStatus.FundsReserved, - StorageDealStatus.ProviderFunding, - StorageDealStatus.ClientFunding, - StorageDealStatus.Publish, - StorageDealStatus.Publishing, - StorageDealStatus.Transferring, - StorageDealStatus.Sealing, - StorageDealStatus.Active - ]); - - const deals = await client.clientListDeals(); - - assert.strictEqual(deals.length, 1); - - const deal: SerializedDealInfo = deals[0]; - assert.strictEqual(deal.ProposalCid["/"], proposalCid["/"]); - assert.strictEqual(deal.Size, expectedSize); - - const endingBalance = await client.walletBalance(address.value); - - assert(new BN(endingBalance).lt(new BN(beginningBalance))); - }); - - it("retrieves deal using ID", async () => { - const deals = await client.clientListDeals(); - assert.strictEqual(deals.length, 1); - - const deal = await provider.send({ - jsonrpc: "2.0", - id: "0", - method: "Ganache.GetDealById", - params: [deals[0].DealID] - }); - - assert.deepStrictEqual(deal, deals[0]); - }); - - it("fails to retrieve invalid deal using ID", async () => { - try { - await provider.send({ - jsonrpc: "2.0", - id: "0", - method: "Ganache.GetDealById", - params: [1337] - }); - assert.fail("Successfully retrieved a deal for an invalid ID"); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes("Could not find a deal for the provided ID") - ); - } - }); - - it("retrieves deal using CID", async () => { - const deals = await client.clientListDeals(); - assert.strictEqual(deals.length, 1); - - const deal = await client.clientGetDealInfo(deals[0].ProposalCid); - - assert.deepStrictEqual(deal, deals[0]); - }); - - it("fails to retrieve invalid deal using CID", async () => { - try { - const invalidCid = - "bafyreifi6tnqdabvaid7o4qezjpcavkwtibctpfzuarr4erfxjqds52bba"; - await client.clientGetDealInfo({ "/": invalidCid }); - assert.fail("Successfully retrieved a deal for an invalid CID"); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes("Could not find a deal for the provided CID") - ); - } - }); - - it("expires a deal at the given duration", async () => { - let deals = await client.clientListDeals(); - assert.strictEqual(deals.length, 1); - let deal: SerializedDealInfo = deals[0]; - assert.strictEqual(deal.State, StorageDealStatus.Active); - - const priorHead = await client.chainHead(); - let currentHead = await client.chainHead(); - - while ( - deal.State === StorageDealStatus.Active && - currentHead.Height - priorHead.Height <= dealDuration - ) { - await provider.send({ - jsonrpc: "2.0", - id: "0", - method: "Ganache.MineTipset" - }); - - deal = (await client.clientListDeals())[0]; - currentHead = await client.chainHead(); - } - - assert.strictEqual(deal.State, StorageDealStatus.Expired); - assert.strictEqual( - currentHead.Height, - priorHead.Height + dealDuration + 1 - ); // the duration is inclusive, thus the +1 - }); - }); - - describe("Filecoin.ClientFindData, Filecoin.ClientRetrieve, and Filecoin.ClientHasLocal", () => { - let ipfs: any; - let offer: SerializedQueryOffer; - let address: string; - let beginningBalance: string; - - before(async () => { - ipfs = getIpfsClient(); - - address = await client.walletDefaultAddress(); - beginningBalance = await client.walletBalance(address); - }); - - it("should provide a remote offer", async () => { - const expectedMinPrice = `${expectedSize * 2}`; - - const result = await ipfs.add({ - content: data - }); - - const offers = await client.clientFindData({ "/": result.path }); - - assert.strictEqual(offers.length, 1); - - offer = offers[0]; - - assert.ok(offer); - assert.strictEqual(offer.Root["/"], result.path); - assert.strictEqual(offer.Size, expectedSize); - assert.strictEqual(offer.MinPrice, expectedMinPrice); - - const hasLocal = await client.clientHasLocal({ "/": result.path }); - - assert(hasLocal); - }); - - it("should retrieve without error, and subtract balance", async () => { - const order: SerializedRetrievalOrder = { - Root: offer.Root, - Piece: offer.Piece, - Size: offer.Size, - Total: offer.MinPrice, - UnsealPrice: offer.UnsealPrice, - PaymentInterval: offer.PaymentInterval, - PaymentIntervalIncrease: offer.PaymentIntervalIncrease, - Client: address, - Miner: offer.Miner, - MinerPeer: offer.MinerPeer - }; - - const tmpObj = await tmp.dir(); - const file = path.join(tmpObj.path, "content"); - - const fileRef: SerializedFileRef = { - Path: file, - IsCAR: false - }; - - await client.clientRetrieve(order, fileRef); - - const content = await fs.promises.readFile(file, { encoding: "utf-8" }); - assert.strictEqual(content, data); - - // No error? Great, let's make sure it subtracted the retrieval cost. - - const endingBalance = await client.walletBalance(address); - assert(new BN(endingBalance).lt(new BN(beginningBalance))); - }); - - it("errors if we try to retrieve a file our IPFS server doesn't know about", async () => { - const cidIMadeUp = "QmY7Yh4UquoXdL9Fo2XbhXkhBvFoLwmQUfa92pxnxjQuPU"; - - const madeUpOrder: SerializedRetrievalOrder = { - Root: { - "/": cidIMadeUp - }, - Piece: { - "/": cidIMadeUp - }, - Size: 1234, - Total: "2468", - UnsealPrice: "2468", - PaymentInterval: 1048576, - PaymentIntervalIncrease: 1048576, - Client: address, - Miner: Address.fromId(0, false, true).value, - MinerPeer: { - Address: Address.fromId(0, false, true).value, - ID: "0", - PieceCID: { - "/": "6vuxqgevbl6irx7tymbj7o4t8bz1s5vy88zmum7flxywy1qugjfd" - } - } - }; - - const tmpObj = await tmp.dir(); - const file = path.join(tmpObj.path, "content"); - - const fileRef: SerializedFileRef = { - Path: file, - IsCAR: false - }; - - let error: Error | undefined; - - try { - await client.clientRetrieve(madeUpOrder, fileRef); - } catch (e: any) { - error = e; - } - - assert.notStrictEqual( - typeof error, - "undefined", - "Expected ClientRetrieve to throw an error!" - ); - assert(error!.message.indexOf("Object not found") >= 0); - - const hasLocal = await client.clientHasLocal({ "/": cidIMadeUp }); - - assert(!hasLocal); - }); - }); - }); -}); diff --git a/src/chains/filecoin/filecoin/tests/api/filecoin/generic.test.ts b/src/chains/filecoin/filecoin/tests/api/filecoin/generic.test.ts deleted file mode 100644 index c9826e7765..0000000000 --- a/src/chains/filecoin/filecoin/tests/api/filecoin/generic.test.ts +++ /dev/null @@ -1,207 +0,0 @@ -import assert from "assert"; -import { FilecoinProvider } from "../../../src/provider"; -import getProvider from "../../helpers/getProvider"; -import { CID } from "../../../src/things/cid"; -import LotusSchema from "@filecoin-shipyard/lotus-client-schema"; -import GanacheSchema from "../../../src/schema"; -import FilecoinApi from "../../../src/api"; - -const LotusRPC = require("@filecoin-shipyard/lotus-client-rpc").LotusRPC; - -type LotusClient = any; - -describe("api", () => { - describe("filecoin", () => { - let provider: FilecoinProvider; - let client: LotusClient; - - before(async () => { - provider = await getProvider(); - client = new LotusRPC(provider, { schema: FilecoinProvider.Schema }); - }); - - after(async () => { - if (provider) { - await provider.stop(); - } - }); - - describe("General request processing", () => { - it("should return a value over JSON RPC", async () => { - // Note the Filecoin Provider strips the JSON RPC details - // from the response. - const genesis = await provider.send({ - jsonrpc: "2.0", - id: "0", - method: "Filecoin.ChainGetGenesis" - }); - - assert(CID.isValid(genesis["Cids"][0]["/"])); - }); - - it("should return invalid methods for all unimplemented methods", async () => { - const combinedMethods = { - ...LotusSchema.mainnet.fullNode.methods, - ...LotusSchema.mainnet.storageMiner.methods, - ...LotusSchema.mainnet.gatewayApi.methods, - ...LotusSchema.mainnet.walletApi.methods, - ...LotusSchema.mainnet.workerApi.methods - }; - const methods = Object.keys(combinedMethods) - .filter( - method => typeof GanacheSchema.methods[method] === "undefined" - ) - .map(method => `Filecoin.${method}`); - - for (const method of methods) { - try { - await provider.send({ - jsonrpc: "2.0", - id: "0", - method: method as any, - params: [] - }); - } catch (e: any) { - assert.strictEqual( - e.message, - `The method ${method} does not exist/is not available` - ); - continue; - } - - assert.fail(`Unsupported method ${method} was sent successfully`); - } - }); - - it("should only have valid Filecoin.<...> methods", async () => { - const combinedMethods = { - ...LotusSchema.mainnet.fullNode.methods, - ...LotusSchema.mainnet.storageMiner.methods, - ...LotusSchema.mainnet.gatewayApi.methods, - ...LotusSchema.mainnet.walletApi.methods, - ...LotusSchema.mainnet.workerApi.methods - }; - const methods = Object.getOwnPropertyNames(FilecoinApi.prototype) - .filter( - method => method !== "constructor" && method.startsWith("Filecoin.") - ) - .map(method => method.replace("Filecoin.", "")); - - for (const method of methods) { - if (typeof combinedMethods[method] === "undefined") { - assert.fail( - `Filecoin method Filecoin.${method} is implemented, but not part of the official schema` - ); - } - } - }); - }); - - describe("Filecoin.Version", () => { - it("should return a value", async () => { - const versionInfo = await client.version(); - - assert(versionInfo.Version.includes("@ganache/filecoin v")); - - assert.strictEqual(typeof versionInfo.APIVersion, "number"); - assert(versionInfo.APIVersion > 0); - - // should be 0 since we didn't specify in options - assert.strictEqual(versionInfo.BlockDelay, "0"); - }); - }); - - describe("Filecoin.ID", () => { - it("should return a value", async () => { - const id = await client.ID(); - - assert.strictEqual( - id, - "bafzkbzaced47iu7qygeshb3jamzkh2cqcmlxzcpxrnqsj6yoipuidor523jyg" - ); - }); - }); - - describe("Filecoin.ChainGetGenesis", () => { - it("should return a value", async () => { - const genesis = await client.chainGetGenesis(); - assert(CID.isValid(genesis["Cids"][0]["/"])); - }); - }); - - describe("Filecoin.ChainHead", () => { - it("should return a serialized tipset with blocks", async () => { - const head = await client.chainHead(); - assert.strictEqual(head.Height, 0); - assert(head.Blocks.length > 0); - assert.strictEqual(head.Blocks[0].Height, head.Height); - }); - }); - - describe("Filecoin.ChainGetTipSet", () => { - it("should return a serialized tipset with blocks", async () => { - const head = await client.chainHead(); - const tipset = await client.chainGetTipSet(head.Cids); - assert.strictEqual(tipset.Height, head.Height); - assert(tipset.Blocks.length === head.Blocks.length); - assert.strictEqual(tipset.Blocks[0].Height, tipset.Height); - }); - }); - - describe("Filecoin.ChainGetTipSetByHeight", () => { - it("should return a tipset with blocks using only the height", async () => { - const tipset = await client.chainGetTipSetByHeight(0); - assert.strictEqual(tipset.Height, 0); - assert(tipset.Blocks.length > 0); - assert.strictEqual(tipset.Blocks[0].Height, tipset.Height); - }); - - it("should return a tipset with blocks using both height and tipset key", async () => { - const head = await client.chainHead(); - const tipset = await client.chainGetTipSetByHeight(0, head.Cids); - assert.strictEqual(tipset.Height, 0); - assert(tipset.Blocks.length > 0); - assert.strictEqual(tipset.Blocks[0].Height, tipset.Height); - }); - - it("should fail to retrieve a tipset if the height is larger than the tipset key's height", async () => { - await provider.send({ - jsonrpc: "2.0", - id: "0", - method: "Ganache.MineTipset" - }); - - const genesisTipset = await client.chainGetGenesis(); - const head = await client.chainHead(); - - assert(head.Height > genesisTipset.Height); - - try { - await client.chainGetTipSetByHeight(head.Height, genesisTipset.Cids); - assert.fail( - "Successfully received tipset with incorrect tipset key/height" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes( - "looking for tipset with height greater than start point" - ), - e.message - ); - } - }); - }); - - describe("Filecoin.ChainGetBlock", () => { - it("should retrieve a block directly by CID", async () => { - const tipset = await client.chainHead(); - await new Promise(resolve => setTimeout(resolve, 1000)); - const block = await client.chainGetBlock(tipset.Cids[0]); - assert.deepStrictEqual(block, tipset.Blocks[0]); - }); - }); - }); -}); diff --git a/src/chains/filecoin/filecoin/tests/api/filecoin/messages.test.ts b/src/chains/filecoin/filecoin/tests/api/filecoin/messages.test.ts deleted file mode 100644 index 82943cbffd..0000000000 --- a/src/chains/filecoin/filecoin/tests/api/filecoin/messages.test.ts +++ /dev/null @@ -1,1665 +0,0 @@ -import assert from "assert"; -import { FilecoinProvider } from "../../../src/provider"; -import getProvider from "../../helpers/getProvider"; -import { Address, AddressProtocol } from "../../../src/things/address"; -import { Message, SerializedMessage } from "../../../src/things/message"; -import { Account } from "../../../src/things/account"; -import { SerializedMessageSendSpec } from "../../../src/things/message-send-spec"; -import { - SerializedSignedMessage, - SignedMessage -} from "../../../src/things/signed-message"; -import { SerializedBlockHeader } from "../../../src/things/block-header"; -import { Balance } from "../../../src/things/balance"; -import { Signature } from "../../../src/things/signature"; -import { SigType } from "../../../src/things/sig-type"; -import { RandomNumberGenerator } from "@ganache/utils"; - -const LotusRPC = require("@filecoin-shipyard/lotus-client-rpc").LotusRPC; - -type LotusClient = any; - -describe("api", () => { - describe("filecoin", () => { - let provider: FilecoinProvider; - let client: LotusClient; - let accounts: Account[]; - let expectedHeight = 0; - - before(async () => { - provider = await getProvider(); - client = new LotusRPC(provider, { schema: FilecoinProvider.Schema }); - accounts = - await provider.blockchain.accountManager!.getControllableAccounts(); - }); - - after(async () => { - await provider.stop(); - }); - - const waitForExpectedHeight = async () => { - // give some time for it to finish mining any/all blocks - await new Promise(resolve => setTimeout(resolve, 300)); - const newHead: SerializedBlockHeader = await client.chainHead(); - assert.strictEqual(newHead.Height, expectedHeight); - }; - - describe("Filecoin.MpoolPushMessage and Filecoin.MpoolGetNonce", () => { - afterEach(async () => { - // we need to make sure any mining has finished from a prior test - // to not affect the next test - await waitForExpectedHeight(); - }); - - it("should transfer funds", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - const message: SerializedMessage = { - Version: 0, - From, - To, - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - const priorFromBalance: string = await client.walletBalance(From); - const priorToBalance: string = await client.walletBalance(To); - const signedMessage: SerializedSignedMessage = - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; - assert.ok(signedMessage); - await waitForExpectedHeight(); - - const newFromBalance: string = await client.walletBalance(From); - const newToBalance: string = await client.walletBalance(To); - const minerFee = - BigInt(signedMessage.Message.GasLimit) * - BigInt(signedMessage.Message.GasPremium); - assert.notStrictEqual(minerFee.toString(), "0"); // gas should be auto generated - - // we have to compare as strings rather than bigints due to a bug - // in mocha: https://git.io/JtE8r; pending PR: https://git.io/JtE8o - assert.strictEqual( - BigInt(newFromBalance).toString(), - ( - BigInt(priorFromBalance) - - BigInt(message.Value) - - minerFee - ).toString() - ); - assert.strictEqual( - BigInt(newToBalance).toString(), - (BigInt(priorToBalance) + BigInt(message.Value)).toString() - ); - }); - - it("should get the correct nonce with no pending blocks", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - // do this test twice to ensure nonces are incrementing - for (let i = 0; i < 2; i++) { - const priorFromNonce = await client.mpoolGetNonce(From); - const priorToNonce = await client.mpoolGetNonce(To); - - const message: SerializedMessage = { - Version: 0, - From, - To, - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - const signedMessage: SerializedSignedMessage = - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; - - assert.strictEqual(signedMessage.Message.Nonce, priorFromNonce); - - await waitForExpectedHeight(); - - const newFromNonce = await client.mpoolGetNonce(From); - const newToNonce = await client.mpoolGetNonce(To); - - assert.strictEqual(newFromNonce, priorFromNonce + 1); - assert.strictEqual(newToNonce, priorToNonce); - } - }); - - it("should reject transfer message if there aren't enough funds", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const balance: string = await client.walletBalance(From); - const value = BigInt(balance) * 2n; - - const message: SerializedMessage = { - Version: 0, - To, - From, - Nonce: 0, - Value: value.toString(), - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail("Successfully sent message without enough funds"); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert(e.message.includes("mpool push: not enough funds"), e.message); - } - }); - - it("should reject transfer message if there aren't enough funds due to gas fees", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const balance: string = await client.walletBalance(From); - - const message: SerializedMessage = { - Version: 0, - To, - From, - Nonce: 0, - Value: balance, - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail("Successfully sent message without enough funds"); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert(e.message.includes("mpool push: not enough funds"), e.message); - } - }); - - it("should reject unsigned transfer message if a non-zero nonce is provided", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const message: SerializedMessage = { - Version: 0, - To, - From, - Nonce: 1, - Value: "1", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail("Successfully sent unsigned message with non-zero nonce"); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes( - "MpoolPushMessage expects message nonce to be 0" - ), - e.message - ); - } - }); - - it("should reject transfer message for non-zero (transfer) methods", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const message: SerializedMessage = { - Version: 0, - To, - From, - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 1, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent unsigned message with non-zero method" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert.strictEqual( - e.message, - "Unsupported Method (1); only value transfers (Method: 0) are supported in Ganache." - ); - } - }); - - it("should reject transfer message for sending it from an uncontrolled address", async () => { - const address = Address.random(); - const randomAddress = address.value; - const ourAddress = accounts[0].address.value; - - // first let's fund the address we'll want to try to send from - let message: SerializedMessage = { - Version: 0, - To: randomAddress, - From: ourAddress, - Nonce: 0, - Value: Balance.FILToLowestDenomination(1).toString(), - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; - await waitForExpectedHeight(); - - // now let's try to send funds from the address we don't control - message = { - Version: 0, - To: ourAddress, - From: randomAddress, - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent unsigned message with an account we don't have the private key for" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes("Could not sign message with address"), - e.message - ); - } - }); - - it("should reject an unsigned message with the wrong version", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const message: SerializedMessage = { - Version: 1, - From, - To, - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent an unsigned message with the wrong version" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert(e.message.includes("'Version' unsupported"), e.message); - } - }); - - it("should reject an unsigned message with an empty To field", async () => { - const From = accounts[0].address.value; - - const message: SerializedMessage = { - Version: 0, - From, - To: "", - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent an unsigned message with an empty To field" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes( - "The To address is an invalid protocol; please use a BLS or SECP256K1 address." - ), - e.message - ); - } - }); - - it("should reject an unsigned message with an empty From field", async () => { - const To = accounts[1].address.value; - - const message: SerializedMessage = { - Version: 0, - From: "", - To, - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent an unsigned message with an empty From field" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes( - "The From address is an invalid protocol; please use a BLS or SECP256K1 address." - ), - e.message - ); - } - }); - - it("should reject an unsigned message with an empty To field", async () => { - const From = accounts[0].address.value; - - const message: SerializedMessage = { - Version: 0, - From, - To: "t3yaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaby2smx7a", - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent an unsigned message with the To field being the zero address" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert(e.message.includes("invalid 'To' address"), e.message); - } - }); - - it("should reject an unsigned message with a negative Value", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const message: SerializedMessage = { - Version: 0, - From, - To, - Nonce: 0, - Value: "-1", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent an unsigned message with a negative Value" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes("'Value' field cannot be negative"), - e.message - ); - } - }); - - it("should reject an unsigned message with a value greater than the total filecoin supply", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const message: SerializedMessage = { - Version: 0, - From, - To, - Nonce: 0, - Value: Balance.FILToLowestDenomination(2000000001).toString(), - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent an unsigned message with a value greater than the total filecoin supply" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert(e.message.includes("mpool push: not enough funds"), e.message); - } - }); - - it("should reject an unsigned message with a negative GasFeeCap", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const message: SerializedMessage = { - Version: 0, - From, - To, - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "-1", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent an unsigned message with a negative GasFeeCap" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes("'GasFeeCap' field cannot be negative"), - e.message - ); - } - }); - - it("should reject an unsigned message with a negative GasPremium", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const message: SerializedMessage = { - Version: 0, - From, - To, - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "1", - GasPremium: "-1", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent an unsigned message with a negative GasPremium" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes("'GasPremium' field cannot be negative"), - e.message - ); - } - }); - - it("should reject an unsigned message with a GasPremium > GasFeeCap", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const message: SerializedMessage = { - Version: 0, - From, - To, - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "1000", - GasPremium: "1001", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent an unsigned message with a GasPremium > GasFeeCap" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes("'GasFeeCap' less than 'GasPremium'"), - e.message - ); - } - }); - - it("should reject an unsigned message with a GasLimit > BlockGasLimit", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const message: SerializedMessage = { - Version: 0, - From, - To, - Nonce: 0, - Value: "1", - GasLimit: 10000000001, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent an unsigned message with a GasLimit > BlockGasLimit" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes( - "'GasLimit' field cannot be greater than a block's gas limit" - ), - e.message - ); - } - }); - - it("should reject an unsigned message with a GasLimit < minGas", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const message: SerializedMessage = { - Version: 0, - From, - To, - Nonce: 0, - Value: "1", - GasLimit: -1, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - try { - await client.mpoolPushMessage(message, messageSendSpec); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent an unsigned message with a GasLimit < minGas" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes( - "'GasLimit' field cannot be less than the cost of storing a message on chain" - ), - e.message - ); - } - }); - }); - - describe("Filecoin.MpoolPush", () => { - afterEach(async () => { - // we need to make sure any mining has finished from a prior test - // to not affect the next test - await waitForExpectedHeight(); - }); - - it("should accept a properly signed (with BLS address) transfer message", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const nonce = await client.mpoolGetNonce(From); - - const message = new Message({ - Version: 0, - To, - From, - Nonce: nonce, - Value: "1", - GasLimit: 520000, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }); - - const signature = await accounts[0].address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - - const result = await client.mpoolPush(signedMessage); - expectedHeight++; // if we succeeded to send, this will get mined - assert.ok(result); - }); - - it("should accept a properly signed (with SECP256K1 address) transfer message", async () => { - const originalAddress = accounts[0].address.value; - const secpAddress = Address.random( - new RandomNumberGenerator(), - AddressProtocol.SECP256K1 - ); - - const nonce = await client.mpoolGetNonce(originalAddress); - - // Let's give the new address some funds - const message = new Message({ - Version: 0, - To: secpAddress.value, - From: originalAddress, - Nonce: nonce, - Value: Balance.FILToLowestDenomination(1).toString(), - GasLimit: 520000, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }); - - const signature = await accounts[0].address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - - const result = await client.mpoolPush(signedMessage); - expectedHeight++; // if we succeeded to send, this will get mined - assert.ok(result); - - await waitForExpectedHeight(); - - // Now let's send something from the new SECP256K1 address - const message2 = new Message({ - Version: 0, - To: originalAddress, - From: secpAddress.value, - Nonce: nonce, - Value: "1", - GasLimit: 520000, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }); - - const signature2 = await secpAddress.signMessage(message2); - - const signedMessage2 = new SignedMessage({ - message: message2, - signature: new Signature({ - type: SigType.SigTypeSecp256k1, - data: signature2 - }) - }); - - const result2 = await client.mpoolPush(signedMessage2); - expectedHeight++; - assert.ok(result2); - }); - - it("should reject a signed transfer message with the wrong signature", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const nonce = await client.mpoolGetNonce(From); - - const message = new Message({ - Version: 0, - To, - From, - Nonce: nonce, - Value: "1", - GasLimit: 520000, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }); - - const signature = await accounts[1].address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - - try { - await client.mpoolPush(signedMessage); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent a signed message with the wrong signature" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes("bls signature failed to verify"), - e.message - ); - } - }); - - it("should reject a signed message with the wrong version", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const nonce = await client.mpoolGetNonce(From); - - const message = new Message({ - Version: 1, - To, - From, - Nonce: nonce, - Value: "1", - GasLimit: 520000, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }); - - const signature = await accounts[0].address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - - try { - await client.mpoolPush(signedMessage); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent a signed message with the wrong version" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert(e.message.includes("'Version' unsupported"), e.message); - } - }); - - it("should reject a signed message with an empty To field", async () => { - const From = accounts[0].address.value; - - const nonce = await client.mpoolGetNonce(From); - - const message = new Message({ - Version: 0, - To: "", - From, - Nonce: nonce, - Value: "1", - GasLimit: 520000, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }); - - const signature = await accounts[0].address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - - try { - await client.mpoolPush(signedMessage); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent a signed message with an empty To field" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert(e.message.includes("'To' address cannot be empty"), e.message); - } - }); - - it("should reject a signed message with an empty From field", async () => { - const To = accounts[1].address.value; - - const message = new Message({ - Version: 0, - To, - From: "", - Nonce: 0, - Value: "1", - GasLimit: 520000, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }); - - const signature = await accounts[0].address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - - try { - await client.mpoolPush(signedMessage); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent a signed message with an empty To field" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes("'From' address cannot be empty"), - e.message - ); - } - }); - - it("should reject a signed message with the To field being the zero address", async () => { - const From = accounts[0].address.value; - - const nonce = await client.mpoolGetNonce(From); - - const message = new Message({ - Version: 0, - To: "t3yaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaby2smx7a", - From, - Nonce: nonce, - Value: "1", - GasLimit: 520000, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }); - - const signature = await accounts[0].address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - - try { - await client.mpoolPush(signedMessage); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent a signed message with the To field being the zero address" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert(e.message.includes("invalid 'To' address"), e.message); - } - }); - - it("should reject a signed message with a negative Value", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const nonce = await client.mpoolGetNonce(From); - - const message = new Message({ - Version: 0, - To, - From, - Nonce: nonce, - Value: "-1", - GasLimit: 520000, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }); - - const signature = await accounts[0].address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - - try { - await client.mpoolPush(signedMessage); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent a signed message with a negative Value" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes("'Value' field cannot be negative"), - e.message - ); - } - }); - - it("should reject a signed message with a value greater than the total filecoin supply", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const nonce = await client.mpoolGetNonce(From); - - const message = new Message({ - Version: 0, - To, - From, - Nonce: nonce, - Value: Balance.FILToLowestDenomination(2000000001).toString(), - GasLimit: 520000, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }); - - const signature = await accounts[0].address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - - try { - await client.mpoolPush(signedMessage); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent a signed message with a value greater than the total filecoin supply" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes( - "'Value' field cannot be greater than total filecoin supply" - ), - e.message - ); - } - }); - - it("should reject a signed message with a negative GasFeeCap", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const nonce = await client.mpoolGetNonce(From); - - const message = new Message({ - Version: 0, - To, - From, - Nonce: nonce, - Value: "1", - GasLimit: 520000, - GasFeeCap: "-1", - GasPremium: "1000", - Method: 0, - Params: "" - }); - - const signature = await accounts[0].address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - - try { - await client.mpoolPush(signedMessage); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent a signed message with a negative GasFeeCap" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes("'GasFeeCap' field cannot be negative"), - e.message - ); - } - }); - - it("should reject a signed message with a negative GasPremium", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const nonce = await client.mpoolGetNonce(From); - - const message = new Message({ - Version: 0, - To, - From, - Nonce: nonce, - Value: "1", - GasLimit: 520000, - GasFeeCap: "1000", - GasPremium: "-1", - Method: 0, - Params: "" - }); - - const signature = await accounts[0].address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - - try { - await client.mpoolPush(signedMessage); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent a signed message with a negative GasPremium" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes("'GasPremium' field cannot be negative"), - e.message - ); - } - }); - - it("should reject a signed message with a GasPremium > GasFeeCap", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const nonce = await client.mpoolGetNonce(From); - - const message = new Message({ - Version: 0, - To, - From, - Nonce: nonce, - Value: "1", - GasLimit: 520000, - GasFeeCap: "1000", - GasPremium: "1001", - Method: 0, - Params: "" - }); - - const signature = await accounts[0].address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - - try { - await client.mpoolPush(signedMessage); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent a signed message with a GasPremium > GasFeeCap" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes("'GasFeeCap' less than 'GasPremium'"), - e.message - ); - } - }); - - it("should reject a signed message with a GasLimit > BlockGasLimit", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const nonce = await client.mpoolGetNonce(From); - - const message = new Message({ - Version: 0, - To, - From, - Nonce: nonce, - Value: "1", - GasLimit: 10000000001, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }); - - const signature = await accounts[0].address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - - try { - await client.mpoolPush(signedMessage); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent a signed message with a GasLimit > BlockGasLimit" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes( - "'GasLimit' field cannot be greater than a block's gas limit" - ), - e.message - ); - } - }); - - it("should reject a signed message with a GasLimit < minGas", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const nonce = await client.mpoolGetNonce(From); - - const message = new Message({ - Version: 0, - To, - From, - Nonce: nonce, - Value: "1", - GasLimit: -1, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }); - - const signature = await accounts[0].address.signMessage(message); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - - try { - await client.mpoolPush(signedMessage); - expectedHeight++; // if we succeeded to send, this will get mined - assert.fail( - "Successfully sent a signed message with a GasLimit < minGas" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes( - "'GasLimit' field cannot be less than the cost of storing a message on chain" - ), - e.message - ); - } - }); - }); - - describe("Filecoin.MpoolBatchPushMessage", () => { - afterEach(async () => { - // we need to make sure any mining has finished from a prior test - // to not affect the next test - await waitForExpectedHeight(); - }); - - it("should transfer funds with two messages in one batch", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - const message: SerializedMessage = { - Version: 0, - From, - To, - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - const priorFromBalance: string = await client.walletBalance(From); - const priorToBalance: string = await client.walletBalance(To); - const signedMessages: SerializedSignedMessage[] = - await client.mpoolBatchPushMessage( - [message, message], - messageSendSpec - ); - expectedHeight += 2; // theres a block per transaction - assert.ok(signedMessages); - await waitForExpectedHeight(); - - const newFromBalance: string = await client.walletBalance(From); - const newToBalance: string = await client.walletBalance(To); - const minerFee = - BigInt(signedMessages[0].Message.GasLimit) * - BigInt(signedMessages[0].Message.GasPremium) + - BigInt(signedMessages[1].Message.GasLimit) * - BigInt(signedMessages[1].Message.GasPremium); - assert.notStrictEqual(minerFee.toString(), "0"); // gas should be auto generated - - // we have to compare as strings rather than bigints due to a bug - // in mocha: https://git.io/JtE8r; pending PR: https://git.io/JtE8o - assert.strictEqual( - BigInt(newFromBalance).toString(), - ( - BigInt(priorFromBalance) - - BigInt(message.Value) * 2n - - minerFee - ).toString() - ); - assert.strictEqual( - BigInt(newToBalance).toString(), - (BigInt(priorToBalance) + BigInt(message.Value) * 2n).toString() - ); - }); - }); - - describe("Filecoin.MpoolBatchPush", () => { - afterEach(async () => { - // we need to make sure any mining has finished from a prior test - // to not affect the next test - await waitForExpectedHeight(); - }); - - it("should accept two properly signed (with BLS address) transfer messages in batch", async () => { - const From = accounts[0].address.value; - const To = accounts[1].address.value; - - const nonce = await client.mpoolGetNonce(From); - - const message = new Message({ - Version: 0, - To, - From, - Nonce: nonce, - Value: "1", - GasLimit: 520000, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }); - const message2 = new Message({ - Version: 0, - To, - From, - Nonce: nonce + 1, - Value: "1", - GasLimit: 520000, - GasFeeCap: "1000", - GasPremium: "1000", - Method: 0, - Params: "" - }); - - const signature = await accounts[0].address.signMessage(message); - const signature2 = await accounts[0].address.signMessage(message2); - - const signedMessage = new SignedMessage({ - message, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature - }) - }); - const signedMessage2 = new SignedMessage({ - message: message2, - signature: new Signature({ - type: SigType.SigTypeBLS, - data: signature2 - }) - }); - - const result = await client.mpoolBatchPush([ - signedMessage, - signedMessage2 - ]); - expectedHeight += 2; // theres a block per transaction - assert.ok(result); - }); - }); - - describe("Message Pool Control Functions", () => { - let provider2: FilecoinProvider; - let client2: LotusClient; - let accounts2: Account[]; - let expectedHeight2 = 0; - - before(async () => { - provider2 = await getProvider({ - chain: { - ipfsPort: 5003 - }, - miner: { - mine: false - } - }); - client2 = new LotusRPC(provider2, { schema: FilecoinProvider.Schema }); - accounts2 = - await provider2.blockchain.accountManager!.getControllableAccounts(); - }); - - after(async () => { - await provider2.stop(); - }); - - const waitForExpectedHeight2 = async () => { - // give some time for it to finish mining any/all blocks - await new Promise(resolve => setTimeout(resolve, 100)); - const newHead: SerializedBlockHeader = await client2.chainHead(); - assert.strictEqual(newHead.Height, expectedHeight2); - }; - - afterEach(async () => { - // we need to make sure any mining has finished from a prior test - // to not affect the next test - await waitForExpectedHeight2(); - }); - - it("adds and checks messages to the message pool", async () => { - const From = accounts2[0].address.value; - const To = accounts2[1].address.value; - const message: SerializedMessage = { - Version: 0, - From, - To, - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - - const signedMessage1: SerializedSignedMessage = - await client2.mpoolPushMessage(message, messageSendSpec); - const signedMessage2: SerializedSignedMessage = - await client2.mpoolPushMessage(message, messageSendSpec); - - const pendingMessages: SerializedSignedMessage[] = - await client2.mpoolPending(); - - assert.strictEqual(pendingMessages.length, 2); - assert.deepStrictEqual(pendingMessages[0], signedMessage1); - assert.deepStrictEqual(pendingMessages[1], signedMessage2); - - const selectMessages = await client2.mpoolSelect(); - - assert.deepStrictEqual(selectMessages, pendingMessages); - }); - - it("clears messages from the message pool", async () => { - // This should not clear local messages (all of them are local currently) - await client2.mpoolClear(false); - const localPendingMessages: SerializedSignedMessage[] = - await client2.mpoolPending(); - assert.strictEqual(localPendingMessages.length, 2); - - // This should clear all messages - await client2.mpoolClear(true); - const allPendingMessages: SerializedSignedMessage[] = - await client2.mpoolPending(); - assert.strictEqual(allPendingMessages.length, 0); - - // make sure we didn't mine a block which would cause the pool to clear - const head: SerializedBlockHeader = await client2.chainHead(); - assert.strictEqual(head.Height, 0); - }); - }); - - describe("Filecoin.ChainGetBlockMessages", () => { - it("should get the block messages for a block cid", async () => { - const tipset = await client.chainHead(); - const blockMessages = await client.chainGetBlockMessages( - tipset.Cids[0] - ); - assert.strictEqual(blockMessages.Cids.length, 1); - assert.strictEqual(blockMessages.BlsMessages.length, 1); - }); - }); - - describe("Filecoin.ChainGetMessage", () => { - it("should get a message directly from a message cid", async () => { - const tipset = await client.chainHead(); - const blockMessages = await client.chainGetBlockMessages( - tipset.Cids[0] - ); - const message = await client.chainGetMessage(blockMessages.Cids[0]); - assert.deepStrictEqual(message, blockMessages.BlsMessages[0]); - }); - }); - }); -}); diff --git a/src/chains/filecoin/filecoin/tests/api/filecoin/miners.test.ts b/src/chains/filecoin/filecoin/tests/api/filecoin/miners.test.ts deleted file mode 100644 index 860ffa41ea..0000000000 --- a/src/chains/filecoin/filecoin/tests/api/filecoin/miners.test.ts +++ /dev/null @@ -1,94 +0,0 @@ -import assert from "assert"; -import { FilecoinProvider } from "../../../src/provider"; -import { Address } from "../../../src/things/address"; -import getProvider from "../../helpers/getProvider"; - -const LotusRPC = require("@filecoin-shipyard/lotus-client-rpc").LotusRPC; - -type LotusClient = any; - -describe("api", () => { - describe("filecoin", () => { - let provider: FilecoinProvider; - let client: LotusClient; - const minerAddress = Address.fromId(0, false, true); - - before(async () => { - provider = await getProvider(); - client = new LotusRPC(provider, { schema: FilecoinProvider.Schema }); - }); - - after(async () => { - if (provider) { - await provider.stop(); - } - }); - - describe("Filecoin.StateListMiners", () => { - it("should return a single miner", async () => { - const miners = await client.stateListMiners(); - assert.strictEqual(miners.length, 1); - assert.strictEqual(miners[0], minerAddress.value); - }); - }); - - describe("Filecoin.StateMinerPower", () => { - it("should returns a nonzero power for the default miner", async () => { - const minerPower = await client.stateMinerPower(minerAddress.value); - - // current implementation uses the default for both of these - assert.deepStrictEqual(minerPower.MinerPower, minerPower.TotalPower); - assert.strictEqual(minerPower.MinerPower.RawBytePower, "1"); - assert.strictEqual(minerPower.MinerPower.QualityAdjPower, "0"); - assert.strictEqual(minerPower.HasMinPower, false); - }); - - it("should returns a zero power for other miners", async () => { - const minerPower = await client.stateMinerPower( - Address.fromId(1, false, true).value - ); - - // current implementation uses the default for both of these - assert.deepStrictEqual(minerPower.MinerPower, minerPower.TotalPower); - assert.strictEqual(minerPower.MinerPower.RawBytePower, "0"); - assert.strictEqual(minerPower.MinerPower.QualityAdjPower, "0"); - assert.strictEqual(minerPower.HasMinPower, false); - }); - }); - - describe("Filecoin.StateMinerInfo", () => { - it("should return the miner info for the default miner", async () => { - const minerInfo = await client.stateMinerInfo(minerAddress.value); - - assert.strictEqual(minerInfo.Owner, minerAddress.value); - assert.strictEqual(minerInfo.Worker, minerAddress.value); - assert.strictEqual(minerInfo.WorkerChangeEpoch, -1); - assert.strictEqual(minerInfo.SectorSize, 2048); - assert.strictEqual(minerInfo.ConsensusFaultElapsed, -1); - }); - - it("should fail to retrieve miner info for other miners", async () => { - try { - const otherMiner = Address.fromId(1, false, true); - const minerInfo = await client.stateMinerInfo(otherMiner.value); - assert.fail( - `Should not have retrieved a miner info for miner ${otherMiner.value}, but receive: ${minerInfo}` - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - return; - } - }); - }); - - describe("Filecoin.ActorAddress", () => { - it("should return the miner info for the default miner", async () => { - const minerActorAddress = await client.actorAddress(); - - assert.strictEqual(minerActorAddress, minerAddress.value); - }); - }); - }); -}); diff --git a/src/chains/filecoin/filecoin/tests/api/filecoin/subscriptions-ws.test.ts b/src/chains/filecoin/filecoin/tests/api/filecoin/subscriptions-ws.test.ts deleted file mode 100644 index 0b5959cd1a..0000000000 --- a/src/chains/filecoin/filecoin/tests/api/filecoin/subscriptions-ws.test.ts +++ /dev/null @@ -1,167 +0,0 @@ -import assert from "assert"; -import { SubscriptionMethod } from "../../../src/types/subscriptions"; -import getServer from "../../helpers/getServer"; -import WebSocket from "ws"; -import Server from "../../../../../../packages/core/src/server"; -import type FilecoinFlavor from "../../../"; - -describe("api", () => { - describe("filecoin", () => { - let server: Server; - let ws: WebSocket; - const port = 7778; // Use a different port than the default, to test it works - - before(async () => { - server = await getServer(port); - ws = new WebSocket(`ws://localhost:${port}/rpc/v0`); - - await new Promise((resolve, reject) => { - const id = setTimeout(async () => { - await server.close(); - ws.terminate(); - reject("Could not connect to the websocket server"); - }, 2000); - - ws.on("open", () => { - clearTimeout(id); - resolve(); - }); - }); - }); - - after(async () => { - if (ws) { - ws.close(); - } - if (server) { - await server.close(); - } - }); - - it("should subscribe and unsubscribe properly with websockets", async () => { - let numTipsetsReceived = 0; - const chainNotifyId = "1337"; // using something non-zero to ensure functionality - let receivedMessage = false; - let receivedSubscriptionCanceled = false; - let channelId: any; - - ws.on("message", message => { - const response = JSON.parse(message.toString()); - - if (response.result) { - switch (response.id) { - case chainNotifyId: - channelId = response.result; - receivedMessage = true; - break; - case "0": - receivedMessage = true; - assert.strictEqual(response.result.Height, 1); - break; - case "1": - receivedMessage = true; - assert.strictEqual(response.result.Height, 2); - break; - case "2": - receivedMessage = true; - assert.strictEqual(response.result.Height, 3); - break; - case "3": - receivedMessage = true; - assert.strictEqual(response.result.Height, 4); - break; - case "4": - receivedMessage = true; - assert.strictEqual(response.result.Height, 5); - break; - case "5": - receivedMessage = true; - assert.strictEqual(response.result, true); - break; - } - } else if (response.method) { - if (response.method === SubscriptionMethod.SubscriptionCanceled) { - assert.strictEqual(response.params[0], chainNotifyId); - receivedSubscriptionCanceled = true; - } else if (response.method === SubscriptionMethod.ChannelUpdated) { - assert.strictEqual(response.params[0], channelId); - assert.strictEqual(response.params[1].length, 1); // should only have one tipset per headchange - assert.strictEqual( - response.params[1][0].Val.Height, - ++numTipsetsReceived - ); - } - } - }); - - ws.send( - JSON.stringify({ - jsonrpc: "2.0", - id: chainNotifyId, - method: "Filecoin.ChainNotify", - params: [] - }) - ); - - for (let i = 0; i < 100; i++) { - if (receivedMessage) { - break; - } - - await new Promise(resolve => setTimeout(resolve, 50)); - } - - if (!receivedMessage) { - assert.fail("Did not receive response for ChainNotify"); - } - - for (let i = 0; i < 5; i++) { - receivedMessage = false; - ws.send( - JSON.stringify({ - jsonrpc: "2.0", - id: `${i}`, - method: "Ganache.MineTipset", - params: [] - }) - ); - - for (let j = 0; j < 100; j++) { - if (receivedMessage) { - break; - } - - await new Promise(resolve => setTimeout(resolve, 50)); - } - - if (!receivedMessage) { - assert.fail(`Did not receive response for Ganache.MineTipset #${i}`); - } - } - - receivedMessage = false; - ws.send( - JSON.stringify({ - jsonrpc: "2.0", - id: "5", - method: SubscriptionMethod.ChannelClosed, - params: [channelId] - }) - ); - - for (let i = 0; i < 100; i++) { - if (receivedSubscriptionCanceled) { - break; - } - - await new Promise(resolve => setTimeout(resolve, 50)); - } - - if (!receivedSubscriptionCanceled) { - assert.fail( - `Did not receive ${SubscriptionMethod.SubscriptionCanceled} after closing channel/subscription` - ); - } - }); - }).timeout(10000); -}); diff --git a/src/chains/filecoin/filecoin/tests/api/filecoin/subscriptions.test.ts b/src/chains/filecoin/filecoin/tests/api/filecoin/subscriptions.test.ts deleted file mode 100644 index 8af9c78733..0000000000 --- a/src/chains/filecoin/filecoin/tests/api/filecoin/subscriptions.test.ts +++ /dev/null @@ -1,99 +0,0 @@ -import assert from "assert"; -import Emittery from "emittery"; -import { FilecoinProvider } from "../../../src/provider"; -import { SubscriptionMethod } from "../../../src/types/subscriptions"; -import getProvider from "../../helpers/getProvider"; - -const LotusRPC = require("@filecoin-shipyard/lotus-client-rpc").LotusRPC; - -type LotusClient = any; - -describe("api", () => { - describe("filecoin", () => { - let provider: FilecoinProvider; - let client: LotusClient; - - before(async () => { - provider = await getProvider(); - client = new LotusRPC(provider, { schema: FilecoinProvider.Schema }); - }); - - after(async () => { - if (provider) { - await provider.stop(); - } - }); - - describe("Filecoin.ChainNotify", () => { - let unsubscribe: Emittery.UnsubscribeFn; - let numTipsetsReceived = 0; - - it("should receive updates for new tipsets", async () => { - const subscription = await client.chainNotify((_changes: any) => { - numTipsetsReceived++; - }); - - unsubscribe = subscription[0]; - - for (let i = 0; i < 5; i++) { - await provider.send({ - jsonrpc: "2.0", - id: "0", - method: "Ganache.MineTipset" - }); - } - - assert.strictEqual(numTipsetsReceived, 5); - }); - - it("should cancel subscription via unsubscribe function", async () => { - unsubscribe(); - - await provider.send({ - jsonrpc: "2.0", - id: "0", - method: "Ganache.MineTipset" - }); - - assert.strictEqual(numTipsetsReceived, 5); - }); - - it("should cancel subscription via RPC method", async () => { - numTipsetsReceived = 0; - - const subscription = await client.chainNotify((_changes: any) => { - numTipsetsReceived++; - }); - - const subscriptionId: string = await subscription[1]; - - for (let i = 0; i < 5; i++) { - await provider.send({ - jsonrpc: "2.0", - id: `${i}`, - method: "Ganache.MineTipset" - }); - } - - assert.strictEqual(numTipsetsReceived, 5); - - const success = await provider.send({ - jsonrpc: "2.0", - id: "6", - method: SubscriptionMethod.ChannelClosed, - params: [subscriptionId] - }); - - assert.strictEqual(success, true); - - await provider.send({ - jsonrpc: "2.0", - id: `7`, - method: "Ganache.MineTipset" - }); - - assert.strictEqual(numTipsetsReceived, 5); - }); - }); - }); -}); diff --git a/src/chains/filecoin/filecoin/tests/api/filecoin/wallet.test.ts b/src/chains/filecoin/filecoin/tests/api/filecoin/wallet.test.ts deleted file mode 100644 index 3c705eec60..0000000000 --- a/src/chains/filecoin/filecoin/tests/api/filecoin/wallet.test.ts +++ /dev/null @@ -1,380 +0,0 @@ -import assert from "assert"; -import { FilecoinProvider } from "../../../src/provider"; -import getProvider from "../../helpers/getProvider"; -import { Address, AddressProtocol } from "../../../src/things/address"; -import { KeyType } from "../../../src/things/key-type"; -import { SerializedKeyInfo } from "../../../src/things/key-info"; -import { SigType } from "../../../src/things/sig-type"; -import { RandomNumberGenerator } from "@ganache/utils"; -import { Message, SerializedMessage } from "../../../src/things/message"; -import { SerializedSignature } from "../../../src/things/signature"; -import { SerializedSignedMessage } from "../../../src/things/signed-message"; - -const LotusRPC = require("@filecoin-shipyard/lotus-client-rpc").LotusRPC; - -type LotusClient = any; - -describe("api", () => { - describe("filecoin", () => { - let provider: FilecoinProvider; - let client: LotusClient; - let walletAddresses: string[]; - - before(async () => { - provider = await getProvider(); - client = new LotusRPC(provider, { schema: FilecoinProvider.Schema }); - }); - - after(async () => { - if (provider) { - await provider.stop(); - } - }); - - describe("Filecoin.WalletList", () => { - it("should return an array of controlled addresses", async () => { - walletAddresses = await client.walletList(); - assert(Array.isArray(walletAddresses)); - assert.strictEqual(walletAddresses.length, 10); - }); - }); - - describe("Filecoin.WalletDefaultAddress", () => { - it("should return a single address", async () => { - const address = await client.walletDefaultAddress(); - assert.strictEqual(address.length, 86); - assert.strictEqual(address.indexOf("t3"), 0); - assert.strictEqual(address, walletAddresses[0]); - }); - }); - - describe("Filecoin.WalletSetDefault", () => { - it("should change the default address", async () => { - const oldDefault = walletAddresses[0]; - const newDefault = walletAddresses[1]; - let address = await client.walletDefaultAddress(); - assert.strictEqual(oldDefault, address); - await client.walletSetDefault(newDefault); - address = await client.walletDefaultAddress(); - assert.strictEqual(address, newDefault); - walletAddresses = await client.walletList(); - assert.strictEqual(walletAddresses[0], newDefault); - assert.strictEqual(walletAddresses[1], oldDefault); - assert.strictEqual(walletAddresses.length, 10); - }); - }); - - describe("Filecoin.WalletNew", () => { - it("should create a new account with a random BLS address", async () => { - const addressString = await client.walletNew(KeyType.KeyTypeBLS); - const address = new Address(addressString); - assert.strictEqual(address.protocol, AddressProtocol.BLS); - walletAddresses = await client.walletList(); - assert.strictEqual(walletAddresses.length, 11); - assert.strictEqual(walletAddresses[10], address.value); - }); - - it("should create a new account with a random SECP256K1 address", async () => { - const addressString = await client.walletNew(KeyType.KeyTypeSecp256k1); - const address = new Address(addressString); - assert.strictEqual(address.protocol, AddressProtocol.SECP256K1); - walletAddresses = await client.walletList(); - assert.strictEqual(walletAddresses.length, 12); - assert.strictEqual(walletAddresses[11], address.value); - }); - - it("should reject creation of a new account for secp256k1-ledger", async () => { - try { - await client.walletNew("secp256k1-ledger"); - assert.fail( - "Successfully created an account for KeyType secp256k1-ledger" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes( - `KeyType of secp256k1-ledger is not supported. Please use "bls" or "secp256k1".` - ), - e.message - ); - } - }); - }); - - describe("Filecoin.WalletHas", () => { - it("should confirm that the wallet has a known address", async () => { - const hasAddress = await client.walletHas(walletAddresses[0]); - assert.strictEqual(hasAddress, true); - }); - - it("should confirm that the wallet doesn't have an unknown address", async () => { - const address = Address.random(); - const hasAddress = await client.walletHas(address.value); - assert.strictEqual(hasAddress, false); - }); - }); - - describe("Filecoin.WalletDelete", () => { - it("should delete the first address", async () => { - const oldDefault = walletAddresses[0]; - const newDefault = walletAddresses[1]; - assert.strictEqual(walletAddresses.length, 12); - await client.walletDelete(oldDefault); - const address = await client.walletDefaultAddress(); - assert.strictEqual(address, newDefault); - walletAddresses = await client.walletList(); - assert.strictEqual(walletAddresses.length, 11); - assert.strictEqual(walletAddresses.includes(oldDefault), false); - }); - - it("should do nothing when deleting a random address", async () => { - const address = Address.random(); - walletAddresses = await client.walletList(); - assert.strictEqual(walletAddresses.length, 11); - await client.walletDelete(address.value); - walletAddresses = await client.walletList(); - assert.strictEqual(walletAddresses.length, 11); - }); - }); - - describe("Filecoin.WalletImport and Filecoin.WalletExport", () => { - let addressBLS: Address; - let addressSECP256K1: Address; - - it("should import a random BLS address/privatekey", async () => { - addressBLS = Address.random(); - const importedAddress = await client.walletImport({ - Type: KeyType.KeyTypeBLS, - PrivateKey: Buffer.from(addressBLS.privateKey!, "hex").toString( - "base64" - ) - }); - assert.strictEqual(importedAddress, addressBLS.value); - walletAddresses = await client.walletList(); - assert.strictEqual(walletAddresses.length, 12); - assert.strictEqual(walletAddresses[11], addressBLS.value); - }); - - it("should import a random SECP256K1 address/privatekey", async () => { - addressSECP256K1 = Address.random( - new RandomNumberGenerator(), - AddressProtocol.SECP256K1 - ); - const importedAddress = await client.walletImport({ - Type: KeyType.KeyTypeSecp256k1, - PrivateKey: Buffer.from(addressSECP256K1.privateKey!, "hex").toString( - "base64" - ) - }); - assert.strictEqual(importedAddress, addressSECP256K1.value); - walletAddresses = await client.walletList(); - assert.strictEqual(walletAddresses.length, 13); - assert.strictEqual(walletAddresses[12], addressSECP256K1.value); - }); - - it("should reject importing a secp256k1-ledger address", async () => { - try { - const address = Address.random( - new RandomNumberGenerator(), - AddressProtocol.SECP256K1 - ); - await client.walletImport({ - Type: KeyType.KeyTypeSecp256k1Ledger, - PrivateKey: Buffer.from(address.privateKey!, "hex").toString( - "base64" - ) - }); - assert.fail( - "Successfully imported an account with KeyType secp256k1-ledger" - ); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes(`Ganache doesn't support ledger accounts`), - e.message - ); - } - }); - - it("should export the private key of a BLS address", async () => { - const keyInfo: SerializedKeyInfo = await client.walletExport( - addressBLS.value - ); - assert.strictEqual(keyInfo.Type, KeyType.KeyTypeBLS); - assert.strictEqual( - Buffer.from(keyInfo.PrivateKey, "base64").toString("hex"), - addressBLS.privateKey - ); - }); - - it("should export the private key of a SECP256K1 address", async () => { - const keyInfo: SerializedKeyInfo = await client.walletExport( - addressSECP256K1.value - ); - assert.strictEqual(keyInfo.Type, KeyType.KeyTypeSecp256k1); - assert.strictEqual( - Buffer.from(keyInfo.PrivateKey, "base64").toString("hex"), - addressSECP256K1.privateKey - ); - }); - }); - - describe("Filecoin.WalletSign", () => { - it("signs a buffer via API", async () => { - const account = await provider.blockchain.accountManager!.getAccount( - walletAddresses[0] - ); - const buffer = Buffer.from([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]); - const directSignature = await account.address.signBuffer(buffer); - const apiSignature: SerializedSignature = await client.walletSign( - account.address.value, - buffer.toString("base64") - ); - assert.strictEqual(apiSignature.Type, SigType.SigTypeBLS); - assert.strictEqual( - directSignature.toString("base64"), - apiSignature.Data - ); - }); - - it("fails to sign a buffer via API for an unknown address", async () => { - try { - const address = Address.random(); - const buffer = Buffer.from([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]); - await client.walletSign(address.value, buffer.toString("base64")); - assert.fail("Successfully signed a buffer with an unknown address"); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes(`due to not having the associated private key.`), - e.message - ); - } - }); - }); - - describe("Filecoin.WalletSignMessage", () => { - it("signs a Message via API", async () => { - const account = await provider.blockchain.accountManager!.getAccount( - walletAddresses[0] - ); - const serializedMessage: SerializedMessage = { - Version: 0, - To: walletAddresses[1], - From: account.address.value, - Nonce: 0, - Value: "42", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - const directSignature = await account.address.signMessage( - new Message(serializedMessage) - ); - const apiSignature: SerializedSignedMessage = - await client.walletSignMessage( - account.address.value, - serializedMessage - ); - assert.strictEqual(apiSignature.Signature.Type, SigType.SigTypeBLS); - assert.strictEqual( - directSignature.toString("base64"), - apiSignature.Signature.Data - ); - }); - - it("fails to sign a Message via API for an unknown address", async () => { - try { - const address = Address.random(); - const serializedMessage: SerializedMessage = { - Version: 0, - To: walletAddresses[1], - From: address.value, - Nonce: 0, - Value: "42", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - await client.walletSignMessage(address.value, serializedMessage); - assert.fail("Successfully signed a Message with an unknown address"); - } catch (e: any) { - if (e.code === "ERR_ASSERTION") { - throw e; - } - assert( - e.message.includes(`due to not having the associated private key.`), - e.message - ); - } - }); - }); - - describe("Filecoin.WalletVerify", () => { - it("verifies a valid signature", async () => { - const account = await provider.blockchain.accountManager!.getAccount( - walletAddresses[0] - ); - const buffer = Buffer.from([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]); - const signature = await account.address.signBuffer(buffer); - const serializedSignature: SerializedSignature = { - Type: SigType.SigTypeBLS, - Data: signature.toString("base64") - }; - const isValid = await client.walletVerify( - account.address.value, - buffer.toString("base64"), - serializedSignature - ); - assert.strictEqual(isValid, true); - }); - - it("rejects an invalid signature", async () => { - const account = await provider.blockchain.accountManager!.getAccount( - walletAddresses[0] - ); - const buffer = Buffer.from([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]); - const signature = await account.address.signBuffer(buffer); - const serializedSignature: SerializedSignature = { - Type: SigType.SigTypeBLS, - Data: signature.toString("base64") - }; - const isValid = await client.walletVerify( - walletAddresses[1], - buffer.toString("base64"), - serializedSignature - ); - assert.strictEqual(isValid, false); - }); - }); - - describe("Filecoin.WalletBalance", () => { - let address: string; - - before(async () => { - address = await client.walletDefaultAddress(); - }); - - it("should return a balance for the default address", async () => { - const balance = await client.walletBalance(address); - assert.strictEqual(balance, "100000000000000000000"); - }); - - it("should not return a balance for any other address", async () => { - let otherAddress = Address.random().value; - const balance = await client.walletBalance(otherAddress); - assert.strictEqual(balance, "0"); - }); - }); - }); -}); diff --git a/src/chains/filecoin/filecoin/tests/api/ganache/ganache.test.ts b/src/chains/filecoin/filecoin/tests/api/ganache/ganache.test.ts deleted file mode 100644 index bdfeb81dcf..0000000000 --- a/src/chains/filecoin/filecoin/tests/api/ganache/ganache.test.ts +++ /dev/null @@ -1,191 +0,0 @@ -import assert from "assert"; -import { FilecoinProvider } from "../../../src/provider"; -import { SerializedMessage } from "../../../src/things/message"; -import { SerializedMessageSendSpec } from "../../../src/things/message-send-spec"; -import { SubscriptionMethod } from "../../../src/types/subscriptions"; -import getProvider from "../../helpers/getProvider"; - -const LotusRPC = require("@filecoin-shipyard/lotus-client-rpc").LotusRPC; - -type LotusClient = any; - -describe("api", () => { - describe("ganache", () => { - describe("Ganache.MineTipset", () => { - let provider: FilecoinProvider; - let client: LotusClient; - - before(async () => { - provider = await getProvider(); - client = new LotusRPC(provider, { schema: FilecoinProvider.Schema }); - }); - - after(async () => { - if (provider) { - await provider.stop(); - } - }); - - it("should return a serialized tipset with blocks", async () => { - const { Height: priorHeight } = await client.chainHead(); - - for (let i = 0; i < 5; i++) { - await provider.send({ - jsonrpc: "2.0", - id: "0", - method: "Ganache.MineTipset" - }); - } - - const { Height: currentHeight } = await client.chainHead(); - - assert.strictEqual(currentHeight, priorHeight + 5); - }); - }); - - describe("Enabling/Disabling the Miner", () => { - let provider: FilecoinProvider; - let client: LotusClient; - const enabledChanges: boolean[] = []; - - before(async () => { - provider = await getProvider({ miner: { blockTime: 0.1 } }); - client = new LotusRPC(provider, { schema: FilecoinProvider.Schema }); - }); - - after(async () => { - if (provider) { - await provider.stop(); - } - }); - - it("subscribes to miner enabled changes", async () => { - await provider.sendSubscription( - { - jsonrpc: "2.0", - id: "0", - method: "Ganache.MinerEnabledNotify" - }, - { subscription: true }, - message => { - if (message.type === SubscriptionMethod.ChannelUpdated) { - enabledChanges.push(message.data[1]); - } - } - ); - }); - - it("Ganache.MinerEnabled", async () => { - const isEnabled = await provider.send({ - jsonrpc: "2.0", - id: "0", - method: "Ganache.MinerEnabled" - }); - - assert.strictEqual(isEnabled, true); - assert.strictEqual(provider.blockchain.minerEnabled, true); - }); - - it("Ganache.DisableMiner", async () => { - await provider.send({ - jsonrpc: "2.0", - id: "0", - method: "Ganache.DisableMiner" - }); - - const isEnabled = await provider.send({ - jsonrpc: "2.0", - id: "0", - method: "Ganache.MinerEnabled" - }); - - assert.strictEqual(isEnabled, false); - assert.strictEqual(provider.blockchain.minerEnabled, false); - - const head1 = await client.chainHead(); - await new Promise(resolve => setInterval(resolve, 300)); - const head2 = await client.chainHead(); - assert.strictEqual(head2.Height, head1.Height); - - const accounts = - await provider.blockchain.accountManager!.getControllableAccounts(); - const From = accounts[0].address.value; - const To = accounts[1].address.value; - const message: SerializedMessage = { - Version: 0, - From, - To, - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - await client.mpoolPushMessage(message, messageSendSpec); - - await new Promise(resolve => setInterval(resolve, 300)); - const head3 = await client.chainHead(); - assert.strictEqual(head3.Height, head2.Height); - }); - - it("Ganache.EnableMiner", async () => { - await provider.send({ - jsonrpc: "2.0", - id: "0", - method: "Ganache.EnableMiner" - }); - - const isEnabled = await provider.send({ - jsonrpc: "2.0", - id: "0", - method: "Ganache.MinerEnabled" - }); - - assert.strictEqual(isEnabled, true); - assert.strictEqual(provider.blockchain.minerEnabled, true); - const head1 = await client.chainHead(); - await new Promise(resolve => setInterval(resolve, 300)); - const head2 = await client.chainHead(); - assert(head2.Height > head1.Height); - - const accounts = - await provider.blockchain.accountManager!.getControllableAccounts(); - const From = accounts[0].address.value; - const To = accounts[1].address.value; - const message: SerializedMessage = { - Version: 0, - From, - To, - Nonce: 0, - Value: "1", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - - const messageSendSpec: SerializedMessageSendSpec = { - MaxFee: "0" - }; - await client.mpoolPushMessage(message, messageSendSpec); - - await new Promise(resolve => setInterval(resolve, 300)); - const head3 = await client.chainHead(); - assert(head3.Height > head2.Height); - }); - - it("Ganache.MinerEnabledNotify", async () => { - assert.strictEqual(enabledChanges.length, 2); - assert.strictEqual(enabledChanges[0], false); - assert.strictEqual(enabledChanges[1], true); - }); - }); - }); -}); diff --git a/src/chains/filecoin/filecoin/tests/blockchain/blockchain.test.ts b/src/chains/filecoin/filecoin/tests/blockchain/blockchain.test.ts deleted file mode 100644 index af94f57ab9..0000000000 --- a/src/chains/filecoin/filecoin/tests/blockchain/blockchain.test.ts +++ /dev/null @@ -1,367 +0,0 @@ -import assert from "assert"; -import Blockchain from "../../src/blockchain"; -import { Tipset } from "../../src/things/tipset"; -import IpfsHttpClient from "ipfs-http-client"; -import { StartDealParams } from "../../src/things/start-deal-params"; -import { StorageMarketDataRef } from "../../src/things/storage-market-data-ref"; -import { RootCID } from "../../src/things/root-cid"; -import { - dealIsInProcess, - StorageDealStatus -} from "../../src/types/storage-deal-status"; -import { FilecoinOptionsConfig } from "@ganache/filecoin-options"; - -describe("Blockchain", () => { - describe("general", () => { - let blockchain: Blockchain; - let blockchain2: Blockchain; - - before(async () => { - blockchain = new Blockchain( - FilecoinOptionsConfig.normalize({ - logging: { - logger: { - log: () => {} - } - } - }) - ); - blockchain2 = new Blockchain( - FilecoinOptionsConfig.normalize({ - chain: { - ipfsPort: 5002 - }, - wallet: { - totalAccounts: 2 - }, - logging: { - logger: { - log: () => {} - } - } - }) - ); - await blockchain.initialize(); - await blockchain2.initialize(); - }); - - after(async () => { - if (blockchain) { - await blockchain.stop(); - } - if (blockchain2) { - await blockchain2.stop(); - } - }); - - it("creates multiple accounts", async () => { - const accounts = - await blockchain.accountManager!.getControllableAccounts(); - assert.strictEqual(accounts.length, 10); - assert.notStrictEqual(accounts[0].address, accounts[1].address); - }); - - it("creates a configurable amount of accounts", async () => { - const accounts = - await blockchain2.accountManager!.getControllableAccounts(); - assert.strictEqual(accounts.length, 2); - }); - - it("creates new tipset with one block on creation", async () => { - const genesis: Tipset = blockchain.genesisTipset(); - - assert.strictEqual(genesis.height, 0); - assert.strictEqual(genesis.blocks.length, 1); - }); - - it("mines a new tipset and creates parent/child relationship between blocks", async () => { - await blockchain.mineTipset(); - - const genesis: Tipset = blockchain.genesisTipset(); - const latest: Tipset = blockchain.latestTipset(); - - assert.strictEqual(latest.height, 1, "Incorrect height!"); - assert( - latest.blocks[0].parents[0].equals(genesis.cids[0]), - "block in latest tipset should have genesis tipset as parent" - ); - }); - }); - - describe("interval mining", () => { - it("will mine blocks on an interval", async function () { - this.timeout(10000); - - const blockchain = new Blockchain( - FilecoinOptionsConfig.normalize({ - miner: { - blockTime: 0.1 - }, - logging: { - logger: { - log: () => {} - } - } - }) - ); - - try { - await blockchain.initialize(); - - // After 0.5 seconds, we should have at least 3 blocks and no more than 10 blocks - // Github CI is so unpredictable with their burstable cpus - await new Promise(resolve => setTimeout(resolve, 500)); - - const latest: Tipset = blockchain.latestTipset(); - - assert( - latest.height >= 3 || latest.height <= 10, - `Expected between 3 and 10 blocks to be mined, but got ${latest.height}` - ); - } finally { - blockchain.stop(); - } - }); - }); - - describe("ipfs server", () => { - it("creates an ipfs server", async () => { - const blockchain = new Blockchain( - FilecoinOptionsConfig.normalize({ - logging: { - logger: { - log: () => {} - } - } - }) - ); - - try { - await blockchain.initialize(); - - const ipfs = IpfsHttpClient({ - host: "localhost", - port: blockchain.options.chain.ipfsPort, - protocol: "http", - apiPath: "/api/v0" - }); - - const testData = "this is some data!"; - - const result = await ipfs.add({ - content: testData - }); - const cid = result.path; - - // This is the exact CID expected from the test data. - assert.strictEqual( - cid, - "QmRjSaq4CDRg4Rbj3wXXeuVVfVE1H3UeQzMt2WKjArh6V9" - ); - } finally { - await blockchain.stop(); - } - }); - }); - - describe("deal state progression", () => { - let blockchain: Blockchain; - - afterEach(async () => { - await blockchain.stop(); - }); - - it("advances state of in process deals on every block", async () => { - blockchain = new Blockchain( - FilecoinOptionsConfig.normalize({ - miner: { - mine: false - }, - logging: { - logger: { - log: () => {} - } - } - }) - ); - - await blockchain.initialize(); - - const result = await blockchain.ipfs!.add({ - content: "some data" - }); - - const accounts = - await blockchain.accountManager!.getControllableAccounts(); - const proposal = new StartDealParams({ - data: new StorageMarketDataRef({ - transferType: "graphsync", - root: new RootCID({ - "/": result.path - }), - pieceSize: 0 - }), - wallet: accounts[0].address, - miner: blockchain.miner, - epochPrice: 2500n, - minBlocksDuration: 300 - }); - - const { root: proposalCid } = await blockchain.startDeal(proposal); - - let currentDeal = await blockchain.dealInfoManager!.get( - proposalCid.value - ); - - // First state should be validating - assert.strictEqual(currentDeal!.state, StorageDealStatus.Validating); - - await blockchain.mineTipset(); - - currentDeal = await blockchain.dealInfoManager!.get(proposalCid.value); - - // Next state should be Staged - assert.strictEqual(currentDeal!.state, StorageDealStatus.Staged); - - await blockchain.mineTipset(); - - currentDeal = await blockchain.dealInfoManager!.get(proposalCid.value); - - // Next state should be ReserveProviderFunds - assert.strictEqual( - currentDeal!.state, - StorageDealStatus.ReserveProviderFunds - ); - - // ... and on and on - - // Let's mine all the way to the Sealing state - while (currentDeal!.state != StorageDealStatus.Sealing) { - await blockchain.mineTipset(); - currentDeal = await blockchain.dealInfoManager!.get(proposalCid.value); - } - - // The deal should still be considered in process, since it's still sealing - let deals = await blockchain.dealInfoManager!.getDeals(); - let inProcessDeals = deals.filter(deal => dealIsInProcess(deal.state)); - assert.strictEqual(inProcessDeals.length, 1); - assert.strictEqual( - inProcessDeals[0].proposalCid.root.value, - proposalCid.value - ); - - // Now let's mine the final tipset, making it active, and check to see that - // the deal was pulled out of the in process array. - await blockchain.mineTipset(); - - currentDeal = await blockchain.dealInfoManager!.get(proposalCid.value); - - assert.strictEqual(currentDeal!.state, StorageDealStatus.Active); - - deals = await blockchain.dealInfoManager!.getDeals(); - inProcessDeals = deals.filter(deal => dealIsInProcess(deal.state)); - assert.strictEqual(inProcessDeals.length, 0); - }); - - it("fully advances the state of in process deals when automining", async () => { - blockchain = new Blockchain( - FilecoinOptionsConfig.normalize({ - miner: { - blockTime: 0 - }, - logging: { - logger: { - log: () => {} - } - } - }) - ); - - await blockchain.initialize(); - - const result = await blockchain.ipfs!.add({ - content: "some data" - }); - - const accounts = - await blockchain.accountManager!.getControllableAccounts(); - const proposal = new StartDealParams({ - data: new StorageMarketDataRef({ - transferType: "graphsync", - root: new RootCID({ - "/": result.path - }), - pieceSize: 0 - }), - wallet: accounts[0].address, - miner: blockchain.miner, - epochPrice: 2500n, - minBlocksDuration: 300 - }); - - const { root: proposalCid } = await blockchain.startDeal(proposal); - - const deal = await blockchain.dealInfoManager!.get(proposalCid.value); - - // Since we're automining, starting the deal will trigger - // the state to be state to be set to active. - assert.strictEqual(deal!.state, StorageDealStatus.Active); - - // We create 1 tipset per state change. Let's make sure that occurred. - assert.strictEqual(blockchain.tipsetManager!.latest!.height, 11); - }); - }); - - describe("determinism", () => { - let blockchain: Blockchain; - - const expectedAddress = - "t3qdqduswwvsvq72iwppn2vytvq2mt7qi5nensswvawpdkmudnzxooi45edyflgnohrfvijy77pn66247nttzq"; - - afterEach(async () => { - if (blockchain) { - await blockchain.stop(); - } - }); - - it("creates the expected address from seed", async () => { - blockchain = new Blockchain( - FilecoinOptionsConfig.normalize({ - wallet: { - seed: "tim is a swell guy" - }, - logging: { - logger: { - log: () => {} - } - } - }) - ); - await blockchain.initialize(); - const accounts = - await blockchain.accountManager!.getControllableAccounts(); - - assert.strictEqual(accounts[0].address.value, expectedAddress); - }); - - it("uses the seed to create a different level of determinism", async () => { - blockchain = new Blockchain( - FilecoinOptionsConfig.normalize({ - wallet: { - seed: "tim is a swell person" - }, - logging: { - logger: { - log: () => {} - } - } - }) - ); - await blockchain.initialize(); - const accounts = - await blockchain.accountManager!.getControllableAccounts(); - - assert.notStrictEqual(accounts[0].address.value, expectedAddress); - }); - }); -}); diff --git a/src/chains/filecoin/filecoin/tests/blockchain/database.test.ts b/src/chains/filecoin/filecoin/tests/blockchain/database.test.ts deleted file mode 100644 index b2300240e4..0000000000 --- a/src/chains/filecoin/filecoin/tests/blockchain/database.test.ts +++ /dev/null @@ -1,124 +0,0 @@ -import assert from "assert"; -import { FilecoinOptionsConfig } from "@ganache/filecoin-options"; -import { readdir } from "fs-extra"; -import tmp from "tmp-promise"; -import Blockchain from "../../src/blockchain"; - -describe("Blockchain", () => { - describe("database", () => { - let dbPath: string; - let blockchain: Blockchain; - let ipfsCid: string; - - before(async () => { - tmp.setGracefulCleanup(); - dbPath = (await tmp.dir()).path; - }); - - afterEach(async () => { - if (blockchain) { - await blockchain.stop(); - } - }); - - it("saves information to database", async () => { - blockchain = new Blockchain( - FilecoinOptionsConfig.normalize({ - database: { - dbPath - }, - logging: { - logger: { - log: () => {} - } - } - }) - ); - - await blockchain.initialize(); - await blockchain.mineTipset(); - const dir = await readdir(dbPath); - assert(dir.length > 0); - - const result = await blockchain.ipfs.add({ - content: "I am data" - }); - ipfsCid = result.cid.toString(); - - // ensure it exists - let gotFile = false; - for await (const file of blockchain.ipfs.get(ipfsCid)) { - if (file.type === "file" && file.content && !gotFile) { - let string = ""; - for await (const chunk of file.content) { - string += chunk.toString(); - } - assert.strictEqual(string, "I am data"); - gotFile = true; - break; - } - } - - if (!gotFile) { - assert.fail("Could not save data to IPFS"); - } - }); - - it("resumes blockchain from prior state", async () => { - blockchain = new Blockchain( - FilecoinOptionsConfig.normalize({ - database: { - dbPath - }, - logging: { - logger: { - log: () => {} - } - } - }) - ); - - await blockchain.initialize(); - const latestTipset = blockchain.latestTipset(); - assert.strictEqual(latestTipset.height, 1); - assert( - latestTipset.blocks.length > 0, - "Did not load blocks along with tipset" - ); - }); - - it("restores IPFS data from prior blockchain state", async () => { - blockchain = new Blockchain( - FilecoinOptionsConfig.normalize({ - database: { - dbPath - }, - logging: { - logger: { - log: () => {} - } - } - }) - ); - - await blockchain.initialize(); - - let gotFile = false; - for await (const file of blockchain.ipfs.get(ipfsCid)) { - if (file.type === "file" && file.content && !gotFile) { - let string = ""; - for await (const chunk of file.content) { - string += chunk.toString(); - } - assert.strictEqual(string, "I am data"); - gotFile = true; - break; - } - } - - if (!gotFile) { - assert.fail("Did not successfully restore IPFS data"); - } - }); - }); -}); diff --git a/src/chains/filecoin/filecoin/tests/helpers/getIpfsClient.ts b/src/chains/filecoin/filecoin/tests/helpers/getIpfsClient.ts deleted file mode 100644 index 42e635d2ce..0000000000 --- a/src/chains/filecoin/filecoin/tests/helpers/getIpfsClient.ts +++ /dev/null @@ -1,9 +0,0 @@ -import IpfsHttpClient from "ipfs-http-client"; - -export default () => { - return IpfsHttpClient({ - host: "localhost", - port: 5002, // Use a different port than the default, for testing - protocol: "http" - }); -}; diff --git a/src/chains/filecoin/filecoin/tests/helpers/getProvider.ts b/src/chains/filecoin/filecoin/tests/helpers/getProvider.ts deleted file mode 100644 index 940123709c..0000000000 --- a/src/chains/filecoin/filecoin/tests/helpers/getProvider.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { FilecoinProviderOptions } from "@ganache/filecoin-options"; -import { Executor, RequestCoordinator } from "@ganache/utils"; -import { FilecoinProvider } from "../../src/provider"; - -const getProvider = async (options?: Partial) => { - const requestCoordinator = new RequestCoordinator(0); - const executor = new Executor(requestCoordinator); - const provider = new FilecoinProvider( - { - chain: { - ipfsPort: 5002 // Use a different port than the default, to test it works - }, - logging: { - logger: { - log: () => { } - } - }, - ...options - }, - executor - ); - await provider.initialize(); - requestCoordinator.resume(); - return provider; -}; - -export default getProvider; diff --git a/src/chains/filecoin/filecoin/tests/helpers/getServer.ts b/src/chains/filecoin/filecoin/tests/helpers/getServer.ts deleted file mode 100644 index 88c05043fc..0000000000 --- a/src/chains/filecoin/filecoin/tests/helpers/getServer.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { join } from "path"; -import FilecoinFlavor from "../../"; -import Server from "../../../../../packages/core/src/server"; - -const getServer = async (port: number) => { - const server = new Server({ - // `join(__dirname, "..", "..") as unknown as "filecoin""` since @ganache/filecoin isn't - // _installed_ in this package since it _is_ this package; we can't use the - // package name itself here. - flavor: join(__dirname, "..", "../lib/index.js") as unknown as "filecoin", - server: { - ws: true - }, - chain: { - ipfsPort: 5002 // Use a different port than the default, to test it works - }, - logging: { - logger: { - log: () => {} - } - } - }); - await server.listen(port); - return server; -}; - -export default getServer; diff --git a/src/chains/filecoin/filecoin/tests/things/address.test.ts b/src/chains/filecoin/filecoin/tests/things/address.test.ts deleted file mode 100644 index e390904012..0000000000 --- a/src/chains/filecoin/filecoin/tests/things/address.test.ts +++ /dev/null @@ -1,147 +0,0 @@ -import assert from "assert"; -import { Address, AddressProtocol } from "../../src/things/address"; -import { Message, SerializedMessage } from "../../src/things/message"; - -describe("things", () => { - describe("Address", () => { - // These were pulled directly from Lotus. You can use the lotusKeyInfo - // with Filecoin.WalletImport to expand these tests with the same keys - const blsAddress = { - lotusKeyInfo: { - Type: "bls", - PrivateKey: "d9uNVQQ7Ek+Ri8X0gLBMKslCCN28PfLVhS8b6ZJZUhY=" - }, - testInfo: { - // this is just Buffer.from(lotusKeyInfo.PrivateKey, "base64").toString("hex") - privateKey: - "77db8d55043b124f918bc5f480b04c2ac94208ddbc3df2d5852f1be992595216", - publicAddress: - "t3sym5jz44yhcfslttqfsygrkanh5w556huzupuuz5ox44dniehguj6w23gbnxxp4ztgwxaesr2wtvdwkr4jyq" - } - }; - - const secpAddress = { - lotusKeyInfo: { - Type: "secp256k1", - PrivateKey: "hJ5suaM/nJwkclh/QoE59CFbWIGZEgPIhKapR68QqkE=" - }, - testInfo: { - // this is just Buffer.from(lotusKeyInfo.PrivateKey, "base64").toString("hex") - privateKey: - "849e6cb9a33f9c9c2472587f428139f4215b5881991203c884a6a947af10aa41", - publicAddress: "t15splylflm24lhvigtcsi4sjsagz6f7cwthnylki" - } - }; - - it("should derive a real BLS address from a private key", async () => { - const address = Address.fromPrivateKey(blsAddress.testInfo.privateKey); - - assert.strictEqual(address.value, blsAddress.testInfo.publicAddress); - - const address2 = Address.fromPrivateKey( - blsAddress.testInfo.privateKey, - AddressProtocol.BLS - ); - - assert.strictEqual(address2.value, address.value); - }); - - it("should derive a real SECP256K1 address from a private key", async () => { - const address = Address.fromPrivateKey( - secpAddress.testInfo.privateKey, - AddressProtocol.SECP256K1 - ); - - assert.strictEqual(address.value, secpAddress.testInfo.publicAddress); - }); - - it("should create a random address when calling Address.random()", async () => { - const address = Address.random(); - - assert.ok(Address.validate(address.value)); - }); - - it("properly signs a buffer with a BLS address", async () => { - const address = Address.fromPrivateKey( - blsAddress.testInfo.privateKey, - AddressProtocol.BLS - ); - const buffer = Buffer.from([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]); - const signature = await address.signBuffer(buffer); - assert.strictEqual( - signature.toString("base64"), - "pmfBJoCCDKhNsp2CzneA5Q+gDmZX9q2r6t1MeXgyLDkFdQw5KgdeQzr+ZInZttpFAhw9wjsiLEqV+agIZM1wxuWpcbpb7sz73XiloKFj20BkP5yvyC/ub+MFIWREFlL2" - ); - }); - - it("properly signs a buffer with a SECP256K1 address", async () => { - const address = Address.fromPrivateKey( - secpAddress.testInfo.privateKey, - AddressProtocol.SECP256K1 - ); - const buffer = Buffer.from([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]); - const signature = await address.signBuffer(buffer); - assert.strictEqual( - signature.toString("base64"), - "I9Fk7jXdAPIi8AGQgwZe+T+CAsESdPcIfiK7qWRrcLl/G4+Ol0jB2TM1IDglvxuhM6Xf9G7zGwVrN9glNyCNDAE=" - ); - }); - - // TODO: This test fails and I can't figure out why, but it's not worth the time now. - // Read more at Address.signMessage implementation - it.skip("properly signs a Message with a BLS address", async () => { - const address = Address.fromPrivateKey( - blsAddress.testInfo.privateKey, - AddressProtocol.BLS - ); - const serializedMessage: SerializedMessage = { - Version: 0, - To: - "f3r2y3dv7bmw3okvmil6mwrjedac5jcntqocwlnozszkqtpux44xegbbpjyv7zg4lwkonihnejimolyvmpwbsa", - From: blsAddress.testInfo.publicAddress.replace(/^t/, "f"), // our comparison uses 'f' network, - Nonce: 0, - Value: "42", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - const signature = await address.signMessage( - new Message(serializedMessage) - ); - assert.strictEqual( - signature.toString("base64"), - "gFRtcRyRtc0eEH8Z4MIFYv4oICx2I6/QYhEcmzMvlfmvsrdqzmsmVz/Vrop2wmB5A9WziUFEwDKdOEaSJaCNfQKwnI5AFQJxOYjEz1eBolDbsfnU/TkoqSY7C0CUlOfn" - ); - }); - - // TODO: This test fails and I can't figure out why, but it's not worth the time now. - // Read more at Address.signMessage implementation - it.skip("properly signs a Message with a SECP256K1 address", async () => { - const address = Address.fromPrivateKey( - secpAddress.testInfo.privateKey, - AddressProtocol.SECP256K1 - ); - const serializedMessage: SerializedMessage = { - Version: 0, - To: - "f3r2y3dv7bmw3okvmil6mwrjedac5jcntqocwlnozszkqtpux44xegbbpjyv7zg4lwkonihnejimolyvmpwbsa", - From: secpAddress.testInfo.publicAddress.replace(/^t/, "f"), // our comparison uses 'f' network - Nonce: 0, - Value: "42", - GasLimit: 0, - GasFeeCap: "0", - GasPremium: "0", - Method: 0, - Params: "" - }; - const message = new Message(serializedMessage); - const signature = await address.signMessage(message); - assert.strictEqual( - signature.toString("base64"), - "qef/OO7lbK5wFfUgOO4BQqYh4gGEfls21E1eGb2FPJ59kUDPANjAGIh/MYOmlGbGkwHTR64iVPMc1y5GrNYEbQE=" - ); - }); - }); -}); diff --git a/src/chains/filecoin/filecoin/tests/things/things.test.ts b/src/chains/filecoin/filecoin/tests/things/things.test.ts deleted file mode 100644 index 308f902d6c..0000000000 --- a/src/chains/filecoin/filecoin/tests/things/things.test.ts +++ /dev/null @@ -1,120 +0,0 @@ -import assert from "assert"; -import { RootCID } from "../../src/things/root-cid"; -import { CID } from "../../src/things/cid"; -import { Tipset } from "../../src/things/tipset"; -import { BlockHeader } from "../../src/things/block-header"; -import IPFSCid from "cids"; -import multihashing from "multihashing"; -import { Address } from "../../src/things/address"; - -describe("things", () => { - describe("general", () => { - it("can create a new object from both a serialized object and a deserialized object", async () => { - // We'll use RootCID here because it's a simple example - // with no recursive members during deserialization - - const rootCidFromSerializedData = new RootCID({ - "/": "badvu4qhg4y390tu5i4ongi9t2vdf429cl7kp7tcsnbas1f5d66zeb4q30mbsl" - }); - - // Note that the CID is defined as an object, which makes the type of data - // passed into the constructor a deserialized object - const rootCidFromDeserializedData = new RootCID({ - root: new CID( - "badvu4qhg4y390tu5i4ongi9t2vdf429cl7kp7tcsnbas1f5d66zeb4q30mbsl" - ) - }); - - assert.strictEqual( - rootCidFromSerializedData.root.value, - rootCidFromDeserializedData.root.value - ); - - // Now let's try a more complex one that has different keys and includes arrays - const tipsetFromSerializedData = new Tipset({ - Cids: [ - { - "/": - "badvu4qhg4y390tu5i4ongi9t2vdf429cl7kp7tcsnbas1f5d66zeb4q30mbsl" - } - ], - Blocks: [], - Height: 0 - }); - - const tipsetFromDeserializedData = new Tipset({ - cids: [ - new RootCID({ - root: new CID( - "badvu4qhg4y390tu5i4ongi9t2vdf429cl7kp7tcsnbas1f5d66zeb4q30mbsl" - ) - }) - ], - blocks: [], - height: 0 - }); - - assert.strictEqual( - tipsetFromSerializedData.cids[0].root.value, - tipsetFromDeserializedData.cids[0].root.value - ); - }); - }); - - describe("CID", () => { - it("should serialize to a string", async () => { - const cidStr = - "bafy2bzacebxe5fag7knys7s56eou6557lom3mmgvta27bc3jzn6ypaqw34s5y"; - const cid = new CID(cidStr); - - assert(typeof cid.serialize() == "string"); - assert.strictEqual(cid.serialize(), cidStr); - }); - - it("will error if no value is passed into the constructor", async () => { - let error: Error | undefined; - - try { - new CID(); - } catch (e: any) { - error = e; - } - - assert.notStrictEqual( - typeof error, - "undefined", - "Expected CID constructor to throw an error on empty value!" - ); - assert.strictEqual(error!.message, "A value is required for class CID"); - }); - }); - - describe("Block", () => { - it("has default values", async () => { - const timestamp = new Date().getTime() / 1000; - - const block = new BlockHeader(); - - assert.strictEqual( - block.miner.value, - Address.fromId(0, false, true).value - ); - assert.strictEqual(block.beaconEntries.length, 0); - assert.strictEqual(block.winPoStProof.length, 0); - assert.strictEqual(block.parents.length, 0); - assert.strictEqual(block.parentWeight, 0n); - - // The below verifies these CIDs point to 0 - let cid = new IPFSCid(block.parentStateRoot.root.value); - assert(multihashing.verify(Buffer.from(cid.multihash), Buffer.from([0]))); - cid = new IPFSCid(block.parentMessageReceipts.root.value); - assert(multihashing.verify(Buffer.from(cid.multihash), Buffer.from([0]))); - cid = new IPFSCid(block.messages.root.value); - assert(multihashing.verify(Buffer.from(cid.multihash), Buffer.from([0]))); - - assert.strictEqual(block.height, 0); - assert(block.timestamp >= timestamp); - assert.strictEqual(block.forkSignaling, 0); - }); - }); -}); diff --git a/src/chains/filecoin/filecoin/tsconfig.json b/src/chains/filecoin/filecoin/tsconfig.json deleted file mode 100644 index e2a484af32..0000000000 --- a/src/chains/filecoin/filecoin/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "extends": "../../../tsconfig-base.json", - "compilerOptions": { - "outDir": "lib", - "declarationDir": "typings", - "composite": true, - "strictNullChecks": true, - "noImplicitAny": true - }, - "include": [ - "index.ts", - "src/**/*" - ], - "typeRoots": [ - "./node_modules/@types", - "./src/@types" - ], - "references": [ - { - "name": "@ganache/filecoin-options", - "path": "../options" - }, - { - "name": "@ganache/utils", - "path": "../../../packages/utils" - }, - { - "name": "@ganache/flavor", - "path": "../../../packages/flavor" - } - ] -} \ No newline at end of file diff --git a/src/chains/filecoin/filecoin/tsconfig.test.json b/src/chains/filecoin/filecoin/tsconfig.test.json deleted file mode 100644 index 726335a118..0000000000 --- a/src/chains/filecoin/filecoin/tsconfig.test.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - // we can't use these in tests because the rest of the repo is broken - "strictNullChecks": false, - "noImplicitAny": false - } -} diff --git a/src/chains/filecoin/filecoin/webpack.config.ts b/src/chains/filecoin/filecoin/webpack.config.ts deleted file mode 100644 index 0a0c0942ad..0000000000 --- a/src/chains/filecoin/filecoin/webpack.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import webpackNode from "./webpack/webpack.node.config"; - -export default [webpackNode]; diff --git a/src/chains/filecoin/filecoin/webpack/webpack.common.config.ts b/src/chains/filecoin/filecoin/webpack/webpack.common.config.ts deleted file mode 100644 index 01e55e3b6f..0000000000 --- a/src/chains/filecoin/filecoin/webpack/webpack.common.config.ts +++ /dev/null @@ -1,45 +0,0 @@ -import webpack from "webpack"; -import TerserPlugin from "terser-webpack-plugin"; - -const base: webpack.Configuration = { - mode: "production", - entry: "./index.ts", - devtool: "source-map", - module: { - rules: [ - { - test: /\.tsx?$/, - use: [ - { - loader: "ts-loader" - } - ] - } - ] - }, - resolve: { - extensions: [".tsx", ".ts", ".js"] - }, - output: { - filename: "ganache-filecoin.min.js", - library: "Filecoin-flavored Ganache", - libraryTarget: "umd" - }, - stats: { - colors: true - }, - optimization: { - minimize: true, - minimizer: [ - new TerserPlugin({ - terserOptions: { - // Truffle needs our stack traces in its tests: - // https://github.com/trufflesuite/truffle/blob/b2742bc1187a3c1513173d19c58ce0d3a8fe969b/packages/contract-tests/test/errors.js#L280 - keep_fnames: true - } - }) - ] - } -}; - -export default base; diff --git a/src/chains/filecoin/filecoin/webpack/webpack.node.config.ts b/src/chains/filecoin/filecoin/webpack/webpack.node.config.ts deleted file mode 100644 index 8d195c46e1..0000000000 --- a/src/chains/filecoin/filecoin/webpack/webpack.node.config.ts +++ /dev/null @@ -1,32 +0,0 @@ -import base from "./webpack.common.config"; -import webpack from "webpack"; -import path from "path"; -import merge from "webpack-merge"; - -const config: webpack.Configuration = merge({}, base, { - target: "node12.13", - output: { - path: path.resolve(__dirname, "../", "dist", "node") - }, - externals: [ - "ipfs", - "ipfs-http-client", - "ipfs-http-server", - "ipld-dag-cbor", - "@trufflesuite/bigint-buffer", - "leveldown", - "secp256k1", - "keccak" - ], - module: { - rules: [ - { - // webpack load native modules - test: /\.node$/, - loader: "node-loader" - } - ] - } -}); - -export default config; diff --git a/src/chains/filecoin/options/README.md b/src/chains/filecoin/options/README.md deleted file mode 100644 index 5ab4855888..0000000000 --- a/src/chains/filecoin/options/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# `@ganache/filecoin-options` - -This package defines the available NodeJS and CLI options for `@ganache/filecoin` - -## CLI Usage - -Run `ganache filecoin --help` to see your versions CLI usage. - -## NodeJS Usage - -See the [web documentation](#todo) for more details on the available NodeJS options. - -These options are provided alongside the `flavor` options. For example: - -```json5 -{ - "flavor": "filecoin", - "chain": { - /* ... */ - }, - "database": { - /* ... */ - }, - "logging": { - /* ... */ - }, - "miner": { - /* ... */ - }, - "wallet": { - /* ... */ - } -} -``` - -See a usage example [in the `@ganache/filecoin` README](../filecoin/README.md#usage). diff --git a/src/chains/filecoin/options/index.ts b/src/chains/filecoin/options/index.ts deleted file mode 100644 index 1137609880..0000000000 --- a/src/chains/filecoin/options/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * @ganache/filecoin-options - * - * @author Tim Coulter - * @license MIT - */ - -export { - FilecoinInternalOptions, - FilecoinOptionsConfig, - FilecoinProviderOptions, - FilecoinDefaults, - FilecoinLegacyProviderOptions -} from "./src"; diff --git a/src/chains/filecoin/options/package-lock.json b/src/chains/filecoin/options/package-lock.json deleted file mode 100644 index f6429be4d5..0000000000 --- a/src/chains/filecoin/options/package-lock.json +++ /dev/null @@ -1,1911 +0,0 @@ -{ - "name": "@ganache/filecoin-options", - "version": "0.8.0", - "lockfileVersion": 1, - "requires": true, - "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==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", - "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", - "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==", - "dev": true - }, - "@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==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "@types/eslint": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.1.tgz", - "integrity": "sha512-UP9rzNn/XyGwb5RQ2fok+DzcIRIYwc16qTXse5+Smsy8MOIccCChT15KAwnsgQx4PzJkaMq4myFyZ4CL5TjhIQ==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/mocha": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", - "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", - "dev": true - }, - "@types/node": { - "version": "16.11.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", - "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==", - "dev": true - }, - "@types/seedrandom": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", - "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==", - "dev": true - }, - "@types/terser-webpack-plugin": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/terser-webpack-plugin/-/terser-webpack-plugin-5.0.2.tgz", - "integrity": "sha512-YcAT1D4gjho1jqc/gjn1ojHFtQtrGHaHPqz5nDMiN5Jj9BeigjDkS2w010PvUnPkdVY3GerDFbY62TArtDBuDQ==", - "dev": true, - "requires": { - "terser": "^5.3.8", - "webpack": "^5.1.0" - } - }, - "@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 - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", - "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", - "dev": true - }, - "@webpack-cli/info": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", - "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", - "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", - "dev": true - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "ajv": { - "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", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "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 - }, - "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 - }, - "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" - } - }, - "anymatch": { - "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" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "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 - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "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 - }, - "brace-expansion": { - "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" - } - }, - "braces": { - "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" - } - }, - "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 - }, - "browserslist": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", - "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001280", - "electron-to-chromium": "^1.3.896", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001286", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001286.tgz", - "integrity": "sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ==", - "dev": true - }, - "chalk": { - "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" - }, - "dependencies": { - "supports-color": { - "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" - } - } - } - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "cliui": { - "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", - "wrap-ansi": "^7.0.0" - } - }, - "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", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "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 - }, - "cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.1" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "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 - } - } - }, - "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 - }, - "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 - }, - "electron-to-chromium": { - "version": "1.4.16", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.16.tgz", - "integrity": "sha512-BQb7FgYwnu6haWLU63/CdVW+9xhmHls3RCQUFiV4lvw3wimEHTVcUk2hkuZo76QhR8nnDdfZE7evJIZqijwPdA==", - "dev": true - }, - "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 - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "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 - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "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==", - "dev": true - }, - "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==", - "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 - }, - "fill-range": { - "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" - } - }, - "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, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "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": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "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 - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "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" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "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 - }, - "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 - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "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" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "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 - }, - "is-binary-path": { - "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" - } - }, - "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "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 - }, - "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 - }, - "is-glob": { - "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" - } - }, - "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 - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "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-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "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 - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "jest-worker": { - "version": "27.4.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz", - "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "js-yaml": { - "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" - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "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==", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "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" - } - }, - "log-symbols": { - "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" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "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 - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "dependencies": { - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - } - } - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "requires": { - "mime-db": "1.51.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "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" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mocha": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", - "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.2", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.7", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.25", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.1.5", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - } - }, - "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 - }, - "nanoid": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", - "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "node-loader": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/node-loader/-/node-loader-1.0.2.tgz", - "integrity": "sha512-myxAxpyMR7knjA4Uzwf3gjxaMtxSWj2vpm9o6AYWWxQ1S3XMBNeG2vzYcp/5eW03cBGfgSxyP+wntP8qhBJNhQ==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "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 - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "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" - } - }, - "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" - } - }, - "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==", - "dev": true - }, - "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 - }, - "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 - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "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 - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "punycode": { - "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 - }, - "randombytes": { - "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" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "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" - } - }, - "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" - } - }, - "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 - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "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", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "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" - } - }, - "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", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "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 - } - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "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" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "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 - }, - "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" - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "terser": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", - "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - } - }, - "terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", - "dev": true, - "requires": { - "jest-worker": "^27.0.6", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "dependencies": { - "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 - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - } - } - }, - "to-regex-range": { - "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" - } - }, - "ts-loader": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.1.tgz", - "integrity": "sha512-OkyShkcZTsTwyS3Kt7a4rsT/t2qvEVQuKCTg4LJmpj9fhFR7ukGdZwV6Qq3tRUkqcXtfGpPR7+hFKHCG/0d3Lw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - } - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "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" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "uri-js": { - "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" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "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==", - "dev": true - }, - "watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webpack": { - "version": "5.65.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz", - "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.2" - } - }, - "webpack-cli": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", - "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.0", - "@webpack-cli/info": "^1.4.0", - "@webpack-cli/serve": "^1.6.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "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 - } - } - }, - "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.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", - "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", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "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", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "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 - }, - "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", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "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==", - "dev": true - } - } -} diff --git a/src/chains/filecoin/options/package.json b/src/chains/filecoin/options/package.json deleted file mode 100644 index 1c8f953103..0000000000 --- a/src/chains/filecoin/options/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "@ganache/filecoin-options", - "publishConfig": { - "access": "public" - }, - "version": "0.8.0", - "description": "", - "author": "Tim Coulter", - "homepage": "https://github.com/trufflesuite/ganache/tree/develop/src/chains/filecoin/options#readme", - "license": "MIT", - "main": "lib/index.js", - "typings": "typings", - "source": "index.ts", - "directories": { - "lib": "lib", - "test": "test" - }, - "files": [ - "lib/index.*", - "lib/src/index.d.ts", - "dist" - ], - "repository": { - "type": "git", - "url": "https://github.com/trufflesuite/ganache.git", - "directory": "src/chains/filecoin/options" - }, - "scripts": { - "build": "webpack", - "tsc": "tsc --build", - "test": "nyc npm run mocha", - "mocha": "cross-env TS_NODE_FILES=true mocha --exit --check-leaks --throw-deprecation --trace-warnings --require ts-node/register 'tests/**/*.test.ts'" - }, - "bugs": { - "url": "https://github.com/trufflesuite/ganache/issues" - }, - "keywords": [ - "ganache", - "ganache-filecoin-options", - "ethereum", - "evm", - "blockchain", - "smart contracts", - "dapps", - "solidity", - "vyper", - "fe", - "web3", - "tooling", - "truffle" - ], - "devDependencies": { - "@ganache/options": "0.8.0", - "@types/mocha": "9.0.0", - "@types/seedrandom": "3.0.1", - "@types/terser-webpack-plugin": "5.0.2", - "cross-env": "7.0.3", - "mocha": "9.1.3", - "node-loader": "1.0.2", - "seedrandom": "3.0.5", - "terser-webpack-plugin": "5.2.5", - "ts-loader": "9.3.1", - "ts-node": "10.9.1", - "typescript": "4.7.4", - "webpack": "5.65.0", - "webpack-cli": "4.9.1", - "webpack-merge": "5.8.0" - }, - "dependencies": { - "@ganache/flavor": "0.9.0", - "keccak": "3.0.2" - } -} diff --git a/src/chains/filecoin/options/src/chain-options.ts b/src/chains/filecoin/options/src/chain-options.ts deleted file mode 100644 index 1fecb21df5..0000000000 --- a/src/chains/filecoin/options/src/chain-options.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { normalize } from "./helpers"; -import type { Definitions } from "@ganache/flavor"; - -export type ChainConfig = { - options: { - /** - * The IPFS simulator host name/address to listen on. - * - * @defaultValue "127.0.0.1" - */ - readonly ipfsHost: { - type: string; - hasDefault: true; - }; - - /** - * The IPFS simulator port. - * - * @defaultValue 5001 - */ - readonly ipfsPort: { - type: number; - hasDefault: true; - }; - - /** - * When set to `false` only one request will be processed at a time. - * - * @defaultValue true - */ - readonly asyncRequestProcessing: { - type: boolean; - hasDefault: true; - }; - }; -}; - -export const ChainOptions: Definitions = { - ipfsHost: { - normalize, - cliDescription: "The IPFS simulator host name/address to listen on.", - default: () => "127.0.0.1", - cliType: "string" - }, - ipfsPort: { - normalize, - cliDescription: "The IPFS simulator port.", - default: () => 5001, - cliType: "number" - }, - asyncRequestProcessing: { - normalize, - cliDescription: - "When set to `false` only one request will be processed at a time.", - default: () => true, - cliType: "boolean" - } -}; diff --git a/src/chains/filecoin/options/src/database-options.ts b/src/chains/filecoin/options/src/database-options.ts deleted file mode 100644 index 87bd5b480f..0000000000 --- a/src/chains/filecoin/options/src/database-options.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { normalize } from "./helpers"; -import { Definitions } from "@ganache/options"; - -export type DatabaseConfig = { - options: { - /** - * Specify an alternative database instance, like MemDOWN - */ - db: { - type: string | object; - }; - /** - * Specify a path to a directory to save the chain database. If a database - * already exists, that chain will be initialized instead of creating a new - * one. - */ - dbPath: { - type: string; - }; - }; - exclusiveGroups: [["db", "dbPath"]]; -}; - -export const DatabaseOptions: Definitions = { - db: { - normalize, - cliDescription: "Specify an alternative database instance, like MemDOWN", - disableInCLI: true, - conflicts: ["dbPath"] - }, - dbPath: { - normalize, - cliDescription: "Specify a path to a directory to save the chain database.", - cliAliases: ["db"], - cliType: "string", - conflicts: ["db"] - } -}; diff --git a/src/chains/filecoin/options/src/helpers.ts b/src/chains/filecoin/options/src/helpers.ts deleted file mode 100644 index b2961afe57..0000000000 --- a/src/chains/filecoin/options/src/helpers.ts +++ /dev/null @@ -1 +0,0 @@ -export const normalize = (rawInput: T) => rawInput; diff --git a/src/chains/filecoin/options/src/index.ts b/src/chains/filecoin/options/src/index.ts deleted file mode 100644 index c86d0d86fc..0000000000 --- a/src/chains/filecoin/options/src/index.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { ChainConfig, ChainOptions } from "./chain-options"; -import { DatabaseConfig, DatabaseOptions } from "./database-options"; -import { LoggingConfig, LoggingOptions } from "./logging-options"; -import { MinerConfig, MinerOptions } from "./miner-options"; -import { WalletConfig, WalletOptions } from "./wallet-options"; - -import { - Base, - Defaults, - ExternalConfig, - InternalConfig, - Legacy, - LegacyOptions, - OptionName, - OptionRawType, - OptionsConfig -} from "@ganache/options"; - -type FilecoinConfig = { - chain: ChainConfig; - database: DatabaseConfig; - logging: LoggingConfig; - miner: MinerConfig; - wallet: WalletConfig; -}; - -export type FilecoinDefaults = Defaults; -export const FilecoinDefaults: Defaults = { - chain: ChainOptions, - database: DatabaseOptions, - logging: LoggingOptions, - miner: MinerOptions, - wallet: WalletOptions -}; - -type MakeLegacyOptions = UnionToIntersection< - { - [K in OptionName]: K extends LegacyOptions - ? Legacy - : Record>; - }[OptionName] ->; - -type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ( - k: infer I -) => void - ? I - : never; - -export type FilecoinLegacyProviderOptions = Partial< - MakeLegacyOptions & - MakeLegacyOptions & - MakeLegacyOptions & - MakeLegacyOptions ->; - -export type FilecoinProviderOptions = Partial<{ - [K in keyof FilecoinConfig]: ExternalConfig; -}>; - -export type FilecoinInternalOptions = { - [K in keyof FilecoinConfig]: InternalConfig; -}; - -export type FilecoinOptionsConfig = OptionsConfig; -export const FilecoinOptionsConfig = new OptionsConfig(FilecoinDefaults); diff --git a/src/chains/filecoin/options/src/logging-options.ts b/src/chains/filecoin/options/src/logging-options.ts deleted file mode 100644 index cc21d34052..0000000000 --- a/src/chains/filecoin/options/src/logging-options.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { normalize } from "./helpers"; -import type { Definitions } from "@ganache/flavor"; - -export type LoggingConfig = { - options: { - /** - * An object, like `console`, that implements a `log` function. - * - * Defaults to `console` (logs to stdout). - * - * @example - * ```typescript - * { - * log: (message: any) => { - * // handle `message` - * } - * } - * ``` - */ - readonly logger: { - type: { - log(message?: any, ...optionalParams: any[]): void; - }; - hasDefault: true; - }; - }; -}; - -const logger = { log: console.log }; - -export const LoggingOptions: Definitions = { - logger: { - normalize, - cliDescription: - "An object, like `console`, that implements a `log` function.", - disableInCLI: true, - default: () => logger - } -}; diff --git a/src/chains/filecoin/options/src/miner-options.ts b/src/chains/filecoin/options/src/miner-options.ts deleted file mode 100644 index 8252d594ac..0000000000 --- a/src/chains/filecoin/options/src/miner-options.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { normalize } from "./helpers"; -import type { Definitions } from "@ganache/flavor"; - -export type MinerConfig = { - options: { - /** - * Sets the `blockTime` in seconds for automatic mining. A `blockTime` of `0` - * (default) or a negative number enables "instamine mode", where new executable transactions - * will be mined instantly. - * - * Using the `blockTime` option is discouraged unless you have tests which - * require a specific mining interval. - * - * @defaultValue 0 // "instamine mode" - */ - blockTime: { - type: number; - hasDefault: true; - }; - - /** - * Enable mining. Set to `false` to pause the miner. If set to `false`, - * calling `Ganache.MineTipset` method will still mine a tipset/block. - * - * Call `Ganache.EnableMiner` or `Ganache.DisableMiner` to enable/disable - * during runtime. - * - * @defaultValue true - */ - mine: { - type: boolean; - hasDefault: true; - }; - }; -}; - -export const MinerOptions: Definitions = { - blockTime: { - normalize: value => Math.max(0, value), - cliDescription: - 'Sets the `blockTime` in seconds for automatic mining. A `blockTime` of `0` or a negative number enables "instamine mode", where new executable transactions will be mined instantly.', - default: () => 0, - cliType: "number" - }, - mine: { - normalize, - cliDescription: "Enable mining. Set to `false` to pause the miner.", - default: () => true, - cliType: "boolean" - } -}; diff --git a/src/chains/filecoin/options/src/wallet-options.ts b/src/chains/filecoin/options/src/wallet-options.ts deleted file mode 100644 index b4da766999..0000000000 --- a/src/chains/filecoin/options/src/wallet-options.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { normalize } from "./helpers"; -import Seedrandom from "seedrandom"; - -import { Definitions } from "@ganache/options"; - -// Don't change! We need maintain original determinism since the beginning -const DeterministicSeedPhrase = "TestRPC is awesome!"; - -const unseededRng = Seedrandom(); - -const randomAlphaNumericString = (() => { - const alphabet = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - const alphabetLength = alphabet.length; - return (length: number, rng: () => number) => { - let text = ""; - for (let i = 0; i < length; i++) { - text += alphabet[(rng() * alphabetLength) | 0]; - } - return text; - }; -})(); - -export type OptionsAccount = { - balance: string | number | bigint | Buffer; - secretKey?: string; -}; - -export type WalletConfig = { - options: { - /** - * Number of accounts to generate at startup. - * - * @defaultValue 10 - */ - totalAccounts: { - type: number; - hasDefault: true; - }; - - /** - * Use pre-defined, deterministic seed. - */ - deterministic: { - type: boolean; - hasDefault: true; - }; - - /** - * Seed to use to generate a mnemonic. - */ - seed: { - type: string; - hasDefault: true; - }; - - /** - * The default account balance, specified in FIL. - * - * @defaultValue 100 // FIL - */ - defaultBalance: { - type: number; - hasDefault: true; - }; - }; - exclusiveGroups: [["deterministic", "seed"]]; -}; - -export const WalletOptions: Definitions = { - totalAccounts: { - normalize, - cliDescription: "Number of accounts to generate at startup.", - default: () => 10, - cliAliases: ["a"], - cliType: "number" - }, - deterministic: { - normalize, - cliDescription: "Use pre-defined, deterministic seed.", - default: () => false, - cliAliases: ["d"], - cliType: "boolean", - conflicts: ["seed"] - }, - seed: { - normalize, - cliDescription: "Seed to use to generate a mnemonic.", - // The order of the options matter here! `wallet.deterministic` - // needs to be prior to `wallet.seed` for `config.deterministic` - // below to be set correctly - default: config => - config.deterministic === true - ? DeterministicSeedPhrase - : randomAlphaNumericString(10, unseededRng), - defaultDescription: "Random value, unless wallet.deterministic is specified", - cliAliases: ["s"], - cliType: "string", - conflicts: ["deterministic"] - }, - defaultBalance: { - normalize, - cliDescription: "The default account balance, specified in FIL.", - default: () => 100, - cliAliases: ["b"], - cliType: "number" - } -}; diff --git a/src/chains/filecoin/options/tests/index.test.ts b/src/chains/filecoin/options/tests/index.test.ts deleted file mode 100644 index db62a1cfe8..0000000000 --- a/src/chains/filecoin/options/tests/index.test.ts +++ /dev/null @@ -1,5 +0,0 @@ -import assert from "assert"; - -describe("@ganache/filecoin-options", () => { - it("needs tests"); -}); diff --git a/src/chains/filecoin/options/tsconfig.json b/src/chains/filecoin/options/tsconfig.json deleted file mode 100644 index 3e16d042a0..0000000000 --- a/src/chains/filecoin/options/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "extends": "../../../tsconfig-base.json", - "compilerOptions": { - "outDir": "lib", - "declarationDir": "typings", - "composite": true, - "strictNullChecks": true, - "noImplicitAny": true - }, - "include": [ - "index.ts", - "src" - ], - "references": [ - { - "name": "@ganache/options", - "path": "../../../packages/options" - }, - { - "name": "@ganache/flavor", - "path": "../../../packages/flavor" - } - ] -} \ No newline at end of file diff --git a/src/chains/filecoin/options/webpack.config.ts b/src/chains/filecoin/options/webpack.config.ts deleted file mode 100644 index 0a0c0942ad..0000000000 --- a/src/chains/filecoin/options/webpack.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import webpackNode from "./webpack/webpack.node.config"; - -export default [webpackNode]; diff --git a/src/chains/filecoin/options/webpack/webpack.common.config.ts b/src/chains/filecoin/options/webpack/webpack.common.config.ts deleted file mode 100644 index ed8ce559eb..0000000000 --- a/src/chains/filecoin/options/webpack/webpack.common.config.ts +++ /dev/null @@ -1,46 +0,0 @@ -import webpack from "webpack"; -import TerserPlugin from "terser-webpack-plugin"; - -const base: webpack.Configuration = { - mode: "production", - entry: "./index.ts", - devtool: "source-map", - module: { - rules: [ - { - test: /\.tsx?$/, - use: [ - { - loader: "ts-loader" - } - ] - } - ] - }, - resolve: { - extensions: [".tsx", ".ts", ".js"] - }, - output: { - filename: "ganache-filecoin-options.min.js", - library: "Filecoin-flavored Ganache Options", - libraryExport: "default", - libraryTarget: "umd" - }, - stats: { - colors: true - }, - optimization: { - minimize: false, - minimizer: [ - new TerserPlugin({ - terserOptions: { - // Truffle needs our stack traces in its tests: - // https://github.com/trufflesuite/truffle/blob/b2742bc1187a3c1513173d19c58ce0d3a8fe969b/packages/contract-tests/test/errors.js#L280 - keep_fnames: true - } - }) - ] - } -}; - -export default base; diff --git a/src/chains/filecoin/options/webpack/webpack.node.config.ts b/src/chains/filecoin/options/webpack/webpack.node.config.ts deleted file mode 100644 index bbfd23184f..0000000000 --- a/src/chains/filecoin/options/webpack/webpack.node.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import base from "./webpack.common.config"; -import webpack from "webpack"; -import path from "path"; -import merge from "webpack-merge"; - -const config: webpack.Configuration = merge({}, base, { - target: "node12.13", - output: { - path: path.resolve(__dirname, "../", "dist", "node") - }, - externals: ["keccak"], - module: { - rules: [ - { - // webpack load native modules - test: /\.node$/, - loader: "node-loader" - } - ] - } -}); - -export default config; diff --git a/src/chains/filecoin/types/src/api.d.ts.map b/src/chains/filecoin/types/src/api.d.ts.map deleted file mode 100644 index 45c39e67b4..0000000000 --- a/src/chains/filecoin/types/src/api.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../filecoin/src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAY,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAEL,yBAAyB,EAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAY,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAU,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAA4B,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EACL,wBAAwB,EAEzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAW,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAc,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAa,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAW,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAW,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAEL,yBAAyB,EAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EAExB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAW,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAa,MAAM,oBAAoB,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,MAAM,CAAC,OAAO,OAAO,WAAY,YAAW,KAAK,CAAC,GAAG;;IACnD,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;gBAM7C,UAAU,EAAE,UAAU;IAI5B,UAAU;IAIV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;;;;OAKG;IACG,kBAAkB,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAUtD;;;;;;;OAOG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAUtC;;;;OAIG;IACG,0BAA0B,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAK7D;;;;OAIG;IACG,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAKvD;;;;;;;;;;OAUG;IACH,sBAAsB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC;IAoEhE;;;;;;;OAOG;IACH,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAChC,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,OAAO,CAAC;IAanB;;;;;;;;OAQG;IACG,yBAAyB,CAC7B,mBAAmB,EAAE,KAAK,CAAC,iBAAiB,CAAC,GAC5C,OAAO,CAAC,gBAAgB,CAAC;IAS5B;;;;;;;;;;OAUG;IACG,iCAAiC,CACrC,MAAM,EAAE,MAAM,EACd,mBAAmB,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,GAC7C,OAAO,CAAC,gBAAgB,CAAC;IAkB5B;;;;;OAKG;IACG,wBAAwB,CAC5B,kBAAkB,EAAE,iBAAiB,GACpC,OAAO,CAAC,qBAAqB,CAAC;IAejC;;;;;;OAMG;IACG,gCAAgC,CACpC,kBAAkB,EAAE,iBAAiB,GACpC,OAAO,CAAC,uBAAuB,CAAC;IAenC;;;;;OAKG;IACG,0BAA0B,CAC9B,oBAAoB,EAAE,iBAAiB,GACtC,OAAO,CAAC,iBAAiB,CAAC;IAe7B;;;;;;OAMG;IACG,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2BhE;;;;;;;;OAQG;IACG,oBAAoB,CACxB,aAAa,EAAE,uBAAuB,GACrC,OAAO,CAAC,iBAAiB,CAAC;IAQ7B;;;;;;;;;;;;;;;;;;;OAmBG;IACG,yBAAyB,CAC7B,cAAc,EAAE,KAAK,CAAC,uBAAuB,CAAC,GAC7C,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAqBpC;;;;;;;;;;;;;;;;;;OAkBG;IACG,2BAA2B,CAC/B,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,uBAAuB,CAAC;IASnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,gCAAgC,CACpC,QAAQ,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAClC,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAsB1C;;;;;;;;;;OAUG;IACG,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D;;;;;;;;;OASG;IACG,uBAAuB,CAC3B,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,GACxB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAM1C;;;;;;;;;;;;;;;;;;OAkBG;IACG,sBAAsB,CAC1B,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EACzB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAM1C;;;;;OAKG;IACG,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIhD;;;;;;OAMG;IACG,0BAA0B,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAI1D;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,0BAA0B,CAC9B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,oBAAoB,CAAC;IAgChC;;;;;;;;;OASG;IACG,yBAAyB,CAC7B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,GACxB,OAAO,CAAC,mBAAmB,CAAC;IAU/B;;;;;OAKG;IACG,+BAA+B,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAMnE;;;;;;;;;;OAUG;IACG,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjE;;;;;;OAMG;IACG,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOhE;;;;;;;;;OASG;IACG,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuBxE;;;;;OAKG;IACG,qBAAqB,IAAI,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAOhE;;;;;OAKG;IACG,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM7D;;;;;;;;;OASG;IACG,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7D;;;;;OAKG;IACG,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuB1E;;;;;;;;OAQG;IACG,uBAAuB,CAC3B,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,iBAAiB,CAAC;IA6B7B;;;;;;;;OAQG;IACG,qBAAqB,CACzB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,mBAAmB,CAAC;IAoB/B;;;;;;;OAOG;IACG,4BAA4B,CAChC,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,uBAAuB,CAAC;IAsBnC;;;;;;;;;;;OAWG;IACG,uBAAuB,CAC3B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,mBAAmB,EAAE,mBAAmB,GACvC,OAAO,CAAC,OAAO,CAAC;IAyBnB;;;;;;OAMG;IACG,gCAAgC,CACpC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,iBAAiB,CAAC;IAQ7B;;;;;;;;;;;OAWG;IACG,0BAA0B,CAC9B,kBAAkB,EAAE,yBAAyB,GAC5C,OAAO,CAAC,iBAAiB,CAAC;IAO7B;;;;OAIG;IACG,0BAA0B,IAAI,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAQtE;;;;;;;;OAQG;IACG,4BAA4B,CAChC,aAAa,EAAE,iBAAiB,GAC/B,OAAO,CAAC,kBAAkB,CAAC;IAiB9B;;;;;;;;;OASG;IACG,8BAA8B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQzE;;;;;;;;OAQG;IACH,+BAA+B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC;IA2CzE;;;;;;OAMG;IACG,yBAAyB,CAC7B,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAOvC;;;;;;;;OAQG;IACG,yBAAyB,CAC7B,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,OAAO,CAAC;IAInB;;;;;;;;OAQG;IACG,yBAAyB,CAC7B,cAAc,EAAE,wBAAwB,EACxC,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,IAAI,CAAC;IAOhB;;;;;OAKG;IACG,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAMvD;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5C;;OAEG;IACG,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C;;;;;;;;;;;OAWG;IACG,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhD;;;;;;;;OAQG;IACH,4BAA4B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC;IAgDtE;;;;;;OAMG;IACG,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAUzE"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/blockchain.d.ts.map b/src/chains/filecoin/types/src/blockchain.d.ts.map deleted file mode 100644 index cded356274..0000000000 --- a/src/chains/filecoin/types/src/blockchain.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"blockchain.d.ts","sourceRoot":"","sources":["../../filecoin/src/blockchain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAQ7D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG5C,OAAO,EAAE,IAAI,EAAmB,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,aAAa,MAAM,gCAAgC,CAAC;AAC3D,OAAO,kBAAkB,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAI5D,OAAO,oBAAoB,MAAM,iCAAiC,CAAC;AACnE,OAAO,oBAAoB,MAAM,wCAAwC,CAAC;AAE1E,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,iBAAiB,MAAM,qCAAqC,CAAC;AAGpE,OAAO,eAAe,MAAM,mCAAmC,CAAC;AAGhE,oBAAY,gBAAgB,GAAG;IAC7B,KAAK,IAAI,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,QAAQ,CAAC;CACtB,CAAC;AAKF,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,QAAQ,CAAC,KAAK,CACpD,gBAAgB,EAChB,MAAM,gBAAgB,CACvB;;IACQ,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC9C,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C,qBAAqB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACnD,oBAAoB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAClD,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IAE/C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAGxB,IAAI,YAAY,YAEf;IAEM,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAGzC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAE1C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAAwB;IAE7C,OAAO,CAAC,GAAG,CAA8B;IAKzC,IAAI,WAAW,IAAI,MAAM,GAAG,IAAI,CAE/B;IAED,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,EAAE,uBAAuB;IAsCtC,UAAU;IA2FV,YAAY;IAUlB;;OAEG;IACG,IAAI;IAwBV,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,CAEtB;YAEa,YAAY;IAgBpB,WAAW;IASX,YAAY;IAYlB,aAAa,IAAI,MAAM;IASvB,YAAY,IAAI,MAAM;IAUhB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC;IA0GrE,UAAU,CACd,aAAa,EAAE,aAAa,EAC5B,WAAW,GAAE,OAAc,GAC1B,OAAO,CAAC,OAAO,CAAC;IAuCb,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCzC,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAwB7C,UAAU,CAAC,YAAY,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAmLnD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAgB/B,iBAAiB;YAYjB,YAAY;IA4DpB,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAqEtD,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAavD,QAAQ,CAAC,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BrE,gBAAgB,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B7D,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,GACzB,OAAO,CAAC,MAAM,CAAC;IA4BZ,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAQhE,OAAO,CAAC,eAAe;CAQxB"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/connector.d.ts.map b/src/chains/filecoin/types/src/connector.d.ts.map deleted file mode 100644 index e4f55b0556..0000000000 --- a/src/chains/filecoin/types/src/connector.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../filecoin/src/connector.ts"],"names":[],"mappings":";AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,WAAW,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,gBAAgB,MAAM,YAAY,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,SAAS,EACV,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,oBAAY,QAAQ,GAAG,gBAAgB,CAAC;AACxC,eAAO,MAAM,QAAQ,yBAAmB,CAAC;AAEzC,qBAAa,SACX,SAAQ,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAC5C,YACE,KAAK,CAAC,SAAS,CACb,WAAW,EACX,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EACjC,YAAY,CAAC,QAAQ,CACtB;;IAGH,IAAI,QAAQ,qBAEX;gBAGC,eAAe,EAAE,uBAA4B,EAC7C,QAAQ,EAAE,KAAK,CAAC,QAAQ;IAOpB,OAAO;IAOb,KAAK,CAAC,OAAO,EAAE,MAAM;IAIrB,MAAM,CACJ,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAC1C,WAAW,EAAE,WAAW,GAAG,SAAS,GACnC,OAAO,CAAC,GAAG,CAAC;IAIf,MAAM,CACJ,MAAM,EAAE,GAAG,EACX,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,GACzC,gBAAgB;IAKnB,WAAW,CACT,KAAK,EAAE,KAAK,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAC/B,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,GACzC,gBAAgB;IAKb,KAAK;CAGZ"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/data-managers/account-manager.d.ts.map b/src/chains/filecoin/types/src/data-managers/account-manager.d.ts.map deleted file mode 100644 index d017050fae..0000000000 --- a/src/chains/filecoin/types/src/data-managers/account-manager.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"account-manager.d.ts","sourceRoot":"","sources":["../../../filecoin/src/data-managers/account-manager.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,iBAAiB,MAAM,uBAAuB,CAAC;AAEtD,OAAO,QAAQ,MAAM,aAAa,CAAC;AAEnC,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC;;WAI5D,UAAU,CACrB,IAAI,EAAE,OAAO,EACb,iBAAiB,EAAE,iBAAiB,EACpC,QAAQ,EAAE,QAAQ;gBAOlB,IAAI,EAAE,OAAO,EACb,iBAAiB,EAAE,iBAAiB,EACpC,QAAQ,EAAE,QAAQ;IAed,UAAU,CAAC,OAAO,EAAE,OAAO;IAa3B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBnD;;;;;OAKG;IACG,uBAAuB,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAQlD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAMzC,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC;IAcb,cAAc,CAAC,OAAO,EAAE,MAAM;CAKrC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/data-managers/block-header-manager.d.ts.map b/src/chains/filecoin/types/src/data-managers/block-header-manager.d.ts.map deleted file mode 100644 index 0c0fd0fac2..0000000000 --- a/src/chains/filecoin/types/src/data-managers/block-header-manager.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"block-header-manager.d.ts","sourceRoot":"","sources":["../../../filecoin/src/data-managers/block-header-manager.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAExE,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,OAAO,CACrD,WAAW,EACX,iBAAiB,CAClB;WACc,UAAU,CAAC,IAAI,EAAE,OAAO;gBAKzB,IAAI,EAAE,OAAO;IAIzB;;;OAGG;IACG,cAAc,CAAC,WAAW,EAAE,WAAW;CAG9C"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/data-managers/block-messages-manager.d.ts.map b/src/chains/filecoin/types/src/data-managers/block-messages-manager.d.ts.map deleted file mode 100644 index c178c39459..0000000000 --- a/src/chains/filecoin/types/src/data-managers/block-messages-manager.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"block-messages-manager.d.ts","sourceRoot":"","sources":["../../../filecoin/src/data-managers/block-messages-manager.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,oBAAoB,MAAM,mBAAmB,CAAC;AAGrD,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,OAAO,CACvD,aAAa,EACb,mBAAmB,CACpB;;WAGc,UAAU,CACrB,IAAI,EAAE,OAAO,EACb,oBAAoB,EAAE,oBAAoB;gBAMhC,IAAI,EAAE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB;IAK/D,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa;IAwBvD,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC;CAyB9D"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/data-managers/deal-info-manager.d.ts.map b/src/chains/filecoin/types/src/data-managers/deal-info-manager.d.ts.map deleted file mode 100644 index 2468f7ddaf..0000000000 --- a/src/chains/filecoin/types/src/data-managers/deal-info-manager.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"deal-info-manager.d.ts","sourceRoot":"","sources":["../../../filecoin/src/data-managers/deal-info-manager.ts"],"names":[],"mappings":";AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAIhE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC;;IAC5E,MAAM,CAAC,KAAK,SAAwB;WAIvB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO;gBAKnD,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO;IAK7C,cAAc,CAAC,IAAI,EAAE,QAAQ;IAI7B,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM;IAY1D,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAgBhD,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAqBpC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAUrD,iBAAiB,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YActD,WAAW;CAG1B"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/data-managers/manager.d.ts.map b/src/chains/filecoin/types/src/data-managers/manager.d.ts.map deleted file mode 100644 index ce8212bcaa..0000000000 --- a/src/chains/filecoin/types/src/data-managers/manager.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../filecoin/src/data-managers/manager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG/E,oBAAY,YAAY,CAAC,CAAC,IAAI;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,CAAC;AAE1D,MAAM,CAAC,OAAO,OAAO,OAAO,CAC1B,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EAC/B,CAAC,SAAS,UAAU;;IAIpB,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;gBAEtB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EACrB,OAAO,CAAC,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAO/C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAe7D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAMrD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjE,GAAG,CAAC,GAAG,EAAE,MAAM;CAGhB"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/data-managers/message-manager.d.ts.map b/src/chains/filecoin/types/src/data-managers/message-manager.d.ts.map deleted file mode 100644 index 642d724bbb..0000000000 --- a/src/chains/filecoin/types/src/data-managers/message-manager.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"message-manager.d.ts","sourceRoot":"","sources":["../../../filecoin/src/data-managers/message-manager.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE9E,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,OAAO,CACvD,aAAa,EACb,mBAAmB,CACpB;WACc,UAAU,CAAC,IAAI,EAAE,OAAO;gBAKzB,IAAI,EAAE,OAAO;IAInB,gBAAgB,CAAC,OAAO,EAAE,aAAa;CAG9C"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/data-managers/private-key-manager.d.ts.map b/src/chains/filecoin/types/src/data-managers/private-key-manager.d.ts.map deleted file mode 100644 index 9df7e3ada2..0000000000 --- a/src/chains/filecoin/types/src/data-managers/private-key-manager.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"private-key-manager.d.ts","sourceRoot":"","sources":["../../../filecoin/src/data-managers/private-key-manager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,MAAM,CAAC,OAAO,OAAO,iBAAiB;;IACpC,MAAM,CAAC,0BAA0B,SAA6C;IAC9E,OAAO,CAAC,IAAI,CAAU;IAGtB,IAAI,wBAAwB,aAE3B;WAEY,UAAU,CAAC,IAAI,EAAE,OAAO;gBAyBzB,IAAI,EAAE,OAAO,EAAE,wBAAwB,EAAE,MAAM,EAAE;IAKvD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAa5D;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAiB3C,aAAa,CAAC,OAAO,EAAE,MAAM;IAK7B,gBAAgB,CAAC,OAAO,EAAE,MAAM;IAkBhC,UAAU,CAAC,OAAO,EAAE,MAAM;CAqBjC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/data-managers/tipset-manager.d.ts.map b/src/chains/filecoin/types/src/data-managers/tipset-manager.d.ts.map deleted file mode 100644 index de413f343e..0000000000 --- a/src/chains/filecoin/types/src/data-managers/tipset-manager.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tipset-manager.d.ts","sourceRoot":"","sources":["../../../filecoin/src/data-managers/tipset-manager.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,kBAAkB,MAAM,wBAAwB,CAAC;AAExD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC;;IACtE;;OAEG;IACI,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEtC;;OAEG;IACI,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;WAIvB,UAAU,CACrB,IAAI,EAAE,OAAO,EACb,kBAAkB,EAAE,kBAAkB;gBAM5B,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB;IAKjE;;;OAGG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM;IAgBxB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAU3D,gBAAgB,CAAC,MAAM,EAAE,MAAM;CAwBtC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/database.d.ts.map b/src/chains/filecoin/types/src/database.d.ts.map deleted file mode 100644 index e896210736..0000000000 --- a/src/chains/filecoin/types/src/database.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../filecoin/src/database.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AASpE,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,QAAQ;;IAKrC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAChC,EAAE,EAAE,OAAO,GAAG,IAAI,CAAQ;IAE1B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAQ;IAC/B,MAAM,EAAE,OAAO,GAAG,IAAI,CAAQ;IAC9B,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAQ;IAChC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAQ;IACnC,cAAc,EAAE,OAAO,GAAG,IAAI,CAAQ;IACtC,aAAa,EAAE,OAAO,GAAG,IAAI,CAAQ;IACrC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAQ;IAC7B,eAAe,EAAE,OAAO,GAAG,IAAI,CAAQ;IAG9C,IAAI,WAAW,YAEd;IAID;;;;;;;OAOG;gBACS,OAAO,EAAE,uBAAuB,CAAC,UAAU,CAAC;IAMxD,UAAU,sBAmDR;IAEF;;;;;;;;;;OAUG;IACI,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC;IA6B3B;;;;OAIG;IACU,KAAK;CA+CnB"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/gas.d.ts.map b/src/chains/filecoin/types/src/gas.d.ts.map deleted file mode 100644 index ac6bec0f4e..0000000000 --- a/src/chains/filecoin/types/src/gas.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"gas.d.ts","sourceRoot":"","sources":["../../filecoin/src/gas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;CAW3B,CAAC;AAGF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,UAYvD;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,UAe3D;AAQD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,UAIhD;AAGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,QA2CzE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAKpD"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/ipfs-server.d.ts.map b/src/chains/filecoin/types/src/ipfs-server.d.ts.map deleted file mode 100644 index bbedb00856..0000000000 --- a/src/chains/filecoin/types/src/ipfs-server.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ipfs-server.d.ts","sourceRoot":"","sources":["../../filecoin/src/ipfs-server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAwB,MAAM,MAAM,CAAC;AAElD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,aAAK,gBAAgB,GAAG,IAAI,CAC1B,uBAAuB,CAAC,OAAO,CAAC,EAChC,UAAU,GAAG,UAAU,CACxB,CAAC;AAOF,cAAM,UAAU;IACd,SAAgB,OAAO,EAAE,gBAAgB,CAAC;IAEnC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAEzB,OAAO,CAAC,UAAU,CAAwB;gBAE9B,YAAY,EAAE,gBAAgB;IAMpC,KAAK,CAAC,eAAe,EAAE,MAAM;IA+C7B,IAAI;CAQX;AAED,eAAe,UAAU,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/message.d.ts.map b/src/chains/filecoin/types/src/message.d.ts.map deleted file mode 100644 index d3331e8c0d..0000000000 --- a/src/chains/filecoin/types/src/message.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../filecoin/src/message.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAUxD,wBAAgB,sBAAsB,CACpC,CAAC,EAAE,OAAO,EACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,KAAK,GAAG,IAAI,CAoEd;AAsBD,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CA6CvB;AAGD,wBAAsB,YAAY,CAChC,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CA2BvB"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/provider.d.ts.map b/src/chains/filecoin/types/src/provider.d.ts.map deleted file mode 100644 index 966c44b155..0000000000 --- a/src/chains/filecoin/types/src/provider.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../filecoin/src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAgB,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,OAAO,MAAM,mCAAmC,CAAC;AACxD,OAAO,WAAW,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAC;AAChE,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAEL,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,2BAA2B,CAAC;AAKnC,MAAM,CAAC,OAAO,OAAO,gBACnB,SAAQ,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,GAAG,YAAY,CAEnD,YAAW,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;;IAKtC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAEhC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAiB;gBAEnC,OAAO,EAAE,uBAA4B,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ;IAarE,UAAU;IAKhB;;OAEG;IACI,UAAU;IAIjB;;OAEG;IACU,kBAAkB;kBAKf,OAAO;mBAAa,MAAM;iBAAW,MAAM;;IAerD,OAAO;IAIP,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;IAK1C,WAAW,CAAC,MAAM,SAAS,MAAM,WAAW,GAAG,MAAM,WAAW,EACpE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;;;;;IAuCjC,QAAQ;IAIR,MAAM;IAKN,gBAAgB,CACpB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EACrC,YAAY,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,EACxC,oBAAoB,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI;IAoBrC,OAAO;IAIP,MAAM;IAIN,OAAO;IAIP,IAAI;CAGX"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/schema.d.ts.map b/src/chains/filecoin/types/src/schema.d.ts.map deleted file mode 100644 index e97672a7aa..0000000000 --- a/src/chains/filecoin/types/src/schema.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../filecoin/src/schema.ts"],"names":[],"mappings":"AACA,OAAoB,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAC;AAE7E,QAAA,MAAM,aAAa,EAAE,MAEV,CAAC;AAgCZ,eAAe,aAAa,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/account.d.ts.map b/src/chains/filecoin/types/src/things/account.d.ts.map deleted file mode 100644 index be87686401..0000000000 --- a/src/chains/filecoin/types/src/things/account.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EACL,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,cAAc,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAK/B,aAAK,aAAa,GAAG;IACnB,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,SAAS,CAAC;SAC3B,CAAC;QACF,OAAO,EAAE;YACP,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,SAAS,CAAC;SAC3B,CAAC;QACF,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,OACJ,SAAQ,kBAAkB,CAAC,aAAa,CACxC,YAAW,kBAAkB,CAAC,aAAa,CAAC;;IAC5C,IAAI,MAAM,IAAI,WAAW,CAAC,aAAa,CAAC,CAoBvC;IAED,MAAM,CAAC,MAAM,CACX,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,KAAK,CAAC,qBAAyD,EACpE,QAAQ,GAAE,eAAqC,EAC/C,OAAO,GAAE,cAAuC,GAC/C,OAAO;gBAWR,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,GACxC,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAShD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAI/C,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAIpD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,OAAO,IAAI,OAAO,CAErB;CACF;AAED,aAAK,iBAAiB,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/address.d.ts.map b/src/chains/filecoin/types/src/things/address.d.ts.map deleted file mode 100644 index 70e55ed036..0000000000 --- a/src/chains/filecoin/types/src/things/address.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/address.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAK7D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,aAAK,eAAe;IAClB,EAAE,IAAA;IACF,SAAS,IAAA;IACT,KAAK,IAAA;IACL,GAAG,IAAA;IACH,OAAO,MAAM;CACd;AAED,aAAK,cAAc;IACjB,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,YAAY;CACpB;AAUD,cAAM,OAAQ,SAAQ,mBAAmB,CAAC,aAAa,CAAC;;IACtD,IAAI,MAAM,OAET;IAED,MAAM,CAAC,QAAQ,CAAC,wBAAwB,OAAO;IAC/C,MAAM,CAAC,QAAQ,CAAC,YAAY,QAAQ;IACpC,MAAM,CAAC,QAAQ,CAAC,cAAc,KAAK;IACnC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,sCAAsC;IAG1E,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IACD,IAAI,OAAO,IAAI,cAAc,CAE5B;IACD,IAAI,QAAQ,IAAI,eAAe,CAE9B;gBAEW,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAKtD,aAAa,CAAC,UAAU,EAAE,MAAM;IAI1B,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAcxD,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAsB9C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B3C,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,OAAO,CAAC;IAuBnB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAiBnD,MAAM,CAAC,yBAAyB,CAC9B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,UAAU,GAClB,MAAM;IAUT,MAAM,CAAC,cAAc,CACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,eAAqC,EAC/C,OAAO,GAAE,cAAuC,GAC/C,OAAO;IAsCV,MAAM,CAAC,MAAM,CACX,GAAG,GAAE,KAAK,CAAC,qBAAyD,EACpE,QAAQ,GAAE,eAAqC,EAC/C,OAAO,GAAE,cAAuC,GAC/C,OAAO;IAQV,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc;IAkB1D,MAAM,CAAC,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,eAAe;IAwB5D;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CACX,EAAE,EAAE,MAAM,EACV,sBAAsB,GAAE,OAAe,EACvC,OAAO,GAAE,OAAe,EACxB,OAAO,GAAE,cAAuC,GAC/C,OAAO;IAgBV,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAWzE,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;CAqE/C;AAED,aAAK,iBAAiB,GAAG,MAAM,CAAC;AAEhC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/balance.d.ts.map b/src/chains/filecoin/types/src/things/balance.d.ts.map deleted file mode 100644 index 6bf91e0828..0000000000 --- a/src/chains/filecoin/types/src/things/balance.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/balance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAGhF,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,cAAM,OAAQ,SAAQ,mBAAmB,CAAC,aAAa,CAAC;IACtD,IAAI,MAAM,IAAI,iBAAiB,CAAC,aAAa,CAAC,CAK7C;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAIxC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAIxC,KAAK,IAAI,MAAM;IAIf,MAAM,CAAC,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAInD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAKxD;AAED,aAAK,iBAAiB,GAAG,MAAM,CAAC;AAEhC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/beacon-entry.d.ts.map b/src/chains/filecoin/types/src/things/beacon-entry.d.ts.map deleted file mode 100644 index f901d92241..0000000000 --- a/src/chains/filecoin/types/src/things/beacon-entry.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"beacon-entry.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/beacon-entry.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAI/B,UAAU,iBAAiB;IACzB,UAAU,EAAE;QACV,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;QACF,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;KACH,CAAC;CACH;AAED,cAAM,WACJ,SAAQ,kBAAkB,CAAC,iBAAiB,CAC5C,YAAW,kBAAkB,CAAC,iBAAiB,CAAC;IAChD,IAAI,MAAM,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAgB3C;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,GAC5C,OAAO,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;IAQpD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,aAAK,qBAAqB,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/block-header.d.ts.map b/src/chains/filecoin/types/src/things/block-header.d.ts.map deleted file mode 100644 index 836d97b94f..0000000000 --- a/src/chains/filecoin/types/src/things/block-header.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"block-header.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/block-header.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAIvD,UAAU,iBAAiB;IACzB,UAAU,EAAE;QACV,KAAK,EAAE;YACL,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;QACF,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,gBAAgB,CAAC;YACjC,cAAc,EAAE,QAAQ,CAAC;SAC1B,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,aAAa,CAAC;YACpB,cAAc,EAAE,uBAAuB,CAAC;YACxC,cAAc,EAAE,eAAe,CAAC;SACjC,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YACzB,cAAc,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC7C,cAAc,EAAE,eAAe,CAAC;SACjC,CAAC;QACF,YAAY,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YACvB,cAAc,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC3C,cAAc,EAAE,cAAc,CAAC;SAChC,CAAC;QACF,OAAO,EAAE;YACP,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACrB,cAAc,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACzC,cAAc,EAAE,SAAS,CAAC;SAC3B,CAAC;QACF,YAAY,EAAE;YACZ,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,cAAc,CAAC;SAChC,CAAC;QACF,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,QAAQ,CAAC;SAC1B,CAAC;QACF,eAAe,EAAE;YACf,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,iBAAiB,CAAC;SACnC,CAAC;QACF,qBAAqB,EAAE;YACrB,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,uBAAuB,CAAC;SACzC,CAAC;QACF,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,UAAU,CAAC;SAC5B,CAAC;QACF,YAAY,EAAE;YACZ,IAAI,EAAE,SAAS,CAAC;YAChB,cAAc,EAAE,mBAAmB,CAAC;YACpC,cAAc,EAAE,cAAc,CAAC;SAChC,CAAC;QACF,SAAS,EAAE;YACT,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,WAAW,CAAC;SAC7B,CAAC;QACF,cAAc,EAAE;YACd,IAAI,EAAE,SAAS,CAAC;YAChB,cAAc,EAAE,mBAAmB,CAAC;YACpC,cAAc,EAAE,UAAU,CAAC;SAC5B,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;YACZ,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC;YACtB,cAAc,EAAE,eAAe,CAAC;SACjC,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,eAAe,CAAC;SACjC,CAAC;KACH,CAAC;CACH;AAED,cAAM,WACJ,SAAQ,kBAAkB,CAAC,iBAAiB,CAC5C,YAAW,kBAAkB,CAAC,iBAAiB,CAAC;IAChD,IAAI,MAAM,IAAI,WAAW,CAAC,iBAAiB,CAAC,CA2F3C;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,GAC5C,OAAO,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;IAoDpD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAClC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,SAAS,CAAC;IACxB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,SAAS,CAAC;IAC1B,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,aAAK,qBAAqB,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/block-messages.d.ts.map b/src/chains/filecoin/types/src/things/block-messages.d.ts.map deleted file mode 100644 index 68d2559901..0000000000 --- a/src/chains/filecoin/types/src/things/block-messages.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"block-messages.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/block-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAI1E,aAAK,mBAAmB,GAAG;IACzB,UAAU,EAAE;QACV,WAAW,EAAE;YACX,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACrB,cAAc,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACzC,cAAc,EAAE,aAAa,CAAC;SAC/B,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YAC3B,cAAc,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAC/C,cAAc,EAAE,eAAe,CAAC;SACjC,CAAC;QACF,IAAI,EAAE;YACJ,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACrB,cAAc,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACzC,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,aACJ,SAAQ,kBAAkB,CAAC,mBAAmB,CAC9C,YAAW,kBAAkB,CAAC,mBAAmB,CAAC;IAClD,IAAI,MAAM,IAAI,WAAW,CAAC,mBAAmB,CAAC,CAqB7C;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,GAC9C,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IAatD;;;;OAIG;IACH,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5B;;;;OAIG;IACH,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACpC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAGrB,cAAc;IAsBd,MAAM,CAAC,kBAAkB,CACvB,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,GACnC,aAAa;CAejB;AAED,aAAK,uBAAuB,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/channel-id.d.ts.map b/src/chains/filecoin/types/src/things/channel-id.d.ts.map deleted file mode 100644 index 8f6179eb79..0000000000 --- a/src/chains/filecoin/types/src/things/channel-id.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"channel-id.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/channel-id.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAI/B,aAAK,eAAe,GAAG;IACrB,UAAU,EAAE;QACV,SAAS,EAAE;YACT,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,WAAW,CAAC;SAC7B,CAAC;QACF,SAAS,EAAE;YACT,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,WAAW,CAAC;SAC7B,CAAC;QACF,EAAE,EAAE;YACF,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,IAAI,CAAC;SACtB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,SACJ,SAAQ,kBAAkB,CAAC,eAAe,CAC1C,YAAW,kBAAkB,CAAC,eAAe,CAAC;IAC9C,IAAI,MAAM,IAAI,WAAW,CAAC,eAAe,CAAC,CAkBzC;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,GAC1C,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IASlD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,aAAK,mBAAmB,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAE7D,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/cid.d.ts.map b/src/chains/filecoin/types/src/things/cid.d.ts.map deleted file mode 100644 index 1a34e04aad..0000000000 --- a/src/chains/filecoin/types/src/things/cid.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"cid.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/cid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAM7D,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,cAAM,GAAI,SAAQ,mBAAmB,CAAC,SAAS,CAAC;IAC9C,IAAI,MAAM,OAET;IAGD,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAItC,MAAM,CAAC,OAAO,IAAI,GAAG;CAWtB;AAED,aAAK,aAAa,GAAG,MAAM,CAAC;AAE5B,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/data-transfer-channel.d.ts.map b/src/chains/filecoin/types/src/things/data-transfer-channel.d.ts.map deleted file mode 100644 index daf02fd76c..0000000000 --- a/src/chains/filecoin/types/src/things/data-transfer-channel.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"data-transfer-channel.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/data-transfer-channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAI/B,aAAK,yBAAyB,GAAG;IAC/B,UAAU,EAAE;QACV,UAAU,EAAE;YACV,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,YAAY,CAAC;SAC9B,CAAC;QACF,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,QAAQ,CAAC;SAC1B,CAAC;QACF,OAAO,EAAE;YACP,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,SAAS,CAAC;SAC3B,CAAC;QACF,WAAW,EAAE;YACX,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,OAAO,CAAC;YACxB,cAAc,EAAE,aAAa,CAAC;SAC/B,CAAC;QACF,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,OAAO,CAAC;YACxB,cAAc,EAAE,UAAU,CAAC;SAC5B,CAAC;QACF,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,SAAS,CAAC;SAC3B,CAAC;QACF,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,SAAS,CAAC;SAC3B,CAAC;QACF,SAAS,EAAE;YACT,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,WAAW,CAAC;SAC7B,CAAC;QACF,WAAW,EAAE;YACX,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,aAAa,CAAC;SAC/B,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,mBACJ,SAAQ,kBAAkB,CAAC,yBAAyB,CACpD,YAAW,kBAAkB,CAAC,yBAAyB,CAAC;IACxD,IAAI,MAAM,IAAI,WAAW,CAAC,yBAAyB,CAAC,CAiDnD;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC,GACpD,OAAO,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;IAe5D,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,aAAK,6BAA6B,GAAG,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;AAEjF,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/deal-info.d.ts.map b/src/chains/filecoin/types/src/things/deal-info.d.ts.map deleted file mode 100644 index 9cc3fabf8f..0000000000 --- a/src/chains/filecoin/types/src/things/deal-info.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"deal-info.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/deal-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACL,iBAAiB,EAElB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,8BAA8B,EAC9B,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAIvD,aAAK,cAAc,GAAG;IACpB,UAAU,EAAE;QACV,WAAW,EAAE;YACX,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,aAAa,CAAC;SAC/B,CAAC;QACF,KAAK,EAAE;YACL,IAAI,EAAE,iBAAiB,CAAC;YACxB,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;QACF,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,SAAS,CAAC;SAC3B,CAAC;QACF,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,UAAU,CAAC;SAC5B,CAAC;QACF,OAAO,EAAE;YACP,IAAI,EAAE,oBAAoB,CAAC;YAC3B,cAAc,EAAE,8BAA8B,CAAC;YAC/C,cAAc,EAAE,SAAS,CAAC;SAC3B,CAAC;QACF,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;YACrB,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAC;YACzC,cAAc,EAAE,UAAU,CAAC;SAC5B,CAAC;QACF,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,eAAe,CAAC;SACjC,CAAC;QACF,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,UAAU,CAAC;SAC5B,CAAC;QACF,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,QAAQ,CAAC;SAC1B,CAAC;QACF,YAAY,EAAE;YACZ,IAAI,EAAE,IAAI,CAAC;YACX,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,cAAc,CAAC;SAChC,CAAC;QACF,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,OAAO,CAAC;YACxB,cAAc,EAAE,UAAU,CAAC;SAC5B,CAAC;QACF,iBAAiB,EAAE;YACjB,IAAI,EAAE,SAAS,CAAC;YAChB,cAAc,EAAE,mBAAmB,CAAC;YACpC,cAAc,EAAE,mBAAmB,CAAC;SACrC,CAAC;QACF,YAAY,EAAE;YACZ,IAAI,EAAE,mBAAmB,CAAC;YAC1B,cAAc,EAAE,6BAA6B,CAAC;YAC9C,cAAc,EAAE,cAAc,CAAC;SAChC,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,QACJ,SAAQ,kBAAkB,CAAC,cAAc,CACzC,YAAW,kBAAkB,CAAC,cAAc,CAAC;IAC7C,IAAI,MAAM,IAAI,WAAW,CAAC,cAAc,CAAC,CA0ExC;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,GACzC,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAgCjD,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,IAAI,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,YAAY,EAAE,mBAAmB,CAAC;IAElC,YAAY;CAGb;AAED,aAAK,kBAAkB,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/election-proof.d.ts.map b/src/chains/filecoin/types/src/things/election-proof.d.ts.map deleted file mode 100644 index 0a46b7e312..0000000000 --- a/src/chains/filecoin/types/src/things/election-proof.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"election-proof.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/election-proof.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAI/B,UAAU,mBAAmB;IAC3B,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,UAAU,CAAC;SAC5B,CAAC;QACF,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,UAAU,CAAC;SAC5B,CAAC;KACH,CAAC;CACH;AAED,cAAM,aACJ,SAAQ,kBAAkB,CAAC,mBAAmB,CAC9C,YAAW,kBAAkB,CAAC,mBAAmB,CAAC;IAClD,IAAI,MAAM,IAAI,WAAW,CAAC,mBAAmB,CAAC,CAgB7C;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,GAC9C,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IAQtD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,aAAK,uBAAuB,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/file-ref.d.ts.map b/src/chains/filecoin/types/src/things/file-ref.d.ts.map deleted file mode 100644 index fdaf237b48..0000000000 --- a/src/chains/filecoin/types/src/things/file-ref.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"file-ref.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/file-ref.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAI/B,aAAK,aAAa,GAAG;IACnB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,KAAK,EAAE;YACL,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,OAAO,CAAC;YACxB,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,OACJ,SAAQ,kBAAkB,CAAC,aAAa,CACxC,YAAW,kBAAkB,CAAC,aAAa,CAAC;IAC5C,IAAI,MAAM,IAAI,WAAW,CAAC,aAAa,CAAC,CAavC;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,GACxC,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAQhD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,aAAK,iBAAiB,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/head-change.d.ts.map b/src/chains/filecoin/types/src/things/head-change.d.ts.map deleted file mode 100644 index 4a3d575030..0000000000 --- a/src/chains/filecoin/types/src/things/head-change.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"head-change.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/head-change.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIpD,UAAU,gBAAgB;IACxB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,GAAG,EAAE;YACH,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,gBAAgB,CAAC;YACjC,cAAc,EAAE,KAAK,CAAC;SACvB,CAAC;KACH,CAAC;CACH;AAED,cAAM,UACJ,SAAQ,kBAAkB,CAAC,gBAAgB,CAC3C,YAAW,kBAAkB,CAAC,gBAAgB,CAAC;IAC/C,IAAI,MAAM,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAa1C;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,GAC3C,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAQnD,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,aAAK,oBAAoB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AAG/D,oBAAY,cAAc;IACxB,QAAQ,WAAW;IACnB,OAAO,UAAU;IACjB,SAAS,YAAY;CACtB;AAED,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/key-info.d.ts.map b/src/chains/filecoin/types/src/things/key-info.d.ts.map deleted file mode 100644 index 3f1343d4ec..0000000000 --- a/src/chains/filecoin/types/src/things/key-info.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"key-info.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/key-info.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAI/B,UAAU,aAAa;IACrB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,OAAO,CAAC;YACxB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,UAAU,EAAE;YACV,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,YAAY,CAAC;SAC9B,CAAC;KACH,CAAC;CACH;AAED,cAAM,OACJ,SAAQ,kBAAkB,CAAC,aAAa,CACxC,YAAW,kBAAkB,CAAC,aAAa,CAAC;IAC5C,IAAI,MAAM,IAAI,WAAW,CAAC,aAAa,CAAC,CAgBvC;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,GACxC,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAQhD,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,aAAK,iBAAiB,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/key-type.d.ts.map b/src/chains/filecoin/types/src/things/key-type.d.ts.map deleted file mode 100644 index dbbfc06860..0000000000 --- a/src/chains/filecoin/types/src/things/key-type.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"key-type.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/key-type.ts"],"names":[],"mappings":"AACA,oBAAY,OAAO;IACjB,UAAU,QAAQ;IAClB,gBAAgB,cAAc;IAC9B,sBAAsB,qBAAqB;CAC5C"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/message-send-spec.d.ts.map b/src/chains/filecoin/types/src/things/message-send-spec.d.ts.map deleted file mode 100644 index 068495b1f9..0000000000 --- a/src/chains/filecoin/types/src/things/message-send-spec.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"message-send-spec.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/message-send-spec.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAI/B,aAAK,qBAAqB,GAAG;IAC3B,UAAU,EAAE;QACV,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,QAAQ,CAAC;SAC1B,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,eACJ,SAAQ,kBAAkB,CAAC,qBAAqB,CAChD,YAAW,kBAAkB,CAAC,qBAAqB,CAAC;IACpD,IAAI,MAAM,IAAI,WAAW,CAAC,qBAAqB,CAAC,CAQ/C;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,GAChD,OAAO,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;IAOxD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,aAAK,yBAAyB,GAAG,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/message.d.ts.map b/src/chains/filecoin/types/src/things/message.d.ts.map deleted file mode 100644 index 11da5d189c..0000000000 --- a/src/chains/filecoin/types/src/things/message.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/message.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAI/B,aAAK,aAAa,GAAG;IACnB,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,SAAS,CAAC;SAC3B,CAAC;QACF,EAAE,EAAE;YACF,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,IAAI,CAAC;SACtB,CAAC;QACF,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;QACF,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;QACF,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,UAAU,CAAC;SAC5B,CAAC;QACF,SAAS,EAAE;YACT,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,WAAW,CAAC;SAC7B,CAAC;QACF,UAAU,EAAE;YACV,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,YAAY,CAAC;SAC9B,CAAC;QACF,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,QAAQ,CAAC;SAC1B,CAAC;QACF,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,QAAQ,CAAC;SAC1B,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,OACJ,SAAQ,kBAAkB,CAAC,aAAa,CACxC,YAAW,kBAAkB,CAAC,aAAa,CAAC;IAC5C,IAAI,MAAM,IAAI,WAAW,CAAC,aAAa,CAAC,CAwDvC;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,GACxC,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAgBhD,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,aAAK,iBAAiB,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/miner-info.d.ts.map b/src/chains/filecoin/types/src/things/miner-info.d.ts.map deleted file mode 100644 index cc3facbc2e..0000000000 --- a/src/chains/filecoin/types/src/things/miner-info.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"miner-info.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/miner-info.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAIvD,aAAK,eAAe,GAAG;IACrB,UAAU,EAAE;QACV,KAAK,EAAE;YACL,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;QACF,MAAM,EAAE;YACN,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,QAAQ,CAAC;SAC1B,CAAC;QACF,SAAS,EAAE;YACT,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,WAAW,CAAC;SAC7B,CAAC;QACF,gBAAgB,EAAE;YAChB,IAAI,EAAE,MAAM,EAAE,CAAC;YACf,cAAc,EAAE,MAAM,EAAE,CAAC;YACzB,cAAc,EAAE,kBAAkB,CAAC;SACpC,CAAC;QACF,iBAAiB,EAAE;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,mBAAmB,CAAC;SACrC,CAAC;QACF,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,QAAQ,CAAC;SAC1B,CAAC;QACF,UAAU,EAAE;YACV,IAAI,EAAE,UAAU,EAAE,CAAC;YACnB,cAAc,EAAE,UAAU,EAAE,CAAC;YAC7B,cAAc,EAAE,YAAY,CAAC;SAC9B,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,eAAe,CAAC;SACjC,CAAC;QACF,UAAU,EAAE;YACV,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,YAAY,CAAC;SAC9B,CAAC;QACF,0BAA0B,EAAE;YAC1B,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,4BAA4B,CAAC;SAC9C,CAAC;QACF,qBAAqB,EAAE;YACrB,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,uBAAuB,CAAC;SACzC,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,SACJ,SAAQ,kBAAkB,CAAC,eAAe,CAC1C,YAAW,kBAAkB,CAAC,eAAe,CAAC;IAC9C,IAAI,MAAM,IAAI,WAAW,CAAC,eAAe,CAAC,CAgEzC;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,GAC1C,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAgClD;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B,EAAE,MAAM,CAAC;IACnC,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,aAAK,mBAAmB,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAE7D,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/miner-power.d.ts.map b/src/chains/filecoin/types/src/things/miner-power.d.ts.map deleted file mode 100644 index 8361ebcc09..0000000000 --- a/src/chains/filecoin/types/src/things/miner-power.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"miner-power.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/miner-power.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAIjE,aAAK,gBAAgB,GAAG;IACtB,UAAU,EAAE;QACV,UAAU,EAAE;YACV,IAAI,EAAE,UAAU,CAAC;YACjB,cAAc,EAAE,oBAAoB,CAAC;YACrC,cAAc,EAAE,YAAY,CAAC;SAC9B,CAAC;QACF,UAAU,EAAE;YACV,IAAI,EAAE,UAAU,CAAC;YACjB,cAAc,EAAE,oBAAoB,CAAC;YACrC,cAAc,EAAE,YAAY,CAAC;SAC9B,CAAC;QACF,WAAW,EAAE;YACX,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,aAAa,CAAC;SAC/B,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,UACJ,SAAQ,kBAAkB,CAAC,gBAAgB,CAC3C,YAAW,kBAAkB,CAAC,gBAAgB,CAAC;IAC/C,IAAI,MAAM,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAkB1C;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,GAC3C,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IASnD,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,aAAK,oBAAoB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/post-proof.d.ts.map b/src/chains/filecoin/types/src/things/post-proof.d.ts.map deleted file mode 100644 index e170843226..0000000000 --- a/src/chains/filecoin/types/src/things/post-proof.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"post-proof.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/post-proof.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAI/B,UAAU,eAAe;IACvB,UAAU,EAAE;QACV,SAAS,EAAE;YACT,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,WAAW,CAAC;SAC7B,CAAC;QACF,UAAU,EAAE;YACV,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,YAAY,CAAC;SAC9B,CAAC;KACH,CAAC;CACH;AAED,cAAM,SACJ,SAAQ,kBAAkB,CAAC,eAAe,CAC1C,YAAW,kBAAkB,CAAC,eAAe,CAAC;IAC9C,IAAI,MAAM,IAAI,WAAW,CAAC,eAAe,CAAC,CAgBzC;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,GAC1C,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAQlD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,aAAK,mBAAmB,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAE7D,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/power-claim.d.ts.map b/src/chains/filecoin/types/src/things/power-claim.d.ts.map deleted file mode 100644 index ea5c7f82c4..0000000000 --- a/src/chains/filecoin/types/src/things/power-claim.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"power-claim.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/power-claim.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAI/B,aAAK,gBAAgB,GAAG;IACtB,UAAU,EAAE;QACV,YAAY,EAAE;YACZ,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,cAAc,CAAC;SAChC,CAAC;QACF,eAAe,EAAE;YACf,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,iBAAiB,CAAC;SACnC,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,UACJ,SAAQ,kBAAkB,CAAC,gBAAgB,CAC3C,YAAW,kBAAkB,CAAC,gBAAgB,CAAC;IAC/C,IAAI,MAAM,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAa1C;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,GAC3C,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAcnD,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,aAAK,oBAAoB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/query-offer.d.ts.map b/src/chains/filecoin/types/src/things/query-offer.d.ts.map deleted file mode 100644 index 3447d02479..0000000000 --- a/src/chains/filecoin/types/src/things/query-offer.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"query-offer.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/query-offer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAIvD,aAAK,gBAAgB,GAAG;IACtB,UAAU,EAAE;QACV,GAAG,EAAE;YACH,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,KAAK,CAAC;SACvB,CAAC;QACF,IAAI,EAAE;YACJ,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,KAAK,EAAE;YACL,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;QACF,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,UAAU,CAAC;SAC5B,CAAC;QACF,WAAW,EAAE;YACX,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,aAAa,CAAC;SAC/B,CAAC;QACF,eAAe,EAAE;YACf,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,iBAAiB,CAAC;SACnC,CAAC;QACF,uBAAuB,EAAE;YACvB,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,yBAAyB,CAAC;SAC3C,CAAC;QACF,KAAK,EAAE;YACL,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;QACF,SAAS,EAAE;YACT,IAAI,EAAE,aAAa,CAAC;YACpB,cAAc,EAAE,uBAAuB,CAAC;YACxC,cAAc,EAAE,WAAW,CAAC;SAC7B,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,UACJ,SAAQ,kBAAkB,CAAC,gBAAgB,CAC3C,YAAW,kBAAkB,CAAC,gBAAgB,CAAC;IAC/C,IAAI,MAAM,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAsD1C;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,GAC3C,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAsBnD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,MAAM,CAAC;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,aAAK,oBAAoB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/retrieval-order.d.ts.map b/src/chains/filecoin/types/src/things/retrieval-order.d.ts.map deleted file mode 100644 index d82dcf20c6..0000000000 --- a/src/chains/filecoin/types/src/things/retrieval-order.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"retrieval-order.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/retrieval-order.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAIvD,aAAK,oBAAoB,GAAG;IAC1B,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,KAAK,EAAE;YACL,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;QACF,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;QACF,WAAW,EAAE;YACX,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,aAAa,CAAC;SAC/B,CAAC;QACF,eAAe,EAAE;YACf,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,iBAAiB,CAAC;SACnC,CAAC;QACF,uBAAuB,EAAE;YACvB,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,yBAAyB,CAAC;SAC3C,CAAC;QACF,MAAM,EAAE;YACN,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,QAAQ,CAAC;SAC1B,CAAC;QACF,KAAK,EAAE;YACL,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;QACF,SAAS,EAAE;YACT,IAAI,EAAE,aAAa,CAAC;YACpB,cAAc,EAAE,uBAAuB,CAAC;YACxC,cAAc,EAAE,WAAW,CAAC;SAC7B,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,cACJ,SAAQ,kBAAkB,CAAC,oBAAoB,CAC/C,YAAW,kBAAkB,CAAC,oBAAoB,CAAC;IACnD,IAAI,MAAM,IAAI,WAAW,CAAC,oBAAoB,CAAC,CAuD9C;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,GAC/C,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;IAsBvD,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,aAAK,wBAAwB,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/retrieval-peer.d.ts.map b/src/chains/filecoin/types/src/things/retrieval-peer.d.ts.map deleted file mode 100644 index feee1a952a..0000000000 --- a/src/chains/filecoin/types/src/things/retrieval-peer.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"retrieval-peer.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/retrieval-peer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAIvD,aAAK,mBAAmB,GAAG;IACzB,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,SAAS,CAAC;SAC3B,CAAC;QACF,EAAE,EAAE;YACF,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,IAAI,CAAC;SACtB,CAAC;QACF,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,UAAU,CAAC;SAC5B,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,aACJ,SAAQ,kBAAkB,CAAC,mBAAmB,CAC9C,YAAW,kBAAkB,CAAC,mBAAmB,CAAC;IAClD,IAAI,MAAM,IAAI,WAAW,CAAC,mBAAmB,CAAC,CAmB7C;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,GAC9C,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IAStD,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,aAAK,uBAAuB,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/root-cid.d.ts.map b/src/chains/filecoin/types/src/things/root-cid.d.ts.map deleted file mode 100644 index 91231f67ca..0000000000 --- a/src/chains/filecoin/types/src/things/root-cid.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"root-cid.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/root-cid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAE/B,UAAU,aAAa;IACrB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,GAAG,CAAC;YACV,cAAc,EAAE,aAAa,CAAC;YAC9B,cAAc,EAAE,GAAG,CAAC;SACrB,CAAC;KACH,CAAC;CACH;AAED,cAAM,OACJ,SAAQ,kBAAkB,CAAC,aAAa,CACxC,YAAW,kBAAkB,CAAC,aAAa,CAAC;IAC5C,IAAI,MAAM,IAAI,WAAW,CAAC,aAAa,CAAC,CAUvC;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,GACxC,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAOhD,MAAM,IAAI,MAAM;IAIhB,IAAI,EAAE,GAAG,CAAC;CACX;AAED,aAAK,iBAAiB,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/serializable-literal.d.ts.map b/src/chains/filecoin/types/src/things/serializable-literal.d.ts.map deleted file mode 100644 index 1b85e13762..0000000000 --- a/src/chains/filecoin/types/src/things/serializable-literal.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"serializable-literal.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/serializable-literal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,aAAK,UAAU,GAAG;IAChB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAChD,CAAC;AAEF,aAAK,OAAO,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/C,aAAK,iBAAiB,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,MAAM,GAAG,MAAM,GAC5E,MAAM,GACN,OAAO,CAAC,CAAC,CAAC,CAAC;AAEf,aAAK,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC;AAE9D,aAAK,iBAAiB,CAAC,CAAC,SAAS,UAAU,IAAI;IAC7C,YAAY,CAAC,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/D,CAAC;AAEF,uBAAe,mBAAmB,CAAC,CAAC,SAAS,UAAU,CACrD,YAAW,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC7C,SAAS,CAAC,QAAQ,KAAK,MAAM,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;gBAEN,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAI1C,OAAO,CAAC,UAAU;IAalB,SAAS,IAAI,iBAAiB,CAAC,CAAC,CAAC;IAUjC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;CAM/C;AAED,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/serializable-object.d.ts.map b/src/chains/filecoin/types/src/things/serializable-object.d.ts.map deleted file mode 100644 index 5786ed0c84..0000000000 --- a/src/chains/filecoin/types/src/things/serializable-object.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"serializable-object.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/serializable-object.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAO5B,oBAAY,UAAU,GAAG;IACvB,UAAU,EAAE;QAEV,CAAC,gBAAgB,EAAE,MAAM,GAAG;YAC1B,IAAI,EAAE,GAAG,CAAC;YACV,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,GAAG,CAAC;SACrB,CAAC;KACH,CAAC;CACH,CAAC;AAGF,aAAK,YAAY,CAAC,CAAC,SAAS,UAAU,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AACzE,aAAK,sBAAsB,CACzB,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IACzC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;AACzC,aAAK,YAAY,CACf,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IACzC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/B,aAAK,sBAAsB,CACzB,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IACzC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;AACzC,aAAK,kBAAkB,CAAC,CAAC,SAAS,UAAU,IAAI;KAC7C,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;CAC3C,CAAC;AAQF,aAAK,uBAAuB,CAAC,CAAC,SAAS,UAAU,IAAI;KAClD,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG;SACrB,CAAC,IAAI,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC;KAClE;CACF,CAAC;AAEF,UAAU,OAAO;IACf,CAAC,YAAY,EAAE,MAAM,GAAG;QACtB,CAAC,sBAAsB,EAAE,MAAM,GAAG,GAAG,CAAC;KACvC,CAAC;CACH;AACD,aAAK,MAAM,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5C,aAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAC7E,CAAC,EAAE,MAAM,CAAC,KACP,IAAI,GACL,CAAC,GACD,KAAK,CAAC;AAIV,aAAK,YAAY,CAAC,CAAC,IAAI;KACpB,CAAC,IAAI,MAAM,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAClD,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE,GAChB,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACnB,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAClB,CAAC,CAAC,CAAC,CAAC,GACN,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,CAAC;AACF,aAAK,gBAAgB,CAAC,CAAC,SAAS,UAAU,IAAI,YAAY,CACxD,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CACnC,CAAC;AAEF,aAAK,YAAY,CAAC,CAAC,EAAE,CAAC,IAClB,CAAC,GACD,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACzB,aAAK,UAAU,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,IAAI;IACjE,gBAAgB,EAAE,CAAC,CAAC;IACpB,cAAc,EAAE,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7C,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAC9E,CAAC;AAEF,aAAK,WAAW,CAAC,CAAC,SAAS,UAAU,IAAI;KACtC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;CACzC,CAAC;AAYF,UAAU,YAAY,CAAC,CAAC;IACtB,SAAS,IAAI,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;CACvC;AAED,uBAAe,kBAAkB,CAAC,CAAC,SAAS,UAAU,CACpD,YAAW,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC5C,SAAS,CAAC,QAAQ,KAAK,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAKhD,eAAe,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACvC,WAAW,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAC7B,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GACtE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IAkCrB,OAAO,CAAC,cAAc;IAmBtB,SAAS,IAAI,gBAAgB,CAAC,CAAC,CAAC;IAahC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;IAOvD,IAAI,GAAG,IAAI,GAAG,CAYb;CACF;AAED,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/sig-type.d.ts.map b/src/chains/filecoin/types/src/things/sig-type.d.ts.map deleted file mode 100644 index de1ee366bc..0000000000 --- a/src/chains/filecoin/types/src/things/sig-type.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"sig-type.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/sig-type.ts"],"names":[],"mappings":"AACA,oBAAY,OAAO;IACjB,cAAc,MAAM;IAEpB,gBAAgB,IAAI;IACpB,UAAU,IAAA;CACX"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/signature.d.ts.map b/src/chains/filecoin/types/src/things/signature.d.ts.map deleted file mode 100644 index 44d6cc5f28..0000000000 --- a/src/chains/filecoin/types/src/things/signature.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/signature.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIrC,UAAU,eAAe;IACvB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,OAAO,CAAC;YACxB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;KACH,CAAC;CACH;AAED,cAAM,SACJ,SAAQ,kBAAkB,CAAC,eAAe,CAC1C,YAAW,kBAAkB,CAAC,eAAe,CAAC;IAC9C,IAAI,MAAM,IAAI,WAAW,CAAC,eAAe,CAAC,CAgBzC;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,GAC1C,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAQlD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,aAAK,mBAAmB,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAE7D,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/signed-message.d.ts.map b/src/chains/filecoin/types/src/things/signed-message.d.ts.map deleted file mode 100644 index e1dcb4183b..0000000000 --- a/src/chains/filecoin/types/src/things/signed-message.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"signed-message.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/signed-message.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAK5B,aAAK,mBAAmB,GAAG;IACzB,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,SAAS,CAAC;SAC3B,CAAC;QACF,SAAS,EAAE;YACT,IAAI,EAAE,SAAS,CAAC;YAChB,cAAc,EAAE,mBAAmB,CAAC;YACpC,cAAc,EAAE,WAAW,CAAC;SAC7B,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,aACJ,SAAQ,kBAAkB,CAAC,mBAAmB,CAC9C,YAAW,kBAAkB,CAAC,mBAAmB,CAAC;IAClD,IAAI,MAAM,IAAI,WAAW,CAAC,mBAAmB,CAAC,CAa7C;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,GAC9C,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IAQtD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IAGrB,IAAI,GAAG,IAAI,GAAG,CAMb;CACF;AAED,aAAK,uBAAuB,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/start-deal-params.d.ts.map b/src/chains/filecoin/types/src/things/start-deal-params.d.ts.map deleted file mode 100644 index 85a95daf7c..0000000000 --- a/src/chains/filecoin/types/src/things/start-deal-params.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"start-deal-params.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/start-deal-params.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAI/B,aAAK,qBAAqB,GAAG;IAC3B,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,oBAAoB,CAAC;YAC3B,cAAc,EAAE,8BAA8B,CAAC;YAC/C,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,MAAM,EAAE;YACN,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;YACrB,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAC;YACzC,cAAc,EAAE,QAAQ,CAAC;SAC1B,CAAC;QACF,KAAK,EAAE;YACL,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;QACF,UAAU,EAAE;YACV,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,YAAY,CAAC;SAC9B,CAAC;QACF,iBAAiB,EAAE;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,mBAAmB,CAAC;SACrC,CAAC;QACF,kBAAkB,EAAE;YAClB,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,oBAAoB,CAAC;SACtC,CAAC;QACF,cAAc,EAAE;YACd,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,gBAAgB,CAAC;SAClC,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,OAAO,CAAC;YACxB,cAAc,EAAE,eAAe,CAAC;SACjC,CAAC;QACF,YAAY,EAAE;YACZ,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,OAAO,CAAC;YACxB,cAAc,EAAE,cAAc,CAAC;SAChC,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,eACJ,SAAQ,kBAAkB,CAAC,qBAAqB,CAChD,YAAW,kBAAkB,CAAC,qBAAqB,CAAC;IACpD,IAAI,MAAM,IAAI,WAAW,CAAC,qBAAqB,CAAC,CAiD/C;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,GAChD,OAAO,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;IA8BxD,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,aAAK,yBAAyB,GAAG,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/storage-market-data-ref.d.ts.map b/src/chains/filecoin/types/src/things/storage-market-data-ref.d.ts.map deleted file mode 100644 index f7aab50358..0000000000 --- a/src/chains/filecoin/types/src/things/storage-market-data-ref.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"storage-market-data-ref.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/storage-market-data-ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAI/B,aAAK,0BAA0B,GAAG;IAChC,UAAU,EAAE;QACV,YAAY,EAAE;YACZ,IAAI,EAAE,WAAW,CAAC;YAClB,cAAc,EAAE,WAAW,CAAC;YAC5B,cAAc,EAAE,cAAc,CAAC;SAChC,CAAC;QACF,IAAI,EAAE;YACJ,IAAI,EAAE,OAAO,CAAC;YACd,cAAc,EAAE,iBAAiB,CAAC;YAClC,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;YACrB,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAC;YACzC,cAAc,EAAE,UAAU,CAAC;SAC5B,CAAC;QACF,SAAS,EAAE;YACT,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,WAAW,CAAC;SAC7B,CAAC;KACH,CAAC;CACH,CAAC;AAEF,cAAM,oBACJ,SAAQ,kBAAkB,CAAC,0BAA0B,CACrD,YAAW,kBAAkB,CAAC,0BAA0B,CAAC;IACzD,IAAI,MAAM,IAAI,WAAW,CAAC,0BAA0B,CAAC,CA4BpD;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC,GACrD,OAAO,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;IAa7D,YAAY,EAAE,WAAW,CAAC;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,aAAK,8BAA8B,GAAG,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;AAEnF,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/ticket.d.ts.map b/src/chains/filecoin/types/src/things/ticket.d.ts.map deleted file mode 100644 index 7a0a31b8e6..0000000000 --- a/src/chains/filecoin/types/src/things/ticket.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ticket.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/ticket.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAI/B,UAAU,YAAY;IACpB,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,UAAU,CAAC;SAC5B,CAAC;KACH,CAAC;CACH;AAED,cAAM,MACJ,SAAQ,kBAAkB,CAAC,YAAY,CACvC,YAAW,kBAAkB,CAAC,YAAY,CAAC;IAC3C,IAAI,MAAM,IAAI,WAAW,CAAC,YAAY,CAAC,CAWtC;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,GACvC,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAO/C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,aAAK,gBAAgB,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/tipset.d.ts.map b/src/chains/filecoin/types/src/things/tipset.d.ts.map deleted file mode 100644 index cbb0f95e33..0000000000 --- a/src/chains/filecoin/types/src/things/tipset.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tipset.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/tipset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAIxD,UAAU,YAAY;IACpB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACrB,cAAc,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACzC,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,MAAM,EAAE;YACN,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YACzB,cAAc,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC7C,cAAc,EAAE,QAAQ,CAAC;SAC1B,CAAC;QACF,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,QAAQ,CAAC;SAC1B,CAAC;KACH,CAAC;CACH;AAED,cAAM,MACJ,SAAQ,kBAAkB,CAAC,YAAY,CACvC,YAAW,kBAAkB,CAAC,YAAY,CAAC;IAC3C,IAAI,MAAM,IAAI,WAAW,CAAC,YAAY,CAAC,CAoBtC;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,GACvC,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAoB/C;;;;;OAKG;IACH,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACrB,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,aAAK,gBAAgB,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/things/version.d.ts.map b/src/chains/filecoin/types/src/things/version.d.ts.map deleted file mode 100644 index 24146a5f35..0000000000 --- a/src/chains/filecoin/types/src/things/version.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../filecoin/src/things/version.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAuB/B,UAAU,aAAa;IACrB,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,SAAS,CAAC;SAC3B,CAAC;QACF,UAAU,EAAE;YACV,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,YAAY,CAAC;SAC9B,CAAC;QACF,UAAU,EAAE;YACV,IAAI,EAAE,MAAM,CAAC;YACb,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,YAAY,CAAC;SAC9B,CAAC;KACH,CAAC;CACH;AAED,cAAM,OACJ,SAAQ,kBAAkB,CAAC,aAAa,CACxC,YAAW,kBAAkB,CAAC,aAAa,CAAC;IAC5C,IAAI,MAAM,IAAI,WAAW,CAAC,aAAa,CAAC,CAmBvC;gBAGC,OAAO,CAAC,EACJ,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,GACxC,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAShD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,aAAK,iBAAiB,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/types/registered-seal-proof.d.ts.map b/src/chains/filecoin/types/src/types/registered-seal-proof.d.ts.map deleted file mode 100644 index a2ae8b184b..0000000000 --- a/src/chains/filecoin/types/src/types/registered-seal-proof.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"registered-seal-proof.d.ts","sourceRoot":"","sources":["../../../filecoin/src/types/registered-seal-proof.ts"],"names":[],"mappings":"AACA,oBAAY,mBAAmB;IAC7B,gBAAgB,IAAI;IACpB,gBAAgB,IAAI;IACpB,kBAAkB,IAAI;IACtB,iBAAiB,IAAI;IACrB,iBAAiB,IAAI;IACrB,kBAAkB,IAAI;IACtB,kBAAkB,IAAI;IACtB,oBAAoB,IAAI;IACxB,mBAAmB,IAAI;IACvB,mBAAmB,IAAI;CACxB"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/types/storage-deal-status.d.ts.map b/src/chains/filecoin/types/src/types/storage-deal-status.d.ts.map deleted file mode 100644 index c7ca73b7b1..0000000000 --- a/src/chains/filecoin/types/src/types/storage-deal-status.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"storage-deal-status.d.ts","sourceRoot":"","sources":["../../../filecoin/src/types/storage-deal-status.ts"],"names":[],"mappings":"AAQA,oBAAY,iBAAiB;IAE3B,OAAO,IAAA;IAIP,gBAAgB,IAAA;IAIhB,gBAAgB,IAAA;IAGhB,gBAAgB,IAAA;IAGhB,MAAM,IAAA;IAGN,OAAO,IAAA;IAIP,UAAU,IAAA;IAIV,MAAM,IAAA;IAGN,OAAO,IAAA;IAGP,OAAO,IAAA;IAGP,SAAS,KAAA;IAIT,OAAO,KAAA;IAGP,aAAa,KAAA;IAGb,kBAAkB,KAAA;IAGlB,UAAU,KAAA;IAGV,UAAU,KAAA;IAGV,iBAAiB,KAAA;IAGjB,YAAY,KAAA;IAIZ,cAAc,KAAA;IAGd,UAAU,KAAA;IAGV,oBAAoB,KAAA;IAGpB,kBAAkB,KAAA;IAIlB,eAAe,KAAA;IAIf,aAAa,KAAA;IAGb,OAAO,KAAA;IAGP,UAAU,KAAA;IAGV,KAAK,KAAA;IAKL,4BAA4B,KAAA;IAI5B,qBAAqB,KAAA;IAGrB,iBAAiB,KAAA;CAClB;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,iBAAiB,CAKnD,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,iBAAiB,EACjB,iBAAiB,CA2BmC,CAAC;AAEvD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,WAKvD"} \ No newline at end of file diff --git a/src/chains/filecoin/types/src/types/subscriptions.d.ts.map b/src/chains/filecoin/types/src/types/subscriptions.d.ts.map deleted file mode 100644 index 1e83cbb2da..0000000000 --- a/src/chains/filecoin/types/src/types/subscriptions.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../../../filecoin/src/types/subscriptions.ts"],"names":[],"mappings":"AAAA,oBAAY,kBAAkB;IAC5B,cAAc,gBAAgB;IAC9B,aAAa,kBAAkB;IAC/B,oBAAoB,gBAAgB;CACrC;AAED,oBAAY,cAAc,GAAG,MAAM,CAAC"} \ No newline at end of file diff --git a/src/chains/ethereum/address/.npmignore b/src/cli/cli/.npmignore similarity index 100% rename from src/chains/ethereum/address/.npmignore rename to src/cli/cli/.npmignore diff --git a/src/chains/ethereum/address/LICENSE b/src/cli/cli/LICENSE similarity index 100% rename from src/chains/ethereum/address/LICENSE rename to src/cli/cli/LICENSE diff --git a/src/packages/cli/README.md b/src/cli/cli/README.md similarity index 100% rename from src/packages/cli/README.md rename to src/cli/cli/README.md diff --git a/src/packages/cli/index.ts b/src/cli/cli/index.ts similarity index 100% rename from src/packages/cli/index.ts rename to src/cli/cli/index.ts diff --git a/src/packages/cli/package-lock.json b/src/cli/cli/package-lock.json similarity index 100% rename from src/packages/cli/package-lock.json rename to src/cli/cli/package-lock.json diff --git a/src/packages/cli/package.json b/src/cli/cli/package.json similarity index 100% rename from src/packages/cli/package.json rename to src/cli/cli/package.json diff --git a/src/packages/cli/src/args.ts b/src/cli/cli/src/args.ts similarity index 100% rename from src/packages/cli/src/args.ts rename to src/cli/cli/src/args.ts diff --git a/src/packages/cli/src/cli.ts b/src/cli/cli/src/cli.ts similarity index 100% rename from src/packages/cli/src/cli.ts rename to src/cli/cli/src/cli.ts diff --git a/src/packages/cli/src/detach.ts b/src/cli/cli/src/detach.ts similarity index 100% rename from src/packages/cli/src/detach.ts rename to src/cli/cli/src/detach.ts diff --git a/src/packages/cli/src/flavors.ts b/src/cli/cli/src/flavors.ts similarity index 100% rename from src/packages/cli/src/flavors.ts rename to src/cli/cli/src/flavors.ts diff --git a/src/packages/cli/src/helpers.ts b/src/cli/cli/src/helpers.ts similarity index 100% rename from src/packages/cli/src/helpers.ts rename to src/cli/cli/src/helpers.ts diff --git a/src/packages/cli/src/process-name.ts b/src/cli/cli/src/process-name.ts similarity index 100% rename from src/packages/cli/src/process-name.ts rename to src/cli/cli/src/process-name.ts diff --git a/src/packages/cli/src/types.ts b/src/cli/cli/src/types.ts similarity index 100% rename from src/packages/cli/src/types.ts rename to src/cli/cli/src/types.ts diff --git a/src/packages/cli/tests/args.test.ts b/src/cli/cli/tests/args.test.ts similarity index 100% rename from src/packages/cli/tests/args.test.ts rename to src/cli/cli/tests/args.test.ts diff --git a/src/packages/cli/tests/detach.test.ts b/src/cli/cli/tests/detach.test.ts similarity index 100% rename from src/packages/cli/tests/detach.test.ts rename to src/cli/cli/tests/detach.test.ts diff --git a/src/packages/cli/tsconfig.json b/src/cli/cli/tsconfig.json similarity index 100% rename from src/packages/cli/tsconfig.json rename to src/cli/cli/tsconfig.json diff --git a/src/chains/ethereum/block/.npmignore b/src/colors/colors/.npmignore similarity index 100% rename from src/chains/ethereum/block/.npmignore rename to src/colors/colors/.npmignore diff --git a/src/packages/colors/LICENSE b/src/colors/colors/LICENSE similarity index 100% rename from src/packages/colors/LICENSE rename to src/colors/colors/LICENSE diff --git a/src/packages/colors/README.md b/src/colors/colors/README.md similarity index 100% rename from src/packages/colors/README.md rename to src/colors/colors/README.md diff --git a/src/packages/colors/index.ts b/src/colors/colors/index.ts similarity index 100% rename from src/packages/colors/index.ts rename to src/colors/colors/index.ts diff --git a/src/packages/colors/package-lock.json b/src/colors/colors/package-lock.json similarity index 100% rename from src/packages/colors/package-lock.json rename to src/colors/colors/package-lock.json diff --git a/src/packages/colors/package.json b/src/colors/colors/package.json similarity index 100% rename from src/packages/colors/package.json rename to src/colors/colors/package.json diff --git a/src/packages/colors/src/index.ts b/src/colors/colors/src/index.ts similarity index 100% rename from src/packages/colors/src/index.ts rename to src/colors/colors/src/index.ts diff --git a/src/packages/colors/tests/index.test.ts b/src/colors/colors/tests/index.test.ts similarity index 100% rename from src/packages/colors/tests/index.test.ts rename to src/colors/colors/tests/index.test.ts diff --git a/src/packages/colors/tsconfig.json b/src/colors/colors/tsconfig.json similarity index 100% rename from src/packages/colors/tsconfig.json rename to src/colors/colors/tsconfig.json diff --git a/src/chains/ethereum/ethereum/.npmignore b/src/core/.npmignore similarity index 100% rename from src/chains/ethereum/ethereum/.npmignore rename to src/core/.npmignore diff --git a/src/packages/core/ARCHITECTURE.md b/src/core/ARCHITECTURE.md similarity index 100% rename from src/packages/core/ARCHITECTURE.md rename to src/core/ARCHITECTURE.md diff --git a/src/chains/ethereum/block/LICENSE b/src/core/LICENSE similarity index 100% rename from src/chains/ethereum/block/LICENSE rename to src/core/LICENSE diff --git a/src/packages/core/README.md b/src/core/README.md similarity index 100% rename from src/packages/core/README.md rename to src/core/README.md diff --git a/src/packages/core/index.ts b/src/core/index.ts similarity index 100% rename from src/packages/core/index.ts rename to src/core/index.ts diff --git a/src/packages/core/package-lock.json b/src/core/package-lock.json similarity index 100% rename from src/packages/core/package-lock.json rename to src/core/package-lock.json diff --git a/src/packages/core/package.json b/src/core/package.json similarity index 100% rename from src/packages/core/package.json rename to src/core/package.json diff --git a/src/packages/core/src/@types/superagent.d.ts b/src/core/src/@types/superagent.d.ts similarity index 100% rename from src/packages/core/src/@types/superagent.d.ts rename to src/core/src/@types/superagent.d.ts diff --git a/src/packages/core/src/connector-loader.ts b/src/core/src/connector-loader.ts similarity index 100% rename from src/packages/core/src/connector-loader.ts rename to src/core/src/connector-loader.ts diff --git a/src/packages/core/src/server.ts b/src/core/src/server.ts similarity index 100% rename from src/packages/core/src/server.ts rename to src/core/src/server.ts diff --git a/src/packages/core/src/servers/http-server.ts b/src/core/src/servers/http-server.ts similarity index 100% rename from src/packages/core/src/servers/http-server.ts rename to src/core/src/servers/http-server.ts diff --git a/src/packages/core/src/servers/utils/content-types.ts b/src/core/src/servers/utils/content-types.ts similarity index 100% rename from src/packages/core/src/servers/utils/content-types.ts rename to src/core/src/servers/utils/content-types.ts diff --git a/src/packages/core/src/servers/utils/fragment-generator.ts b/src/core/src/servers/utils/fragment-generator.ts similarity index 100% rename from src/packages/core/src/servers/utils/fragment-generator.ts rename to src/core/src/servers/utils/fragment-generator.ts diff --git a/src/packages/core/src/servers/utils/http-response-codes.ts b/src/core/src/servers/utils/http-response-codes.ts similarity index 100% rename from src/packages/core/src/servers/utils/http-response-codes.ts rename to src/core/src/servers/utils/http-response-codes.ts diff --git a/src/packages/core/src/servers/utils/websocket-close-codes.ts b/src/core/src/servers/utils/websocket-close-codes.ts similarity index 100% rename from src/packages/core/src/servers/utils/websocket-close-codes.ts rename to src/core/src/servers/utils/websocket-close-codes.ts diff --git a/src/packages/core/src/servers/ws-server.ts b/src/core/src/servers/ws-server.ts similarity index 100% rename from src/packages/core/src/servers/ws-server.ts rename to src/core/src/servers/ws-server.ts diff --git a/src/packages/core/src/types.ts b/src/core/src/types.ts similarity index 100% rename from src/packages/core/src/types.ts rename to src/core/src/types.ts diff --git a/src/packages/core/tests/connector-loader.test.ts b/src/core/tests/connector-loader.test.ts similarity index 100% rename from src/packages/core/tests/connector-loader.test.ts rename to src/core/tests/connector-loader.test.ts diff --git a/src/packages/core/tests/connector.test.ts b/src/core/tests/connector.test.ts similarity index 100% rename from src/packages/core/tests/connector.test.ts rename to src/core/tests/connector.test.ts diff --git a/src/packages/core/tests/interface.test.ts b/src/core/tests/interface.test.ts similarity index 100% rename from src/packages/core/tests/interface.test.ts rename to src/core/tests/interface.test.ts diff --git a/src/packages/core/tests/server.test.ts b/src/core/tests/server.test.ts similarity index 100% rename from src/packages/core/tests/server.test.ts rename to src/core/tests/server.test.ts diff --git a/src/packages/core/tests/testdb/!trie_db!0x08ac839d755e4a25bcbc47a4012219db100ef0a340307869393f9df55ebd470c b/src/core/tests/testdb/!trie_db!0x08ac839d755e4a25bcbc47a4012219db100ef0a340307869393f9df55ebd470c similarity index 100% rename from src/packages/core/tests/testdb/!trie_db!0x08ac839d755e4a25bcbc47a4012219db100ef0a340307869393f9df55ebd470c rename to src/core/tests/testdb/!trie_db!0x08ac839d755e4a25bcbc47a4012219db100ef0a340307869393f9df55ebd470c diff --git a/src/packages/core/tests/testdb/!trie_db!0x6990c157721aea0e000dc63d12ccdd1938364fb8e72dcdda25d6baa70992b80f b/src/core/tests/testdb/!trie_db!0x6990c157721aea0e000dc63d12ccdd1938364fb8e72dcdda25d6baa70992b80f similarity index 100% rename from src/packages/core/tests/testdb/!trie_db!0x6990c157721aea0e000dc63d12ccdd1938364fb8e72dcdda25d6baa70992b80f rename to src/core/tests/testdb/!trie_db!0x6990c157721aea0e000dc63d12ccdd1938364fb8e72dcdda25d6baa70992b80f diff --git a/src/packages/core/tests/testdb/!trie_db!0xb0108c95b74533d6862f59a730bb0282bbaaadd8ac1b94510b69a499527c3505 b/src/core/tests/testdb/!trie_db!0xb0108c95b74533d6862f59a730bb0282bbaaadd8ac1b94510b69a499527c3505 similarity index 100% rename from src/packages/core/tests/testdb/!trie_db!0xb0108c95b74533d6862f59a730bb0282bbaaadd8ac1b94510b69a499527c3505 rename to src/core/tests/testdb/!trie_db!0xb0108c95b74533d6862f59a730bb0282bbaaadd8ac1b94510b69a499527c3505 diff --git a/src/packages/core/tests/testdb/!trie_db!0xf173aa08e820d7e4b4bb0c243a1661770198770b14029eed74f0eb473c79cd83 b/src/core/tests/testdb/!trie_db!0xf173aa08e820d7e4b4bb0c243a1661770198770b14029eed74f0eb473c79cd83 similarity index 100% rename from src/packages/core/tests/testdb/!trie_db!0xf173aa08e820d7e4b4bb0c243a1661770198770b14029eed74f0eb473c79cd83 rename to src/core/tests/testdb/!trie_db!0xf173aa08e820d7e4b4bb0c243a1661770198770b14029eed74f0eb473c79cd83 diff --git a/src/packages/core/tsconfig.json b/src/core/tsconfig.json similarity index 100% rename from src/packages/core/tsconfig.json rename to src/core/tsconfig.json diff --git a/src/chains/ethereum/options/.npmignore b/src/ethereum/address/.npmignore similarity index 100% rename from src/chains/ethereum/options/.npmignore rename to src/ethereum/address/.npmignore diff --git a/src/chains/ethereum/ethereum/LICENSE b/src/ethereum/address/LICENSE similarity index 100% rename from src/chains/ethereum/ethereum/LICENSE rename to src/ethereum/address/LICENSE diff --git a/src/chains/ethereum/address/README.md b/src/ethereum/address/README.md similarity index 100% rename from src/chains/ethereum/address/README.md rename to src/ethereum/address/README.md diff --git a/src/chains/ethereum/address/index.ts b/src/ethereum/address/index.ts similarity index 100% rename from src/chains/ethereum/address/index.ts rename to src/ethereum/address/index.ts diff --git a/src/chains/ethereum/address/package-lock.json b/src/ethereum/address/package-lock.json similarity index 100% rename from src/chains/ethereum/address/package-lock.json rename to src/ethereum/address/package-lock.json diff --git a/src/chains/ethereum/address/package.json b/src/ethereum/address/package.json similarity index 100% rename from src/chains/ethereum/address/package.json rename to src/ethereum/address/package.json diff --git a/src/chains/ethereum/address/tests/index.test.ts b/src/ethereum/address/tests/index.test.ts similarity index 100% rename from src/chains/ethereum/address/tests/index.test.ts rename to src/ethereum/address/tests/index.test.ts diff --git a/src/chains/ethereum/address/tsconfig.json b/src/ethereum/address/tsconfig.json similarity index 100% rename from src/chains/ethereum/address/tsconfig.json rename to src/ethereum/address/tsconfig.json diff --git a/src/chains/ethereum/transaction/.npmignore b/src/ethereum/block/.npmignore similarity index 100% rename from src/chains/ethereum/transaction/.npmignore rename to src/ethereum/block/.npmignore diff --git a/src/chains/ethereum/options/LICENSE b/src/ethereum/block/LICENSE similarity index 100% rename from src/chains/ethereum/options/LICENSE rename to src/ethereum/block/LICENSE diff --git a/src/chains/ethereum/block/README.md b/src/ethereum/block/README.md similarity index 100% rename from src/chains/ethereum/block/README.md rename to src/ethereum/block/README.md diff --git a/src/chains/ethereum/block/index.ts b/src/ethereum/block/index.ts similarity index 100% rename from src/chains/ethereum/block/index.ts rename to src/ethereum/block/index.ts diff --git a/src/chains/ethereum/block/package-lock.json b/src/ethereum/block/package-lock.json similarity index 100% rename from src/chains/ethereum/block/package-lock.json rename to src/ethereum/block/package-lock.json diff --git a/src/chains/ethereum/block/package.json b/src/ethereum/block/package.json similarity index 100% rename from src/chains/ethereum/block/package.json rename to src/ethereum/block/package.json diff --git a/src/chains/ethereum/block/src/block-params.ts b/src/ethereum/block/src/block-params.ts similarity index 100% rename from src/chains/ethereum/block/src/block-params.ts rename to src/ethereum/block/src/block-params.ts diff --git a/src/chains/ethereum/block/src/block.ts b/src/ethereum/block/src/block.ts similarity index 100% rename from src/chains/ethereum/block/src/block.ts rename to src/ethereum/block/src/block.ts diff --git a/src/chains/ethereum/block/src/runtime-block.ts b/src/ethereum/block/src/runtime-block.ts similarity index 100% rename from src/chains/ethereum/block/src/runtime-block.ts rename to src/ethereum/block/src/runtime-block.ts diff --git a/src/chains/ethereum/block/src/serialize.ts b/src/ethereum/block/src/serialize.ts similarity index 100% rename from src/chains/ethereum/block/src/serialize.ts rename to src/ethereum/block/src/serialize.ts diff --git a/src/chains/ethereum/block/src/snapshots.ts b/src/ethereum/block/src/snapshots.ts similarity index 100% rename from src/chains/ethereum/block/src/snapshots.ts rename to src/ethereum/block/src/snapshots.ts diff --git a/src/chains/ethereum/block/tests/index.test.ts b/src/ethereum/block/tests/index.test.ts similarity index 100% rename from src/chains/ethereum/block/tests/index.test.ts rename to src/ethereum/block/tests/index.test.ts diff --git a/src/chains/ethereum/block/tsconfig.json b/src/ethereum/block/tsconfig.json similarity index 100% rename from src/chains/ethereum/block/tsconfig.json rename to src/ethereum/block/tsconfig.json diff --git a/src/chains/ethereum/console.log/.npmignore b/src/ethereum/console.log/.npmignore similarity index 100% rename from src/chains/ethereum/console.log/.npmignore rename to src/ethereum/console.log/.npmignore diff --git a/src/chains/ethereum/console.log/LICENSE b/src/ethereum/console.log/LICENSE similarity index 100% rename from src/chains/ethereum/console.log/LICENSE rename to src/ethereum/console.log/LICENSE diff --git a/src/chains/ethereum/console.log/README.md b/src/ethereum/console.log/README.md similarity index 100% rename from src/chains/ethereum/console.log/README.md rename to src/ethereum/console.log/README.md diff --git a/src/chains/ethereum/console.log/console.sol b/src/ethereum/console.log/console.sol similarity index 100% rename from src/chains/ethereum/console.log/console.sol rename to src/ethereum/console.log/console.sol diff --git a/src/chains/ethereum/console.log/index.ts b/src/ethereum/console.log/index.ts similarity index 100% rename from src/chains/ethereum/console.log/index.ts rename to src/ethereum/console.log/index.ts diff --git a/src/chains/ethereum/console.log/package-lock.json b/src/ethereum/console.log/package-lock.json similarity index 100% rename from src/chains/ethereum/console.log/package-lock.json rename to src/ethereum/console.log/package-lock.json diff --git a/src/chains/ethereum/console.log/package.json b/src/ethereum/console.log/package.json similarity index 100% rename from src/chains/ethereum/console.log/package.json rename to src/ethereum/console.log/package.json diff --git a/src/chains/ethereum/console.log/scripts/generate.ts b/src/ethereum/console.log/scripts/generate.ts similarity index 100% rename from src/chains/ethereum/console.log/scripts/generate.ts rename to src/ethereum/console.log/scripts/generate.ts diff --git a/src/chains/ethereum/console.log/scripts/helpers.ts b/src/ethereum/console.log/scripts/helpers.ts similarity index 100% rename from src/chains/ethereum/console.log/scripts/helpers.ts rename to src/ethereum/console.log/scripts/helpers.ts diff --git a/src/chains/ethereum/console.log/src/handlers.ts b/src/ethereum/console.log/src/handlers.ts similarity index 100% rename from src/chains/ethereum/console.log/src/handlers.ts rename to src/ethereum/console.log/src/handlers.ts diff --git a/src/chains/ethereum/console.log/src/maybe-get-logs.ts b/src/ethereum/console.log/src/maybe-get-logs.ts similarity index 100% rename from src/chains/ethereum/console.log/src/maybe-get-logs.ts rename to src/ethereum/console.log/src/maybe-get-logs.ts diff --git a/src/chains/ethereum/console.log/src/signatures.ts b/src/ethereum/console.log/src/signatures.ts similarity index 100% rename from src/chains/ethereum/console.log/src/signatures.ts rename to src/ethereum/console.log/src/signatures.ts diff --git a/src/chains/ethereum/console.log/tests/arbitraries.ts b/src/ethereum/console.log/tests/arbitraries.ts similarity index 100% rename from src/chains/ethereum/console.log/tests/arbitraries.ts rename to src/ethereum/console.log/tests/arbitraries.ts diff --git a/src/chains/ethereum/console.log/tests/helpers.ts b/src/ethereum/console.log/tests/helpers.ts similarity index 100% rename from src/chains/ethereum/console.log/tests/helpers.ts rename to src/ethereum/console.log/tests/helpers.ts diff --git a/src/chains/ethereum/console.log/tests/index.test.ts b/src/ethereum/console.log/tests/index.test.ts similarity index 100% rename from src/chains/ethereum/console.log/tests/index.test.ts rename to src/ethereum/console.log/tests/index.test.ts diff --git a/src/chains/ethereum/console.log/tsconfig.json b/src/ethereum/console.log/tsconfig.json similarity index 100% rename from src/chains/ethereum/console.log/tsconfig.json rename to src/ethereum/console.log/tsconfig.json diff --git a/src/chains/ethereum/utils/.npmignore b/src/ethereum/ethereum/.npmignore similarity index 100% rename from src/chains/ethereum/utils/.npmignore rename to src/ethereum/ethereum/.npmignore diff --git a/src/chains/ethereum/transaction/LICENSE b/src/ethereum/ethereum/LICENSE similarity index 100% rename from src/chains/ethereum/transaction/LICENSE rename to src/ethereum/ethereum/LICENSE diff --git a/src/chains/ethereum/ethereum/README.md b/src/ethereum/ethereum/README.md similarity index 100% rename from src/chains/ethereum/ethereum/README.md rename to src/ethereum/ethereum/README.md diff --git a/src/chains/ethereum/ethereum/RPC-METHODS.md b/src/ethereum/ethereum/RPC-METHODS.md similarity index 100% rename from src/chains/ethereum/ethereum/RPC-METHODS.md rename to src/ethereum/ethereum/RPC-METHODS.md diff --git a/src/chains/ethereum/ethereum/index.ts b/src/ethereum/ethereum/index.ts similarity index 100% rename from src/chains/ethereum/ethereum/index.ts rename to src/ethereum/ethereum/index.ts diff --git a/src/chains/ethereum/ethereum/package-lock.json b/src/ethereum/ethereum/package-lock.json similarity index 100% rename from src/chains/ethereum/ethereum/package-lock.json rename to src/ethereum/ethereum/package-lock.json diff --git a/src/chains/ethereum/ethereum/package.json b/src/ethereum/ethereum/package.json similarity index 100% rename from src/chains/ethereum/ethereum/package.json rename to src/ethereum/ethereum/package.json diff --git a/src/chains/ethereum/ethereum/patches/@ethereumjs+block+4.2.1.patch b/src/ethereum/ethereum/patches/@ethereumjs+block+4.2.1.patch similarity index 100% rename from src/chains/ethereum/ethereum/patches/@ethereumjs+block+4.2.1.patch rename to src/ethereum/ethereum/patches/@ethereumjs+block+4.2.1.patch diff --git a/src/chains/ethereum/ethereum/src/@types/leveldown/index.d.ts b/src/ethereum/ethereum/src/@types/leveldown/index.d.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/@types/leveldown/index.d.ts rename to src/ethereum/ethereum/src/@types/leveldown/index.d.ts diff --git a/src/chains/ethereum/ethereum/src/api-types.ts b/src/ethereum/ethereum/src/api-types.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/api-types.ts rename to src/ethereum/ethereum/src/api-types.ts diff --git a/src/chains/ethereum/ethereum/src/api.ts b/src/ethereum/ethereum/src/api.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/api.ts rename to src/ethereum/ethereum/src/api.ts diff --git a/src/chains/ethereum/ethereum/src/blockchain.ts b/src/ethereum/ethereum/src/blockchain.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/blockchain.ts rename to src/ethereum/ethereum/src/blockchain.ts diff --git a/src/chains/ethereum/ethereum/src/connector.ts b/src/ethereum/ethereum/src/connector.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/connector.ts rename to src/ethereum/ethereum/src/connector.ts diff --git a/src/chains/ethereum/ethereum/src/data-managers/account-manager.ts b/src/ethereum/ethereum/src/data-managers/account-manager.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/data-managers/account-manager.ts rename to src/ethereum/ethereum/src/data-managers/account-manager.ts diff --git a/src/chains/ethereum/ethereum/src/data-managers/block-manager.ts b/src/ethereum/ethereum/src/data-managers/block-manager.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/data-managers/block-manager.ts rename to src/ethereum/ethereum/src/data-managers/block-manager.ts diff --git a/src/chains/ethereum/ethereum/src/data-managers/blocklog-manager.ts b/src/ethereum/ethereum/src/data-managers/blocklog-manager.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/data-managers/blocklog-manager.ts rename to src/ethereum/ethereum/src/data-managers/blocklog-manager.ts diff --git a/src/chains/ethereum/ethereum/src/data-managers/manager.ts b/src/ethereum/ethereum/src/data-managers/manager.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/data-managers/manager.ts rename to src/ethereum/ethereum/src/data-managers/manager.ts diff --git a/src/chains/ethereum/ethereum/src/data-managers/transaction-manager.ts b/src/ethereum/ethereum/src/data-managers/transaction-manager.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/data-managers/transaction-manager.ts rename to src/ethereum/ethereum/src/data-managers/transaction-manager.ts diff --git a/src/chains/ethereum/ethereum/src/data-managers/transaction-receipt-manager.ts b/src/ethereum/ethereum/src/data-managers/transaction-receipt-manager.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/data-managers/transaction-receipt-manager.ts rename to src/ethereum/ethereum/src/data-managers/transaction-receipt-manager.ts diff --git a/src/chains/ethereum/ethereum/src/database.ts b/src/ethereum/ethereum/src/database.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/database.ts rename to src/ethereum/ethereum/src/database.ts diff --git a/src/chains/ethereum/ethereum/src/forking/cache.ts b/src/ethereum/ethereum/src/forking/cache.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/cache.ts rename to src/ethereum/ethereum/src/forking/cache.ts diff --git a/src/chains/ethereum/ethereum/src/forking/deferred.ts b/src/ethereum/ethereum/src/forking/deferred.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/deferred.ts rename to src/ethereum/ethereum/src/forking/deferred.ts diff --git a/src/chains/ethereum/ethereum/src/forking/fork.ts b/src/ethereum/ethereum/src/forking/fork.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/fork.ts rename to src/ethereum/ethereum/src/forking/fork.ts diff --git a/src/chains/ethereum/ethereum/src/forking/handlers/base-handler.ts b/src/ethereum/ethereum/src/forking/handlers/base-handler.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/handlers/base-handler.ts rename to src/ethereum/ethereum/src/forking/handlers/base-handler.ts diff --git a/src/chains/ethereum/ethereum/src/forking/handlers/http-handler.ts b/src/ethereum/ethereum/src/forking/handlers/http-handler.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/handlers/http-handler.ts rename to src/ethereum/ethereum/src/forking/handlers/http-handler.ts diff --git a/src/chains/ethereum/ethereum/src/forking/handlers/provider-handler.ts b/src/ethereum/ethereum/src/forking/handlers/provider-handler.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/handlers/provider-handler.ts rename to src/ethereum/ethereum/src/forking/handlers/provider-handler.ts diff --git a/src/chains/ethereum/ethereum/src/forking/handlers/ws-handler.ts b/src/ethereum/ethereum/src/forking/handlers/ws-handler.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/handlers/ws-handler.ts rename to src/ethereum/ethereum/src/forking/handlers/ws-handler.ts diff --git a/src/chains/ethereum/ethereum/src/forking/lexicographic-key-codec.ts b/src/ethereum/ethereum/src/forking/lexicographic-key-codec.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/lexicographic-key-codec.ts rename to src/ethereum/ethereum/src/forking/lexicographic-key-codec.ts diff --git a/src/chains/ethereum/ethereum/src/forking/persistent-cache/ancestry.ts b/src/ethereum/ethereum/src/forking/persistent-cache/ancestry.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/persistent-cache/ancestry.ts rename to src/ethereum/ethereum/src/forking/persistent-cache/ancestry.ts diff --git a/src/chains/ethereum/ethereum/src/forking/persistent-cache/helpers.ts b/src/ethereum/ethereum/src/forking/persistent-cache/helpers.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/persistent-cache/helpers.ts rename to src/ethereum/ethereum/src/forking/persistent-cache/helpers.ts diff --git a/src/chains/ethereum/ethereum/src/forking/persistent-cache/persistent-cache.ts b/src/ethereum/ethereum/src/forking/persistent-cache/persistent-cache.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/persistent-cache/persistent-cache.ts rename to src/ethereum/ethereum/src/forking/persistent-cache/persistent-cache.ts diff --git a/src/chains/ethereum/ethereum/src/forking/persistent-cache/tree.ts b/src/ethereum/ethereum/src/forking/persistent-cache/tree.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/persistent-cache/tree.ts rename to src/ethereum/ethereum/src/forking/persistent-cache/tree.ts diff --git a/src/chains/ethereum/ethereum/src/forking/rate-limiter/limit-counter.ts b/src/ethereum/ethereum/src/forking/rate-limiter/limit-counter.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/rate-limiter/limit-counter.ts rename to src/ethereum/ethereum/src/forking/rate-limiter/limit-counter.ts diff --git a/src/chains/ethereum/ethereum/src/forking/rate-limiter/rate-limiter.ts b/src/ethereum/ethereum/src/forking/rate-limiter/rate-limiter.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/rate-limiter/rate-limiter.ts rename to src/ethereum/ethereum/src/forking/rate-limiter/rate-limiter.ts diff --git a/src/chains/ethereum/ethereum/src/forking/state-manager.ts b/src/ethereum/ethereum/src/forking/state-manager.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/state-manager.ts rename to src/ethereum/ethereum/src/forking/state-manager.ts diff --git a/src/chains/ethereum/ethereum/src/forking/trie.ts b/src/ethereum/ethereum/src/forking/trie.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/trie.ts rename to src/ethereum/ethereum/src/forking/trie.ts diff --git a/src/chains/ethereum/ethereum/src/forking/types.ts b/src/ethereum/ethereum/src/forking/types.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/forking/types.ts rename to src/ethereum/ethereum/src/forking/types.ts diff --git a/src/chains/ethereum/ethereum/src/hdkey.ts b/src/ethereum/ethereum/src/hdkey.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/hdkey.ts rename to src/ethereum/ethereum/src/hdkey.ts diff --git a/src/chains/ethereum/ethereum/src/helpers/assert-arg-length.ts b/src/ethereum/ethereum/src/helpers/assert-arg-length.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/helpers/assert-arg-length.ts rename to src/ethereum/ethereum/src/helpers/assert-arg-length.ts diff --git a/src/chains/ethereum/ethereum/src/helpers/bufferify.ts b/src/ethereum/ethereum/src/helpers/bufferify.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/helpers/bufferify.ts rename to src/ethereum/ethereum/src/helpers/bufferify.ts diff --git a/src/chains/ethereum/ethereum/src/helpers/common-helpers.ts b/src/ethereum/ethereum/src/helpers/common-helpers.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/helpers/common-helpers.ts rename to src/ethereum/ethereum/src/helpers/common-helpers.ts diff --git a/src/chains/ethereum/ethereum/src/helpers/filter-parsing.ts b/src/ethereum/ethereum/src/helpers/filter-parsing.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/helpers/filter-parsing.ts rename to src/ethereum/ethereum/src/helpers/filter-parsing.ts diff --git a/src/chains/ethereum/ethereum/src/helpers/gas-estimator.ts b/src/ethereum/ethereum/src/helpers/gas-estimator.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/helpers/gas-estimator.ts rename to src/ethereum/ethereum/src/helpers/gas-estimator.ts diff --git a/src/chains/ethereum/ethereum/src/helpers/precompiles.ts b/src/ethereum/ethereum/src/helpers/precompiles.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/helpers/precompiles.ts rename to src/ethereum/ethereum/src/helpers/precompiles.ts diff --git a/src/chains/ethereum/ethereum/src/helpers/run-call.ts b/src/ethereum/ethereum/src/helpers/run-call.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/helpers/run-call.ts rename to src/ethereum/ethereum/src/helpers/run-call.ts diff --git a/src/chains/ethereum/ethereum/src/helpers/storage-range-at.ts b/src/ethereum/ethereum/src/helpers/storage-range-at.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/helpers/storage-range-at.ts rename to src/ethereum/ethereum/src/helpers/storage-range-at.ts diff --git a/src/chains/ethereum/ethereum/src/helpers/trie.ts b/src/ethereum/ethereum/src/helpers/trie.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/helpers/trie.ts rename to src/ethereum/ethereum/src/helpers/trie.ts diff --git a/src/chains/ethereum/ethereum/src/miner/DESIGN-DECISIONS.md b/src/ethereum/ethereum/src/miner/DESIGN-DECISIONS.md similarity index 100% rename from src/chains/ethereum/ethereum/src/miner/DESIGN-DECISIONS.md rename to src/ethereum/ethereum/src/miner/DESIGN-DECISIONS.md diff --git a/src/chains/ethereum/ethereum/src/miner/executables.ts b/src/ethereum/ethereum/src/miner/executables.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/miner/executables.ts rename to src/ethereum/ethereum/src/miner/executables.ts diff --git a/src/chains/ethereum/ethereum/src/miner/miner.ts b/src/ethereum/ethereum/src/miner/miner.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/miner/miner.ts rename to src/ethereum/ethereum/src/miner/miner.ts diff --git a/src/chains/ethereum/ethereum/src/miner/replace-from-heap.ts b/src/ethereum/ethereum/src/miner/replace-from-heap.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/miner/replace-from-heap.ts rename to src/ethereum/ethereum/src/miner/replace-from-heap.ts diff --git a/src/chains/ethereum/ethereum/src/provider-events.ts b/src/ethereum/ethereum/src/provider-events.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/provider-events.ts rename to src/ethereum/ethereum/src/provider-events.ts diff --git a/src/chains/ethereum/ethereum/src/provider.ts b/src/ethereum/ethereum/src/provider.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/provider.ts rename to src/ethereum/ethereum/src/provider.ts diff --git a/src/chains/ethereum/ethereum/src/state-manager.ts b/src/ethereum/ethereum/src/state-manager.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/state-manager.ts rename to src/ethereum/ethereum/src/state-manager.ts diff --git a/src/chains/ethereum/ethereum/src/transaction-pool.ts b/src/ethereum/ethereum/src/transaction-pool.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/transaction-pool.ts rename to src/ethereum/ethereum/src/transaction-pool.ts diff --git a/src/chains/ethereum/ethereum/src/trie-db.ts b/src/ethereum/ethereum/src/trie-db.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/trie-db.ts rename to src/ethereum/ethereum/src/trie-db.ts diff --git a/src/chains/ethereum/ethereum/src/wallet.ts b/src/ethereum/ethereum/src/wallet.ts similarity index 100% rename from src/chains/ethereum/ethereum/src/wallet.ts rename to src/ethereum/ethereum/src/wallet.ts diff --git a/src/chains/ethereum/ethereum/tests/@types/solc/index.d.ts b/src/ethereum/ethereum/tests/@types/solc/index.d.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/@types/solc/index.d.ts rename to src/ethereum/ethereum/tests/@types/solc/index.d.ts diff --git a/src/chains/ethereum/ethereum/tests/api/bzz/bzz.test.ts b/src/ethereum/ethereum/tests/api/bzz/bzz.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/bzz/bzz.test.ts rename to src/ethereum/ethereum/tests/api/bzz/bzz.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/db/db.test.ts b/src/ethereum/ethereum/tests/api/db/db.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/db/db.test.ts rename to src/ethereum/ethereum/tests/api/db/db.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/debug/debug.test.ts b/src/ethereum/ethereum/tests/api/debug/debug.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/debug/debug.test.ts rename to src/ethereum/ethereum/tests/api/debug/debug.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/debug/debug_storageRangeAt.test.ts b/src/ethereum/ethereum/tests/api/debug/debug_storageRangeAt.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/debug/debug_storageRangeAt.test.ts rename to src/ethereum/ethereum/tests/api/debug/debug_storageRangeAt.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/accounts.test.ts b/src/ethereum/ethereum/tests/api/eth/accounts.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/accounts.test.ts rename to src/ethereum/ethereum/tests/api/eth/accounts.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/call.test.ts b/src/ethereum/ethereum/tests/api/eth/call.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/call.test.ts rename to src/ethereum/ethereum/tests/api/eth/call.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/contracts/EthCall.sol b/src/ethereum/ethereum/tests/api/eth/contracts/EthCall.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/contracts/EthCall.sol rename to src/ethereum/ethereum/tests/api/eth/contracts/EthCall.sol diff --git a/src/chains/ethereum/ethereum/tests/api/eth/contracts/GetCode.sol b/src/ethereum/ethereum/tests/api/eth/contracts/GetCode.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/contracts/GetCode.sol rename to src/ethereum/ethereum/tests/api/eth/contracts/GetCode.sol diff --git a/src/chains/ethereum/ethereum/tests/api/eth/contracts/GetProof.sol b/src/ethereum/ethereum/tests/api/eth/contracts/GetProof.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/contracts/GetProof.sol rename to src/ethereum/ethereum/tests/api/eth/contracts/GetProof.sol diff --git a/src/chains/ethereum/ethereum/tests/api/eth/contracts/GetStorageAt.sol b/src/ethereum/ethereum/tests/api/eth/contracts/GetStorageAt.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/contracts/GetStorageAt.sol rename to src/ethereum/ethereum/tests/api/eth/contracts/GetStorageAt.sol diff --git a/src/chains/ethereum/ethereum/tests/api/eth/contracts/Inspector.sol b/src/ethereum/ethereum/tests/api/eth/contracts/Inspector.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/contracts/Inspector.sol rename to src/ethereum/ethereum/tests/api/eth/contracts/Inspector.sol diff --git a/src/chains/ethereum/ethereum/tests/api/eth/contracts/Logs.sol b/src/ethereum/ethereum/tests/api/eth/contracts/Logs.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/contracts/Logs.sol rename to src/ethereum/ethereum/tests/api/eth/contracts/Logs.sol diff --git a/src/chains/ethereum/ethereum/tests/api/eth/contracts/NoOp.sol b/src/ethereum/ethereum/tests/api/eth/contracts/NoOp.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/contracts/NoOp.sol rename to src/ethereum/ethereum/tests/api/eth/contracts/NoOp.sol diff --git a/src/chains/ethereum/ethereum/tests/api/eth/contracts/Reverts.sol b/src/ethereum/ethereum/tests/api/eth/contracts/Reverts.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/contracts/Reverts.sol rename to src/ethereum/ethereum/tests/api/eth/contracts/Reverts.sol diff --git a/src/chains/ethereum/ethereum/tests/api/eth/estimateGas.test.ts b/src/ethereum/ethereum/tests/api/eth/estimateGas.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/estimateGas.test.ts rename to src/ethereum/ethereum/tests/api/eth/estimateGas.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/eth.test.ts b/src/ethereum/ethereum/tests/api/eth/eth.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/eth.test.ts rename to src/ethereum/ethereum/tests/api/eth/eth.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/feeHistory.test.ts b/src/ethereum/ethereum/tests/api/eth/feeHistory.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/feeHistory.test.ts rename to src/ethereum/ethereum/tests/api/eth/feeHistory.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/getBlockByNumber.test.ts b/src/ethereum/ethereum/tests/api/eth/getBlockByNumber.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/getBlockByNumber.test.ts rename to src/ethereum/ethereum/tests/api/eth/getBlockByNumber.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/getCode.test.ts b/src/ethereum/ethereum/tests/api/eth/getCode.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/getCode.test.ts rename to src/ethereum/ethereum/tests/api/eth/getCode.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/getProof.test.ts b/src/ethereum/ethereum/tests/api/eth/getProof.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/getProof.test.ts rename to src/ethereum/ethereum/tests/api/eth/getProof.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/getStorageAt.test.ts b/src/ethereum/ethereum/tests/api/eth/getStorageAt.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/getStorageAt.test.ts rename to src/ethereum/ethereum/tests/api/eth/getStorageAt.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/getTransactionReceipt.test.ts b/src/ethereum/ethereum/tests/api/eth/getTransactionReceipt.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/getTransactionReceipt.test.ts rename to src/ethereum/ethereum/tests/api/eth/getTransactionReceipt.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/instamine.test.ts b/src/ethereum/ethereum/tests/api/eth/instamine.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/instamine.test.ts rename to src/ethereum/ethereum/tests/api/eth/instamine.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/logs.test.ts b/src/ethereum/ethereum/tests/api/eth/logs.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/logs.test.ts rename to src/ethereum/ethereum/tests/api/eth/logs.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/sendRawTransaction.test.ts b/src/ethereum/ethereum/tests/api/eth/sendRawTransaction.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/sendRawTransaction.test.ts rename to src/ethereum/ethereum/tests/api/eth/sendRawTransaction.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/sendTransaction.test.ts b/src/ethereum/ethereum/tests/api/eth/sendTransaction.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/sendTransaction.test.ts rename to src/ethereum/ethereum/tests/api/eth/sendTransaction.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/sign.test.ts b/src/ethereum/ethereum/tests/api/eth/sign.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/sign.test.ts rename to src/ethereum/ethereum/tests/api/eth/sign.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/signTransaction.test.ts b/src/ethereum/ethereum/tests/api/eth/signTransaction.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/signTransaction.test.ts rename to src/ethereum/ethereum/tests/api/eth/signTransaction.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/signTypedData.test.ts b/src/ethereum/ethereum/tests/api/eth/signTypedData.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/signTypedData.test.ts rename to src/ethereum/ethereum/tests/api/eth/signTypedData.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/subscribe.test.ts b/src/ethereum/ethereum/tests/api/eth/subscribe.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/subscribe.test.ts rename to src/ethereum/ethereum/tests/api/eth/subscribe.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/eth/uncles.test.ts b/src/ethereum/ethereum/tests/api/eth/uncles.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/eth/uncles.test.ts rename to src/ethereum/ethereum/tests/api/eth/uncles.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/evm/evm.test.ts b/src/ethereum/ethereum/tests/api/evm/evm.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/evm/evm.test.ts rename to src/ethereum/ethereum/tests/api/evm/evm.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/evm/snapshot.sol b/src/ethereum/ethereum/tests/api/evm/snapshot.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/evm/snapshot.sol rename to src/ethereum/ethereum/tests/api/evm/snapshot.sol diff --git a/src/chains/ethereum/ethereum/tests/api/evm/snapshot.test.ts b/src/ethereum/ethereum/tests/api/evm/snapshot.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/evm/snapshot.test.ts rename to src/ethereum/ethereum/tests/api/evm/snapshot.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/miner/miner.test.ts b/src/ethereum/ethereum/tests/api/miner/miner.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/miner/miner.test.ts rename to src/ethereum/ethereum/tests/api/miner/miner.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/net/net.test.ts b/src/ethereum/ethereum/tests/api/net/net.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/net/net.test.ts rename to src/ethereum/ethereum/tests/api/net/net.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/personal/personal.test.ts b/src/ethereum/ethereum/tests/api/personal/personal.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/personal/personal.test.ts rename to src/ethereum/ethereum/tests/api/personal/personal.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/rpc/modules.test.ts b/src/ethereum/ethereum/tests/api/rpc/modules.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/rpc/modules.test.ts rename to src/ethereum/ethereum/tests/api/rpc/modules.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/shh/shh.test.ts b/src/ethereum/ethereum/tests/api/shh/shh.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/shh/shh.test.ts rename to src/ethereum/ethereum/tests/api/shh/shh.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/txpool/content.test.ts b/src/ethereum/ethereum/tests/api/txpool/content.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/txpool/content.test.ts rename to src/ethereum/ethereum/tests/api/txpool/content.test.ts diff --git a/src/chains/ethereum/ethereum/tests/api/web3/web3.test.ts b/src/ethereum/ethereum/tests/api/web3/web3.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/api/web3/web3.test.ts rename to src/ethereum/ethereum/tests/api/web3/web3.test.ts diff --git a/src/chains/ethereum/ethereum/tests/blockchain.test.ts b/src/ethereum/ethereum/tests/blockchain.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/blockchain.test.ts rename to src/ethereum/ethereum/tests/blockchain.test.ts diff --git a/src/chains/ethereum/ethereum/tests/connector.test.ts b/src/ethereum/ethereum/tests/connector.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/connector.test.ts rename to src/ethereum/ethereum/tests/connector.test.ts diff --git a/src/chains/ethereum/ethereum/tests/contracts/Create.sol b/src/ethereum/ethereum/tests/contracts/Create.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/contracts/Create.sol rename to src/ethereum/ethereum/tests/contracts/Create.sol diff --git a/src/chains/ethereum/ethereum/tests/contracts/Debug.sol b/src/ethereum/ethereum/tests/contracts/Debug.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/contracts/Debug.sol rename to src/ethereum/ethereum/tests/contracts/Debug.sol diff --git a/src/chains/ethereum/ethereum/tests/contracts/DebugComplexStorage.sol b/src/ethereum/ethereum/tests/contracts/DebugComplexStorage.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/contracts/DebugComplexStorage.sol rename to src/ethereum/ethereum/tests/contracts/DebugComplexStorage.sol diff --git a/src/chains/ethereum/ethereum/tests/contracts/DebugStorage.sol b/src/ethereum/ethereum/tests/contracts/DebugStorage.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/contracts/DebugStorage.sol rename to src/ethereum/ethereum/tests/contracts/DebugStorage.sol diff --git a/src/chains/ethereum/ethereum/tests/contracts/HelloWorld.sol b/src/ethereum/ethereum/tests/contracts/HelloWorld.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/contracts/HelloWorld.sol rename to src/ethereum/ethereum/tests/contracts/HelloWorld.sol diff --git a/src/chains/ethereum/ethereum/tests/contracts/Merge.sol b/src/ethereum/ethereum/tests/contracts/Merge.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/contracts/Merge.sol rename to src/ethereum/ethereum/tests/contracts/Merge.sol diff --git a/src/chains/ethereum/ethereum/tests/database.test.ts b/src/ethereum/ethereum/tests/database.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/database.test.ts rename to src/ethereum/ethereum/tests/database.test.ts diff --git a/src/chains/ethereum/ethereum/tests/databases/vNull/000005.ldb b/src/ethereum/ethereum/tests/databases/vNull/000005.ldb similarity index 100% rename from src/chains/ethereum/ethereum/tests/databases/vNull/000005.ldb rename to src/ethereum/ethereum/tests/databases/vNull/000005.ldb diff --git a/src/chains/ethereum/ethereum/tests/databases/vNull/000008.ldb b/src/ethereum/ethereum/tests/databases/vNull/000008.ldb similarity index 100% rename from src/chains/ethereum/ethereum/tests/databases/vNull/000008.ldb rename to src/ethereum/ethereum/tests/databases/vNull/000008.ldb diff --git a/src/chains/ethereum/ethereum/tests/databases/vNull/000011.ldb b/src/ethereum/ethereum/tests/databases/vNull/000011.ldb similarity index 100% rename from src/chains/ethereum/ethereum/tests/databases/vNull/000011.ldb rename to src/ethereum/ethereum/tests/databases/vNull/000011.ldb diff --git a/src/chains/ethereum/ethereum/tests/databases/vNull/000012.log b/src/ethereum/ethereum/tests/databases/vNull/000012.log similarity index 100% rename from src/chains/ethereum/ethereum/tests/databases/vNull/000012.log rename to src/ethereum/ethereum/tests/databases/vNull/000012.log diff --git a/src/chains/ethereum/ethereum/tests/databases/vNull/CURRENT b/src/ethereum/ethereum/tests/databases/vNull/CURRENT similarity index 100% rename from src/chains/ethereum/ethereum/tests/databases/vNull/CURRENT rename to src/ethereum/ethereum/tests/databases/vNull/CURRENT diff --git a/src/chains/ethereum/ethereum/tests/databases/vNull/LOCK b/src/ethereum/ethereum/tests/databases/vNull/LOCK similarity index 100% rename from src/chains/ethereum/ethereum/tests/databases/vNull/LOCK rename to src/ethereum/ethereum/tests/databases/vNull/LOCK diff --git a/src/chains/ethereum/ethereum/tests/databases/vNull/LOG b/src/ethereum/ethereum/tests/databases/vNull/LOG similarity index 100% rename from src/chains/ethereum/ethereum/tests/databases/vNull/LOG rename to src/ethereum/ethereum/tests/databases/vNull/LOG diff --git a/src/chains/ethereum/ethereum/tests/databases/vNull/LOG.old b/src/ethereum/ethereum/tests/databases/vNull/LOG.old similarity index 100% rename from src/chains/ethereum/ethereum/tests/databases/vNull/LOG.old rename to src/ethereum/ethereum/tests/databases/vNull/LOG.old diff --git a/src/chains/ethereum/ethereum/tests/databases/vNull/MANIFEST-000010 b/src/ethereum/ethereum/tests/databases/vNull/MANIFEST-000010 similarity index 100% rename from src/chains/ethereum/ethereum/tests/databases/vNull/MANIFEST-000010 rename to src/ethereum/ethereum/tests/databases/vNull/MANIFEST-000010 diff --git a/src/chains/ethereum/ethereum/tests/forking/account.test.ts b/src/ethereum/ethereum/tests/forking/account.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/forking/account.test.ts rename to src/ethereum/ethereum/tests/forking/account.test.ts diff --git a/src/chains/ethereum/ethereum/tests/forking/auth.test.ts b/src/ethereum/ethereum/tests/forking/auth.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/forking/auth.test.ts rename to src/ethereum/ethereum/tests/forking/auth.test.ts diff --git a/src/chains/ethereum/ethereum/tests/forking/block.test.ts b/src/ethereum/ethereum/tests/forking/block.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/forking/block.test.ts rename to src/ethereum/ethereum/tests/forking/block.test.ts diff --git a/src/chains/ethereum/ethereum/tests/forking/cache.test.ts b/src/ethereum/ethereum/tests/forking/cache.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/forking/cache.test.ts rename to src/ethereum/ethereum/tests/forking/cache.test.ts diff --git a/src/chains/ethereum/ethereum/tests/forking/cache/arbitraries.ts b/src/ethereum/ethereum/tests/forking/cache/arbitraries.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/forking/cache/arbitraries.ts rename to src/ethereum/ethereum/tests/forking/cache/arbitraries.ts diff --git a/src/chains/ethereum/ethereum/tests/forking/cache/batch-manager.ts b/src/ethereum/ethereum/tests/forking/cache/batch-manager.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/forking/cache/batch-manager.ts rename to src/ethereum/ethereum/tests/forking/cache/batch-manager.ts diff --git a/src/chains/ethereum/ethereum/tests/forking/contracts/Call.sol b/src/ethereum/ethereum/tests/forking/contracts/Call.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/forking/contracts/Call.sol rename to src/ethereum/ethereum/tests/forking/contracts/Call.sol diff --git a/src/chains/ethereum/ethereum/tests/forking/contracts/Forking.sol b/src/ethereum/ethereum/tests/forking/contracts/Forking.sol similarity index 100% rename from src/chains/ethereum/ethereum/tests/forking/contracts/Forking.sol rename to src/ethereum/ethereum/tests/forking/contracts/Forking.sol diff --git a/src/chains/ethereum/ethereum/tests/forking/forking.test.ts b/src/ethereum/ethereum/tests/forking/forking.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/forking/forking.test.ts rename to src/ethereum/ethereum/tests/forking/forking.test.ts diff --git a/src/chains/ethereum/ethereum/tests/forking/helpers.ts b/src/ethereum/ethereum/tests/forking/helpers.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/forking/helpers.ts rename to src/ethereum/ethereum/tests/forking/helpers.ts diff --git a/src/chains/ethereum/ethereum/tests/forking/transaction.test.ts b/src/ethereum/ethereum/tests/forking/transaction.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/forking/transaction.test.ts rename to src/ethereum/ethereum/tests/forking/transaction.test.ts diff --git a/src/chains/ethereum/ethereum/tests/helpers/compile.ts b/src/ethereum/ethereum/tests/helpers/compile.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/helpers/compile.ts rename to src/ethereum/ethereum/tests/helpers/compile.ts diff --git a/src/chains/ethereum/ethereum/tests/helpers/getProvider.ts b/src/ethereum/ethereum/tests/helpers/getProvider.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/helpers/getProvider.ts rename to src/ethereum/ethereum/tests/helpers/getProvider.ts diff --git a/src/chains/ethereum/ethereum/tests/helpers/skipIfNoInfuraKey.ts b/src/ethereum/ethereum/tests/helpers/skipIfNoInfuraKey.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/helpers/skipIfNoInfuraKey.ts rename to src/ethereum/ethereum/tests/helpers/skipIfNoInfuraKey.ts diff --git a/src/chains/ethereum/ethereum/tests/merge.test.ts b/src/ethereum/ethereum/tests/merge.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/merge.test.ts rename to src/ethereum/ethereum/tests/merge.test.ts diff --git a/src/chains/ethereum/ethereum/tests/miner/miner.test.ts b/src/ethereum/ethereum/tests/miner/miner.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/miner/miner.test.ts rename to src/ethereum/ethereum/tests/miner/miner.test.ts diff --git a/src/chains/ethereum/ethereum/tests/provider.test.ts b/src/ethereum/ethereum/tests/provider.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/provider.test.ts rename to src/ethereum/ethereum/tests/provider.test.ts diff --git a/src/chains/ethereum/ethereum/tests/temp-tests.test.ts b/src/ethereum/ethereum/tests/temp-tests.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/temp-tests.test.ts rename to src/ethereum/ethereum/tests/temp-tests.test.ts diff --git a/src/chains/ethereum/ethereum/tests/transaction-pool.test.ts b/src/ethereum/ethereum/tests/transaction-pool.test.ts similarity index 100% rename from src/chains/ethereum/ethereum/tests/transaction-pool.test.ts rename to src/ethereum/ethereum/tests/transaction-pool.test.ts diff --git a/src/chains/ethereum/ethereum/tests/tsconfig.json b/src/ethereum/ethereum/tests/tsconfig.json similarity index 100% rename from src/chains/ethereum/ethereum/tests/tsconfig.json rename to src/ethereum/ethereum/tests/tsconfig.json diff --git a/src/chains/ethereum/ethereum/tsconfig.json b/src/ethereum/ethereum/tsconfig.json similarity index 100% rename from src/chains/ethereum/ethereum/tsconfig.json rename to src/ethereum/ethereum/tsconfig.json diff --git a/src/chains/ethereum/ethereum/typedoc.json b/src/ethereum/ethereum/typedoc.json similarity index 100% rename from src/chains/ethereum/ethereum/typedoc.json rename to src/ethereum/ethereum/typedoc.json diff --git a/src/chains/filecoin/options/.npmignore b/src/ethereum/options/.npmignore similarity index 100% rename from src/chains/filecoin/options/.npmignore rename to src/ethereum/options/.npmignore diff --git a/src/chains/ethereum/utils/LICENSE b/src/ethereum/options/LICENSE similarity index 100% rename from src/chains/ethereum/utils/LICENSE rename to src/ethereum/options/LICENSE diff --git a/src/chains/ethereum/options/README.md b/src/ethereum/options/README.md similarity index 100% rename from src/chains/ethereum/options/README.md rename to src/ethereum/options/README.md diff --git a/src/chains/ethereum/options/index.ts b/src/ethereum/options/index.ts similarity index 100% rename from src/chains/ethereum/options/index.ts rename to src/ethereum/options/index.ts diff --git a/src/chains/ethereum/options/package-lock.json b/src/ethereum/options/package-lock.json similarity index 100% rename from src/chains/ethereum/options/package-lock.json rename to src/ethereum/options/package-lock.json diff --git a/src/chains/ethereum/options/package.json b/src/ethereum/options/package.json similarity index 100% rename from src/chains/ethereum/options/package.json rename to src/ethereum/options/package.json diff --git a/src/chains/ethereum/options/src/chain-options.ts b/src/ethereum/options/src/chain-options.ts similarity index 100% rename from src/chains/ethereum/options/src/chain-options.ts rename to src/ethereum/options/src/chain-options.ts diff --git a/src/chains/ethereum/options/src/database-options.ts b/src/ethereum/options/src/database-options.ts similarity index 100% rename from src/chains/ethereum/options/src/database-options.ts rename to src/ethereum/options/src/database-options.ts diff --git a/src/chains/ethereum/options/src/fork-options.ts b/src/ethereum/options/src/fork-options.ts similarity index 100% rename from src/chains/ethereum/options/src/fork-options.ts rename to src/ethereum/options/src/fork-options.ts diff --git a/src/chains/ethereum/options/src/helper-types.ts b/src/ethereum/options/src/helper-types.ts similarity index 100% rename from src/chains/ethereum/options/src/helper-types.ts rename to src/ethereum/options/src/helper-types.ts diff --git a/src/chains/ethereum/options/src/helpers.ts b/src/ethereum/options/src/helpers.ts similarity index 100% rename from src/chains/ethereum/options/src/helpers.ts rename to src/ethereum/options/src/helpers.ts diff --git a/src/chains/ethereum/options/src/index.ts b/src/ethereum/options/src/index.ts similarity index 100% rename from src/chains/ethereum/options/src/index.ts rename to src/ethereum/options/src/index.ts diff --git a/src/chains/ethereum/options/src/logging-options.ts b/src/ethereum/options/src/logging-options.ts similarity index 100% rename from src/chains/ethereum/options/src/logging-options.ts rename to src/ethereum/options/src/logging-options.ts diff --git a/src/chains/ethereum/options/src/miner-options.ts b/src/ethereum/options/src/miner-options.ts similarity index 100% rename from src/chains/ethereum/options/src/miner-options.ts rename to src/ethereum/options/src/miner-options.ts diff --git a/src/chains/ethereum/options/src/wallet-options.ts b/src/ethereum/options/src/wallet-options.ts similarity index 100% rename from src/chains/ethereum/options/src/wallet-options.ts rename to src/ethereum/options/src/wallet-options.ts diff --git a/src/chains/ethereum/options/tests/index.test.ts b/src/ethereum/options/tests/index.test.ts similarity index 100% rename from src/chains/ethereum/options/tests/index.test.ts rename to src/ethereum/options/tests/index.test.ts diff --git a/src/chains/ethereum/options/tsconfig.json b/src/ethereum/options/tsconfig.json similarity index 100% rename from src/chains/ethereum/options/tsconfig.json rename to src/ethereum/options/tsconfig.json diff --git a/src/packages/cli/.npmignore b/src/ethereum/transaction/.npmignore similarity index 100% rename from src/packages/cli/.npmignore rename to src/ethereum/transaction/.npmignore diff --git a/src/chains/filecoin/options/LICENSE b/src/ethereum/transaction/LICENSE similarity index 100% rename from src/chains/filecoin/options/LICENSE rename to src/ethereum/transaction/LICENSE diff --git a/src/chains/ethereum/transaction/README.md b/src/ethereum/transaction/README.md similarity index 100% rename from src/chains/ethereum/transaction/README.md rename to src/ethereum/transaction/README.md diff --git a/src/chains/ethereum/transaction/index.ts b/src/ethereum/transaction/index.ts similarity index 100% rename from src/chains/ethereum/transaction/index.ts rename to src/ethereum/transaction/index.ts diff --git a/src/chains/ethereum/transaction/package-lock.json b/src/ethereum/transaction/package-lock.json similarity index 100% rename from src/chains/ethereum/transaction/package-lock.json rename to src/ethereum/transaction/package-lock.json diff --git a/src/chains/ethereum/transaction/package.json b/src/ethereum/transaction/package.json similarity index 100% rename from src/chains/ethereum/transaction/package.json rename to src/ethereum/transaction/package.json diff --git a/src/chains/ethereum/transaction/src/access-lists.ts b/src/ethereum/transaction/src/access-lists.ts similarity index 100% rename from src/chains/ethereum/transaction/src/access-lists.ts rename to src/ethereum/transaction/src/access-lists.ts diff --git a/src/chains/ethereum/transaction/src/base-transaction.ts b/src/ethereum/transaction/src/base-transaction.ts similarity index 100% rename from src/chains/ethereum/transaction/src/base-transaction.ts rename to src/ethereum/transaction/src/base-transaction.ts diff --git a/src/chains/ethereum/transaction/src/eip1559-fee-market-transaction.ts b/src/ethereum/transaction/src/eip1559-fee-market-transaction.ts similarity index 100% rename from src/chains/ethereum/transaction/src/eip1559-fee-market-transaction.ts rename to src/ethereum/transaction/src/eip1559-fee-market-transaction.ts diff --git a/src/chains/ethereum/transaction/src/eip2930-access-list-transaction.ts b/src/ethereum/transaction/src/eip2930-access-list-transaction.ts similarity index 100% rename from src/chains/ethereum/transaction/src/eip2930-access-list-transaction.ts rename to src/ethereum/transaction/src/eip2930-access-list-transaction.ts diff --git a/src/chains/ethereum/transaction/src/hardfork.ts b/src/ethereum/transaction/src/hardfork.ts similarity index 100% rename from src/chains/ethereum/transaction/src/hardfork.ts rename to src/ethereum/transaction/src/hardfork.ts diff --git a/src/chains/ethereum/transaction/src/legacy-transaction.ts b/src/ethereum/transaction/src/legacy-transaction.ts similarity index 100% rename from src/chains/ethereum/transaction/src/legacy-transaction.ts rename to src/ethereum/transaction/src/legacy-transaction.ts diff --git a/src/chains/ethereum/transaction/src/params.ts b/src/ethereum/transaction/src/params.ts similarity index 100% rename from src/chains/ethereum/transaction/src/params.ts rename to src/ethereum/transaction/src/params.ts diff --git a/src/chains/ethereum/transaction/src/raw.ts b/src/ethereum/transaction/src/raw.ts similarity index 100% rename from src/chains/ethereum/transaction/src/raw.ts rename to src/ethereum/transaction/src/raw.ts diff --git a/src/chains/ethereum/transaction/src/rpc-transaction.ts b/src/ethereum/transaction/src/rpc-transaction.ts similarity index 100% rename from src/chains/ethereum/transaction/src/rpc-transaction.ts rename to src/ethereum/transaction/src/rpc-transaction.ts diff --git a/src/chains/ethereum/transaction/src/runtime-transaction.ts b/src/ethereum/transaction/src/runtime-transaction.ts similarity index 100% rename from src/chains/ethereum/transaction/src/runtime-transaction.ts rename to src/ethereum/transaction/src/runtime-transaction.ts diff --git a/src/chains/ethereum/transaction/src/signing.ts b/src/ethereum/transaction/src/signing.ts similarity index 100% rename from src/chains/ethereum/transaction/src/signing.ts rename to src/ethereum/transaction/src/signing.ts diff --git a/src/chains/ethereum/transaction/src/transaction-factory.ts b/src/ethereum/transaction/src/transaction-factory.ts similarity index 100% rename from src/chains/ethereum/transaction/src/transaction-factory.ts rename to src/ethereum/transaction/src/transaction-factory.ts diff --git a/src/chains/ethereum/transaction/src/transaction-receipt.ts b/src/ethereum/transaction/src/transaction-receipt.ts similarity index 100% rename from src/chains/ethereum/transaction/src/transaction-receipt.ts rename to src/ethereum/transaction/src/transaction-receipt.ts diff --git a/src/chains/ethereum/transaction/src/transaction-types.ts b/src/ethereum/transaction/src/transaction-types.ts similarity index 100% rename from src/chains/ethereum/transaction/src/transaction-types.ts rename to src/ethereum/transaction/src/transaction-types.ts diff --git a/src/chains/ethereum/transaction/src/vm-transaction.ts b/src/ethereum/transaction/src/vm-transaction.ts similarity index 100% rename from src/chains/ethereum/transaction/src/vm-transaction.ts rename to src/ethereum/transaction/src/vm-transaction.ts diff --git a/src/chains/ethereum/transaction/tests/index.test.ts b/src/ethereum/transaction/tests/index.test.ts similarity index 100% rename from src/chains/ethereum/transaction/tests/index.test.ts rename to src/ethereum/transaction/tests/index.test.ts diff --git a/src/chains/ethereum/transaction/tsconfig.json b/src/ethereum/transaction/tsconfig.json similarity index 100% rename from src/chains/ethereum/transaction/tsconfig.json rename to src/ethereum/transaction/tsconfig.json diff --git a/src/packages/colors/.npmignore b/src/ethereum/utils/.npmignore similarity index 100% rename from src/packages/colors/.npmignore rename to src/ethereum/utils/.npmignore diff --git a/src/packages/cli/LICENSE b/src/ethereum/utils/LICENSE similarity index 100% rename from src/packages/cli/LICENSE rename to src/ethereum/utils/LICENSE diff --git a/src/chains/ethereum/utils/README.md b/src/ethereum/utils/README.md similarity index 100% rename from src/chains/ethereum/utils/README.md rename to src/ethereum/utils/README.md diff --git a/src/chains/ethereum/utils/index.ts b/src/ethereum/utils/index.ts similarity index 100% rename from src/chains/ethereum/utils/index.ts rename to src/ethereum/utils/index.ts diff --git a/src/chains/ethereum/utils/package-lock.json b/src/ethereum/utils/package-lock.json similarity index 100% rename from src/chains/ethereum/utils/package-lock.json rename to src/ethereum/utils/package-lock.json diff --git a/src/chains/ethereum/utils/package.json b/src/ethereum/utils/package.json similarity index 100% rename from src/chains/ethereum/utils/package.json rename to src/ethereum/utils/package.json diff --git a/src/chains/ethereum/utils/src/errors/abort-error.ts b/src/ethereum/utils/src/errors/abort-error.ts similarity index 100% rename from src/chains/ethereum/utils/src/errors/abort-error.ts rename to src/ethereum/utils/src/errors/abort-error.ts diff --git a/src/chains/ethereum/utils/src/errors/call-error.ts b/src/ethereum/utils/src/errors/call-error.ts similarity index 100% rename from src/chains/ethereum/utils/src/errors/call-error.ts rename to src/ethereum/utils/src/errors/call-error.ts diff --git a/src/chains/ethereum/utils/src/errors/coded-error.ts b/src/ethereum/utils/src/errors/coded-error.ts similarity index 100% rename from src/chains/ethereum/utils/src/errors/coded-error.ts rename to src/ethereum/utils/src/errors/coded-error.ts diff --git a/src/chains/ethereum/utils/src/errors/errors.ts b/src/ethereum/utils/src/errors/errors.ts similarity index 100% rename from src/chains/ethereum/utils/src/errors/errors.ts rename to src/ethereum/utils/src/errors/errors.ts diff --git a/src/chains/ethereum/utils/src/errors/runtime-error.ts b/src/ethereum/utils/src/errors/runtime-error.ts similarity index 100% rename from src/chains/ethereum/utils/src/errors/runtime-error.ts rename to src/ethereum/utils/src/errors/runtime-error.ts diff --git a/src/chains/ethereum/utils/src/index.ts b/src/ethereum/utils/src/index.ts similarity index 100% rename from src/chains/ethereum/utils/src/index.ts rename to src/ethereum/utils/src/index.ts diff --git a/src/chains/ethereum/utils/src/things/account.ts b/src/ethereum/utils/src/things/account.ts similarity index 100% rename from src/chains/ethereum/utils/src/things/account.ts rename to src/ethereum/utils/src/things/account.ts diff --git a/src/chains/ethereum/utils/src/things/blocklogs.ts b/src/ethereum/utils/src/things/blocklogs.ts similarity index 100% rename from src/chains/ethereum/utils/src/things/blocklogs.ts rename to src/ethereum/utils/src/things/blocklogs.ts diff --git a/src/chains/ethereum/utils/src/things/tags.ts b/src/ethereum/utils/src/things/tags.ts similarity index 100% rename from src/chains/ethereum/utils/src/things/tags.ts rename to src/ethereum/utils/src/things/tags.ts diff --git a/src/chains/ethereum/utils/src/things/trace-data.ts b/src/ethereum/utils/src/things/trace-data.ts similarity index 100% rename from src/chains/ethereum/utils/src/things/trace-data.ts rename to src/ethereum/utils/src/things/trace-data.ts diff --git a/src/chains/ethereum/utils/src/things/trace-storage-map.ts b/src/ethereum/utils/src/things/trace-storage-map.ts similarity index 100% rename from src/chains/ethereum/utils/src/things/trace-storage-map.ts rename to src/ethereum/utils/src/things/trace-storage-map.ts diff --git a/src/chains/ethereum/utils/src/types/account-proof.ts b/src/ethereum/utils/src/types/account-proof.ts similarity index 100% rename from src/chains/ethereum/utils/src/types/account-proof.ts rename to src/ethereum/utils/src/types/account-proof.ts diff --git a/src/chains/ethereum/utils/src/types/debug-storage.ts b/src/ethereum/utils/src/types/debug-storage.ts similarity index 100% rename from src/chains/ethereum/utils/src/types/debug-storage.ts rename to src/ethereum/utils/src/types/debug-storage.ts diff --git a/src/chains/ethereum/utils/src/types/extract-values-from-types.ts b/src/ethereum/utils/src/types/extract-values-from-types.ts similarity index 100% rename from src/chains/ethereum/utils/src/types/extract-values-from-types.ts rename to src/ethereum/utils/src/types/extract-values-from-types.ts diff --git a/src/chains/ethereum/utils/src/types/fee-history.ts b/src/ethereum/utils/src/types/fee-history.ts similarity index 100% rename from src/chains/ethereum/utils/src/types/fee-history.ts rename to src/ethereum/utils/src/types/fee-history.ts diff --git a/src/chains/ethereum/utils/src/types/filters.ts b/src/ethereum/utils/src/types/filters.ts similarity index 100% rename from src/chains/ethereum/utils/src/types/filters.ts rename to src/ethereum/utils/src/types/filters.ts diff --git a/src/chains/ethereum/utils/src/types/hex-datatypes.ts b/src/ethereum/utils/src/types/hex-datatypes.ts similarity index 100% rename from src/chains/ethereum/utils/src/types/hex-datatypes.ts rename to src/ethereum/utils/src/types/hex-datatypes.ts diff --git a/src/chains/ethereum/utils/src/types/shh.ts b/src/ethereum/utils/src/types/shh.ts similarity index 100% rename from src/chains/ethereum/utils/src/types/shh.ts rename to src/ethereum/utils/src/types/shh.ts diff --git a/src/chains/ethereum/utils/src/types/subscriptions.ts b/src/ethereum/utils/src/types/subscriptions.ts similarity index 100% rename from src/chains/ethereum/utils/src/types/subscriptions.ts rename to src/ethereum/utils/src/types/subscriptions.ts diff --git a/src/chains/ethereum/utils/src/types/trace-transaction.ts b/src/ethereum/utils/src/types/trace-transaction.ts similarity index 100% rename from src/chains/ethereum/utils/src/types/trace-transaction.ts rename to src/ethereum/utils/src/types/trace-transaction.ts diff --git a/src/chains/ethereum/utils/src/types/tuple-from-union.ts b/src/ethereum/utils/src/types/tuple-from-union.ts similarity index 100% rename from src/chains/ethereum/utils/src/types/tuple-from-union.ts rename to src/ethereum/utils/src/types/tuple-from-union.ts diff --git a/src/chains/ethereum/utils/tests/index.test.ts b/src/ethereum/utils/tests/index.test.ts similarity index 100% rename from src/chains/ethereum/utils/tests/index.test.ts rename to src/ethereum/utils/tests/index.test.ts diff --git a/src/chains/ethereum/utils/tsconfig.json b/src/ethereum/utils/tsconfig.json similarity index 100% rename from src/chains/ethereum/utils/tsconfig.json rename to src/ethereum/utils/tsconfig.json diff --git a/src/packages/core/.npmignore b/src/flavor/.npmignore similarity index 100% rename from src/packages/core/.npmignore rename to src/flavor/.npmignore diff --git a/src/packages/core/LICENSE b/src/flavor/LICENSE similarity index 100% rename from src/packages/core/LICENSE rename to src/flavor/LICENSE diff --git a/src/packages/flavor/README.md b/src/flavor/README.md similarity index 100% rename from src/packages/flavor/README.md rename to src/flavor/README.md diff --git a/src/packages/flavor/example/.gitignore b/src/flavor/example/.gitignore similarity index 100% rename from src/packages/flavor/example/.gitignore rename to src/flavor/example/.gitignore diff --git a/src/packages/flavor/example/LICENSE b/src/flavor/example/LICENSE similarity index 100% rename from src/packages/flavor/example/LICENSE rename to src/flavor/example/LICENSE diff --git a/src/packages/flavor/example/README.md b/src/flavor/example/README.md similarity index 100% rename from src/packages/flavor/example/README.md rename to src/flavor/example/README.md diff --git a/src/packages/flavor/example/package-lock.json b/src/flavor/example/package-lock.json similarity index 100% rename from src/packages/flavor/example/package-lock.json rename to src/flavor/example/package-lock.json diff --git a/src/packages/flavor/example/package.json b/src/flavor/example/package.json similarity index 100% rename from src/packages/flavor/example/package.json rename to src/flavor/example/package.json diff --git a/src/packages/flavor/example/src/connector.ts b/src/flavor/example/src/connector.ts similarity index 100% rename from src/packages/flavor/example/src/connector.ts rename to src/flavor/example/src/connector.ts diff --git a/src/packages/flavor/example/src/flavor.ts b/src/flavor/example/src/flavor.ts similarity index 100% rename from src/packages/flavor/example/src/flavor.ts rename to src/flavor/example/src/flavor.ts diff --git a/src/packages/flavor/example/src/index.ts b/src/flavor/example/src/index.ts similarity index 100% rename from src/packages/flavor/example/src/index.ts rename to src/flavor/example/src/index.ts diff --git a/src/packages/flavor/example/src/options.ts b/src/flavor/example/src/options.ts similarity index 100% rename from src/packages/flavor/example/src/options.ts rename to src/flavor/example/src/options.ts diff --git a/src/packages/flavor/example/src/provider.ts b/src/flavor/example/src/provider.ts similarity index 100% rename from src/packages/flavor/example/src/provider.ts rename to src/flavor/example/src/provider.ts diff --git a/src/packages/flavor/example/tests/provider.test.ts b/src/flavor/example/tests/provider.test.ts similarity index 100% rename from src/packages/flavor/example/tests/provider.test.ts rename to src/flavor/example/tests/provider.test.ts diff --git a/src/packages/flavor/example/tsconfig.json b/src/flavor/example/tsconfig.json similarity index 100% rename from src/packages/flavor/example/tsconfig.json rename to src/flavor/example/tsconfig.json diff --git a/src/packages/flavor/index.ts b/src/flavor/index.ts similarity index 100% rename from src/packages/flavor/index.ts rename to src/flavor/index.ts diff --git a/src/packages/flavor/package-lock.json b/src/flavor/package-lock.json similarity index 100% rename from src/packages/flavor/package-lock.json rename to src/flavor/package-lock.json diff --git a/src/packages/flavor/package.json b/src/flavor/package.json similarity index 100% rename from src/packages/flavor/package.json rename to src/flavor/package.json diff --git a/src/packages/flavor/src/connector.ts b/src/flavor/src/connector.ts similarity index 100% rename from src/packages/flavor/src/connector.ts rename to src/flavor/src/connector.ts diff --git a/src/packages/flavor/src/flavor.ts b/src/flavor/src/flavor.ts similarity index 100% rename from src/packages/flavor/src/flavor.ts rename to src/flavor/src/flavor.ts diff --git a/src/packages/flavor/src/load.ts b/src/flavor/src/load.ts similarity index 100% rename from src/packages/flavor/src/load.ts rename to src/flavor/src/load.ts diff --git a/src/packages/flavor/src/options/cli/cli-config.ts b/src/flavor/src/options/cli/cli-config.ts similarity index 100% rename from src/packages/flavor/src/options/cli/cli-config.ts rename to src/flavor/src/options/cli/cli-config.ts diff --git a/src/packages/flavor/src/options/cli/cli-defaults.ts b/src/flavor/src/options/cli/cli-defaults.ts similarity index 100% rename from src/packages/flavor/src/options/cli/cli-defaults.ts rename to src/flavor/src/options/cli/cli-defaults.ts diff --git a/src/packages/flavor/src/options/cli/cli-options-config.ts b/src/flavor/src/options/cli/cli-options-config.ts similarity index 100% rename from src/packages/flavor/src/options/cli/cli-options-config.ts rename to src/flavor/src/options/cli/cli-options-config.ts diff --git a/src/packages/flavor/src/options/cli/cli-options.ts b/src/flavor/src/options/cli/cli-options.ts similarity index 100% rename from src/packages/flavor/src/options/cli/cli-options.ts rename to src/flavor/src/options/cli/cli-options.ts diff --git a/src/packages/flavor/src/options/server/server-config.ts b/src/flavor/src/options/server/server-config.ts similarity index 100% rename from src/packages/flavor/src/options/server/server-config.ts rename to src/flavor/src/options/server/server-config.ts diff --git a/src/packages/flavor/src/options/server/server-defaults.ts b/src/flavor/src/options/server/server-defaults.ts similarity index 100% rename from src/packages/flavor/src/options/server/server-defaults.ts rename to src/flavor/src/options/server/server-defaults.ts diff --git a/src/packages/flavor/src/options/server/server-options-config.ts b/src/flavor/src/options/server/server-options-config.ts similarity index 100% rename from src/packages/flavor/src/options/server/server-options-config.ts rename to src/flavor/src/options/server/server-options-config.ts diff --git a/src/packages/flavor/src/options/server/server-options.ts b/src/flavor/src/options/server/server-options.ts similarity index 100% rename from src/packages/flavor/src/options/server/server-options.ts rename to src/flavor/src/options/server/server-options.ts diff --git a/src/packages/flavor/tests/index.test.ts b/src/flavor/tests/index.test.ts similarity index 100% rename from src/packages/flavor/tests/index.test.ts rename to src/flavor/tests/index.test.ts diff --git a/src/packages/flavor/tsconfig.json b/src/flavor/tsconfig.json similarity index 100% rename from src/packages/flavor/tsconfig.json rename to src/flavor/tsconfig.json diff --git a/src/packages/flavor/.npmignore b/src/ganache/.npmignore similarity index 100% rename from src/packages/flavor/.npmignore rename to src/ganache/.npmignore diff --git a/src/packages/ganache/Dockerfile b/src/ganache/Dockerfile similarity index 100% rename from src/packages/ganache/Dockerfile rename to src/ganache/Dockerfile diff --git a/src/packages/flavor/LICENSE b/src/ganache/LICENSE similarity index 100% rename from src/packages/flavor/LICENSE rename to src/ganache/LICENSE diff --git a/src/packages/ganache/README.md b/src/ganache/README.md similarity index 100% rename from src/packages/ganache/README.md rename to src/ganache/README.md diff --git a/src/packages/ganache/api-extractor.json b/src/ganache/api-extractor.json similarity index 100% rename from src/packages/ganache/api-extractor.json rename to src/ganache/api-extractor.json diff --git a/src/packages/ganache/index.ts b/src/ganache/index.ts similarity index 100% rename from src/packages/ganache/index.ts rename to src/ganache/index.ts diff --git a/src/packages/ganache/npm-shrinkwrap.json b/src/ganache/npm-shrinkwrap.json similarity index 100% rename from src/packages/ganache/npm-shrinkwrap.json rename to src/ganache/npm-shrinkwrap.json diff --git a/src/packages/ganache/package.json b/src/ganache/package.json similarity index 100% rename from src/packages/ganache/package.json rename to src/ganache/package.json diff --git a/src/packages/ganache/src/cli.ts b/src/ganache/src/cli.ts similarity index 100% rename from src/packages/ganache/src/cli.ts rename to src/ganache/src/cli.ts diff --git a/src/packages/ganache/tests/index.test.ts b/src/ganache/tests/index.test.ts similarity index 100% rename from src/packages/ganache/tests/index.test.ts rename to src/ganache/tests/index.test.ts diff --git a/src/packages/ganache/tests/types.test.ts b/src/ganache/tests/types.test.ts similarity index 100% rename from src/packages/ganache/tests/types.test.ts rename to src/ganache/tests/types.test.ts diff --git a/src/packages/ganache/tsconfig.json b/src/ganache/tsconfig.json similarity index 100% rename from src/packages/ganache/tsconfig.json rename to src/ganache/tsconfig.json diff --git a/src/packages/ganache/tsdoc.json b/src/ganache/tsdoc.json similarity index 100% rename from src/packages/ganache/tsdoc.json rename to src/ganache/tsdoc.json diff --git a/src/packages/ganache/webpack.config.ts b/src/ganache/webpack.config.ts similarity index 100% rename from src/packages/ganache/webpack.config.ts rename to src/ganache/webpack.config.ts diff --git a/src/packages/ganache/webpack/deduplicate-plugin.ts b/src/ganache/webpack/deduplicate-plugin.ts similarity index 100% rename from src/packages/ganache/webpack/deduplicate-plugin.ts rename to src/ganache/webpack/deduplicate-plugin.ts diff --git a/src/packages/ganache/webpack/polyfills/browser-crypto.ts b/src/ganache/webpack/polyfills/browser-crypto.ts similarity index 100% rename from src/packages/ganache/webpack/polyfills/browser-crypto.ts rename to src/ganache/webpack/polyfills/browser-crypto.ts diff --git a/src/packages/ganache/webpack/polyfills/browser-tmp-promise.ts b/src/ganache/webpack/polyfills/browser-tmp-promise.ts similarity index 100% rename from src/packages/ganache/webpack/polyfills/browser-tmp-promise.ts rename to src/ganache/webpack/polyfills/browser-tmp-promise.ts diff --git a/src/packages/ganache/webpack/polyfills/debug.ts b/src/ganache/webpack/polyfills/debug.ts similarity index 100% rename from src/packages/ganache/webpack/polyfills/debug.ts rename to src/ganache/webpack/polyfills/debug.ts diff --git a/src/packages/ganache/webpack/polyfills/url.ts b/src/ganache/webpack/polyfills/url.ts similarity index 100% rename from src/packages/ganache/webpack/polyfills/url.ts rename to src/ganache/webpack/polyfills/url.ts diff --git a/src/packages/ganache/webpack/polyfills/ws.ts b/src/ganache/webpack/polyfills/ws.ts similarity index 100% rename from src/packages/ganache/webpack/polyfills/ws.ts rename to src/ganache/webpack/polyfills/ws.ts diff --git a/src/packages/ganache/webpack/webpack.browser.config.ts b/src/ganache/webpack/webpack.browser.config.ts similarity index 100% rename from src/packages/ganache/webpack/webpack.browser.config.ts rename to src/ganache/webpack/webpack.browser.config.ts diff --git a/src/packages/ganache/webpack/webpack.common.config.ts b/src/ganache/webpack/webpack.common.config.ts similarity index 100% rename from src/packages/ganache/webpack/webpack.common.config.ts rename to src/ganache/webpack/webpack.common.config.ts diff --git a/src/packages/ganache/webpack/webpack.node.config.ts b/src/ganache/webpack/webpack.node.config.ts similarity index 100% rename from src/packages/ganache/webpack/webpack.node.config.ts rename to src/ganache/webpack/webpack.node.config.ts diff --git a/src/packages/ganache/.npmignore b/src/options/.npmignore similarity index 100% rename from src/packages/ganache/.npmignore rename to src/options/.npmignore diff --git a/src/packages/ganache/LICENSE b/src/options/LICENSE similarity index 100% rename from src/packages/ganache/LICENSE rename to src/options/LICENSE diff --git a/src/packages/options/README.md b/src/options/README.md similarity index 100% rename from src/packages/options/README.md rename to src/options/README.md diff --git a/src/packages/options/index.ts b/src/options/index.ts similarity index 100% rename from src/packages/options/index.ts rename to src/options/index.ts diff --git a/src/packages/options/package-lock.json b/src/options/package-lock.json similarity index 100% rename from src/packages/options/package-lock.json rename to src/options/package-lock.json diff --git a/src/packages/options/package.json b/src/options/package.json similarity index 100% rename from src/packages/options/package.json rename to src/options/package.json diff --git a/src/packages/options/src/base.ts b/src/options/src/base.ts similarity index 100% rename from src/packages/options/src/base.ts rename to src/options/src/base.ts diff --git a/src/packages/options/src/create.ts b/src/options/src/create.ts similarity index 100% rename from src/packages/options/src/create.ts rename to src/options/src/create.ts diff --git a/src/packages/options/src/definition.ts b/src/options/src/definition.ts similarity index 100% rename from src/packages/options/src/definition.ts rename to src/options/src/definition.ts diff --git a/src/packages/options/src/exclusive.ts b/src/options/src/exclusive.ts similarity index 100% rename from src/packages/options/src/exclusive.ts rename to src/options/src/exclusive.ts diff --git a/src/packages/options/src/getters.ts b/src/options/src/getters.ts similarity index 100% rename from src/packages/options/src/getters.ts rename to src/options/src/getters.ts diff --git a/src/packages/options/src/types.ts b/src/options/src/types.ts similarity index 100% rename from src/packages/options/src/types.ts rename to src/options/src/types.ts diff --git a/src/packages/options/tests/index.test.ts b/src/options/tests/index.test.ts similarity index 100% rename from src/packages/options/tests/index.test.ts rename to src/options/tests/index.test.ts diff --git a/src/packages/options/tsconfig.json b/src/options/tsconfig.json similarity index 100% rename from src/packages/options/tsconfig.json rename to src/options/tsconfig.json diff --git a/src/packages/utils/.npmignore b/src/packages/utils/.npmignore deleted file mode 100644 index 5b2809adda..0000000000 --- a/src/packages/utils/.npmignore +++ /dev/null @@ -1,8 +0,0 @@ -./index.ts -tests -.nyc_output -coverage -scripts -/src -tsconfig.json -typedoc.json diff --git a/src/packages/utils/LICENSE b/src/packages/utils/LICENSE deleted file mode 100644 index 729225d4c4..0000000000 --- a/src/packages/utils/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Iuri Matias -Copyright (c) 2022 ConsenSys Software Inc - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/src/packages/options/.npmignore b/src/promise-queue/.npmignore similarity index 100% rename from src/packages/options/.npmignore rename to src/promise-queue/.npmignore diff --git a/src/packages/options/LICENSE b/src/promise-queue/LICENSE similarity index 100% rename from src/packages/options/LICENSE rename to src/promise-queue/LICENSE diff --git a/src/packages/promise-queue/README.md b/src/promise-queue/README.md similarity index 100% rename from src/packages/promise-queue/README.md rename to src/promise-queue/README.md diff --git a/src/packages/promise-queue/index.ts b/src/promise-queue/index.ts similarity index 100% rename from src/packages/promise-queue/index.ts rename to src/promise-queue/index.ts diff --git a/src/packages/promise-queue/package-lock.json b/src/promise-queue/package-lock.json similarity index 100% rename from src/packages/promise-queue/package-lock.json rename to src/promise-queue/package-lock.json diff --git a/src/packages/promise-queue/package.json b/src/promise-queue/package.json similarity index 100% rename from src/packages/promise-queue/package.json rename to src/promise-queue/package.json diff --git a/src/packages/promise-queue/src/entry.ts b/src/promise-queue/src/entry.ts similarity index 100% rename from src/packages/promise-queue/src/entry.ts rename to src/promise-queue/src/entry.ts diff --git a/src/packages/promise-queue/tests/index.test.ts b/src/promise-queue/tests/index.test.ts similarity index 100% rename from src/packages/promise-queue/tests/index.test.ts rename to src/promise-queue/tests/index.test.ts diff --git a/src/packages/promise-queue/tsconfig.json b/src/promise-queue/tsconfig.json similarity index 100% rename from src/packages/promise-queue/tsconfig.json rename to src/promise-queue/tsconfig.json diff --git a/src/packages/promise-queue/.npmignore b/src/rlp/.npmignore similarity index 100% rename from src/packages/promise-queue/.npmignore rename to src/rlp/.npmignore diff --git a/src/packages/promise-queue/LICENSE b/src/rlp/LICENSE similarity index 100% rename from src/packages/promise-queue/LICENSE rename to src/rlp/LICENSE diff --git a/src/packages/rlp/README.md b/src/rlp/README.md similarity index 100% rename from src/packages/rlp/README.md rename to src/rlp/README.md diff --git a/src/packages/rlp/index.ts b/src/rlp/index.ts similarity index 100% rename from src/packages/rlp/index.ts rename to src/rlp/index.ts diff --git a/src/packages/rlp/package-lock.json b/src/rlp/package-lock.json similarity index 100% rename from src/packages/rlp/package-lock.json rename to src/rlp/package-lock.json diff --git a/src/packages/rlp/package.json b/src/rlp/package.json similarity index 100% rename from src/packages/rlp/package.json rename to src/rlp/package.json diff --git a/src/packages/rlp/tests/dataTypes.test.ts b/src/rlp/tests/dataTypes.test.ts similarity index 100% rename from src/packages/rlp/tests/dataTypes.test.ts rename to src/rlp/tests/dataTypes.test.ts diff --git a/src/packages/rlp/tests/fixture/rlptest.json b/src/rlp/tests/fixture/rlptest.json similarity index 100% rename from src/packages/rlp/tests/fixture/rlptest.json rename to src/rlp/tests/fixture/rlptest.json diff --git a/src/packages/rlp/tests/official.test.ts b/src/rlp/tests/official.test.ts similarity index 100% rename from src/packages/rlp/tests/official.test.ts rename to src/rlp/tests/official.test.ts diff --git a/src/packages/rlp/tests/partial.test.ts b/src/rlp/tests/partial.test.ts similarity index 100% rename from src/packages/rlp/tests/partial.test.ts rename to src/rlp/tests/partial.test.ts diff --git a/src/packages/rlp/tsconfig.json b/src/rlp/tsconfig.json similarity index 100% rename from src/packages/rlp/tsconfig.json rename to src/rlp/tsconfig.json diff --git a/src/packages/rlp/types.ts b/src/rlp/types.ts similarity index 100% rename from src/packages/rlp/types.ts rename to src/rlp/types.ts diff --git a/src/packages/secp256k1/.npmignore b/src/secp256k1/.npmignore similarity index 100% rename from src/packages/secp256k1/.npmignore rename to src/secp256k1/.npmignore diff --git a/src/packages/rlp/LICENSE b/src/secp256k1/LICENSE similarity index 100% rename from src/packages/rlp/LICENSE rename to src/secp256k1/LICENSE diff --git a/src/packages/secp256k1/README.md b/src/secp256k1/README.md similarity index 100% rename from src/packages/secp256k1/README.md rename to src/secp256k1/README.md diff --git a/src/packages/secp256k1/index.ts b/src/secp256k1/index.ts similarity index 100% rename from src/packages/secp256k1/index.ts rename to src/secp256k1/index.ts diff --git a/src/packages/secp256k1/package-lock.json b/src/secp256k1/package-lock.json similarity index 100% rename from src/packages/secp256k1/package-lock.json rename to src/secp256k1/package-lock.json diff --git a/src/packages/secp256k1/package.json b/src/secp256k1/package.json similarity index 100% rename from src/packages/secp256k1/package.json rename to src/secp256k1/package.json diff --git a/src/packages/secp256k1/tests/index.test.ts b/src/secp256k1/tests/index.test.ts similarity index 100% rename from src/packages/secp256k1/tests/index.test.ts rename to src/secp256k1/tests/index.test.ts diff --git a/src/packages/secp256k1/tsconfig.json b/src/secp256k1/tsconfig.json similarity index 100% rename from src/packages/secp256k1/tsconfig.json rename to src/secp256k1/tsconfig.json diff --git a/src/packages/rlp/.npmignore b/src/utils/.npmignore similarity index 100% rename from src/packages/rlp/.npmignore rename to src/utils/.npmignore diff --git a/src/packages/secp256k1/LICENSE b/src/utils/LICENSE similarity index 100% rename from src/packages/secp256k1/LICENSE rename to src/utils/LICENSE diff --git a/src/packages/utils/README.md b/src/utils/README.md similarity index 100% rename from src/packages/utils/README.md rename to src/utils/README.md diff --git a/src/packages/utils/index.ts b/src/utils/index.ts similarity index 100% rename from src/packages/utils/index.ts rename to src/utils/index.ts diff --git a/src/packages/utils/package-lock.json b/src/utils/package-lock.json similarity index 100% rename from src/packages/utils/package-lock.json rename to src/utils/package-lock.json diff --git a/src/packages/utils/package.json b/src/utils/package.json similarity index 100% rename from src/packages/utils/package.json rename to src/utils/package.json diff --git a/src/packages/utils/src/common.ts b/src/utils/src/common.ts similarity index 100% rename from src/packages/utils/src/common.ts rename to src/utils/src/common.ts diff --git a/src/packages/utils/src/things/json-rpc/index.ts b/src/utils/src/things/json-rpc/index.ts similarity index 100% rename from src/packages/utils/src/things/json-rpc/index.ts rename to src/utils/src/things/json-rpc/index.ts diff --git a/src/packages/utils/src/things/json-rpc/input-parsers.ts b/src/utils/src/things/json-rpc/input-parsers.ts similarity index 100% rename from src/packages/utils/src/things/json-rpc/input-parsers.ts rename to src/utils/src/things/json-rpc/input-parsers.ts diff --git a/src/packages/utils/src/things/json-rpc/json-rpc-base-types.ts b/src/utils/src/things/json-rpc/json-rpc-base-types.ts similarity index 100% rename from src/packages/utils/src/things/json-rpc/json-rpc-base-types.ts rename to src/utils/src/things/json-rpc/json-rpc-base-types.ts diff --git a/src/packages/utils/src/things/json-rpc/json-rpc-data.ts b/src/utils/src/things/json-rpc/json-rpc-data.ts similarity index 100% rename from src/packages/utils/src/things/json-rpc/json-rpc-data.ts rename to src/utils/src/things/json-rpc/json-rpc-data.ts diff --git a/src/packages/utils/src/things/json-rpc/json-rpc-quantity.ts b/src/utils/src/things/json-rpc/json-rpc-quantity.ts similarity index 100% rename from src/packages/utils/src/things/json-rpc/json-rpc-quantity.ts rename to src/utils/src/things/json-rpc/json-rpc-quantity.ts diff --git a/src/packages/utils/src/things/jsonrpc.ts b/src/utils/src/things/jsonrpc.ts similarity index 100% rename from src/packages/utils/src/things/jsonrpc.ts rename to src/utils/src/things/jsonrpc.ts diff --git a/src/packages/utils/src/things/promievent.ts b/src/utils/src/things/promievent.ts similarity index 100% rename from src/packages/utils/src/things/promievent.ts rename to src/utils/src/things/promievent.ts diff --git a/src/packages/utils/src/things/subscription.ts b/src/utils/src/things/subscription.ts similarity index 100% rename from src/packages/utils/src/things/subscription.ts rename to src/utils/src/things/subscription.ts diff --git a/src/packages/utils/src/types/api.ts b/src/utils/src/types/api.ts similarity index 100% rename from src/packages/utils/src/types/api.ts rename to src/utils/src/types/api.ts diff --git a/src/packages/utils/src/types/index.ts b/src/utils/src/types/index.ts similarity index 100% rename from src/packages/utils/src/types/index.ts rename to src/utils/src/types/index.ts diff --git a/src/packages/utils/src/utils/bigint-to-buffer.ts b/src/utils/src/utils/bigint-to-buffer.ts similarity index 100% rename from src/packages/utils/src/utils/bigint-to-buffer.ts rename to src/utils/src/utils/bigint-to-buffer.ts diff --git a/src/packages/utils/src/utils/buffer-to-bigint.ts b/src/utils/src/utils/buffer-to-bigint.ts similarity index 100% rename from src/packages/utils/src/utils/buffer-to-bigint.ts rename to src/utils/src/utils/buffer-to-bigint.ts diff --git a/src/packages/utils/src/utils/buffer-to-key.ts b/src/utils/src/utils/buffer-to-key.ts similarity index 100% rename from src/packages/utils/src/utils/buffer-to-key.ts rename to src/utils/src/utils/buffer-to-key.ts diff --git a/src/packages/utils/src/utils/constants.ts b/src/utils/src/utils/constants.ts similarity index 100% rename from src/packages/utils/src/utils/constants.ts rename to src/utils/src/utils/constants.ts diff --git a/src/packages/utils/src/utils/executor.ts b/src/utils/src/utils/executor.ts similarity index 100% rename from src/packages/utils/src/utils/executor.ts rename to src/utils/src/utils/executor.ts diff --git a/src/packages/utils/src/utils/find-insert-position.ts b/src/utils/src/utils/find-insert-position.ts similarity index 100% rename from src/packages/utils/src/utils/find-insert-position.ts rename to src/utils/src/utils/find-insert-position.ts diff --git a/src/packages/utils/src/utils/has-own.ts b/src/utils/src/utils/has-own.ts similarity index 100% rename from src/packages/utils/src/utils/has-own.ts rename to src/utils/src/utils/has-own.ts diff --git a/src/packages/utils/src/utils/heap.ts b/src/utils/src/utils/heap.ts similarity index 100% rename from src/packages/utils/src/utils/heap.ts rename to src/utils/src/utils/heap.ts diff --git a/src/packages/utils/src/utils/index.ts b/src/utils/src/utils/index.ts similarity index 100% rename from src/packages/utils/src/utils/index.ts rename to src/utils/src/utils/index.ts diff --git a/src/packages/utils/src/utils/keccak.ts b/src/utils/src/utils/keccak.ts similarity index 100% rename from src/packages/utils/src/utils/keccak.ts rename to src/utils/src/utils/keccak.ts diff --git a/src/packages/utils/src/utils/min-max.ts b/src/utils/src/utils/min-max.ts similarity index 100% rename from src/packages/utils/src/utils/min-max.ts rename to src/utils/src/utils/min-max.ts diff --git a/src/packages/utils/src/utils/random-number-generator.ts b/src/utils/src/utils/random-number-generator.ts similarity index 100% rename from src/packages/utils/src/utils/random-number-generator.ts rename to src/utils/src/utils/random-number-generator.ts diff --git a/src/packages/utils/src/utils/request-coordinator.ts b/src/utils/src/utils/request-coordinator.ts similarity index 100% rename from src/packages/utils/src/utils/request-coordinator.ts rename to src/utils/src/utils/request-coordinator.ts diff --git a/src/packages/utils/src/utils/signature.ts b/src/utils/src/utils/signature.ts similarity index 100% rename from src/packages/utils/src/utils/signature.ts rename to src/utils/src/utils/signature.ts diff --git a/src/packages/utils/src/utils/uint-to-buffer.ts b/src/utils/src/utils/uint-to-buffer.ts similarity index 100% rename from src/packages/utils/src/utils/uint-to-buffer.ts rename to src/utils/src/utils/uint-to-buffer.ts diff --git a/src/packages/utils/src/utils/unref.ts b/src/utils/src/utils/unref.ts similarity index 100% rename from src/packages/utils/src/utils/unref.ts rename to src/utils/src/utils/unref.ts diff --git a/src/packages/utils/tests/input-parsers.test.ts b/src/utils/tests/input-parsers.test.ts similarity index 100% rename from src/packages/utils/tests/input-parsers.test.ts rename to src/utils/tests/input-parsers.test.ts diff --git a/src/packages/utils/tests/json-rpc-data.test.ts b/src/utils/tests/json-rpc-data.test.ts similarity index 100% rename from src/packages/utils/tests/json-rpc-data.test.ts rename to src/utils/tests/json-rpc-data.test.ts diff --git a/src/packages/utils/tests/json-rpc-quantity.test.ts b/src/utils/tests/json-rpc-quantity.test.ts similarity index 100% rename from src/packages/utils/tests/json-rpc-quantity.test.ts rename to src/utils/tests/json-rpc-quantity.test.ts diff --git a/src/packages/utils/tests/request-coordinator.test.ts b/src/utils/tests/request-coordinator.test.ts similarity index 100% rename from src/packages/utils/tests/request-coordinator.test.ts rename to src/utils/tests/request-coordinator.test.ts diff --git a/src/packages/utils/tests/utils.test.ts b/src/utils/tests/utils.test.ts similarity index 100% rename from src/packages/utils/tests/utils.test.ts rename to src/utils/tests/utils.test.ts diff --git a/src/packages/utils/tsconfig.json b/src/utils/tsconfig.json similarity index 100% rename from src/packages/utils/tsconfig.json rename to src/utils/tsconfig.json