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 35cc521cfe..0000000000 --- a/src/chains/filecoin/filecoin/package-lock.json +++ /dev/null @@ -1,10859 +0,0 @@ -{ - "name": "@ganache/filecoin", - "version": "0.9.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==" - } - } - }, - "@trufflesuite/uws-js-unofficial": { - "version": "20.10.0-unofficial.2", - "resolved": "https://registry.npmjs.org/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.10.0-unofficial.2.tgz", - "integrity": "sha512-oQQlnS3oNeGsgS4K3KCSSavJgSb0W9D5ktZs4FacX9VbM7b+NlhjH96d6/G4fMrz+bc5MXRyco419on0X0dvRA==", - "dev": true, - "requires": { - "bufferutil": "4.0.5", - "utf-8-validate": "5.0.7", - "ws": "8.2.3" - } - }, - "@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 - }, - "bufferutil": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "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" - } - }, - "utf-8-validate": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "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 b78bda2450..0000000000 --- a/src/chains/filecoin/filecoin/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "name": "@ganache/filecoin", - "publishConfig": { - "access": "public" - }, - "version": "0.9.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.9.0", - "@ganache/flavor": "0.10.0", - "@ganache/utils": "0.9.0", - "@trufflesuite/uws-js-unofficial": "20.10.0-unofficial.2", - "@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/.npmignore b/src/chains/filecoin/options/.npmignore deleted file mode 100644 index 5b2809adda..0000000000 --- a/src/chains/filecoin/options/.npmignore +++ /dev/null @@ -1,8 +0,0 @@ -./index.ts -tests -.nyc_output -coverage -scripts -/src -tsconfig.json -typedoc.json diff --git a/src/chains/filecoin/options/LICENSE b/src/chains/filecoin/options/LICENSE deleted file mode 100644 index 729225d4c4..0000000000 --- a/src/chains/filecoin/options/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/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 5b589b3991..0000000000 --- a/src/chains/filecoin/options/package-lock.json +++ /dev/null @@ -1,2090 +0,0 @@ -{ - "name": "@ganache/filecoin-options", - "version": "0.9.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" - } - }, - "@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@sinonjs/samsam": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.3.tgz", - "integrity": "sha512-nhOb2dWPeb1sd3IQXL/dVPnKHDOAFfvichtBf4xV00/rU1QbPCQqKMbvIheIjqwVjh7qIgf2AHTHi391yMOMpQ==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.6.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" - } - }, - "@sinonjs/text-encoding": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", - "dev": true - }, - "@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/sinon": { - "version": "10.0.13", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", - "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", - "dev": true, - "requires": { - "@types/sinonjs__fake-timers": "*" - } - }, - "@types/sinonjs__fake-timers": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", - "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", - "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 - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "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" - } - }, - "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==", - "dev": true - }, - "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" - } - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true - }, - "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 - }, - "nise": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz", - "integrity": "sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^2.0.0", - "@sinonjs/fake-timers": "^10.0.2", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" - }, - "dependencies": { - "@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^3.0.0" - }, - "dependencies": { - "@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - } - } - } - } - }, - "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 - }, - "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==", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - }, - "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 - }, - "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" - } - }, - "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 - }, - "sinon": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-12.0.1.tgz", - "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.8.3", - "@sinonjs/fake-timers": "^8.1.0", - "@sinonjs/samsam": "^6.0.2", - "diff": "^5.0.0", - "nise": "^5.1.0", - "supports-color": "^7.2.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" - } - } - } - }, - "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 - } - } - } - } - }, - "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-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 - } - } - }, - "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==", - "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 2e9da9b355..0000000000 --- a/src/chains/filecoin/options/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "@ganache/filecoin-options", - "publishConfig": { - "access": "public" - }, - "version": "0.9.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.9.0", - "@ganache/utils": "0.9.0", - "@types/mocha": "9.0.0", - "@types/seedrandom": "3.0.1", - "@types/sinon": "10.0.13", - "@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", - "sinon": "12.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" - }, - "dependencies": { - "@ganache/flavor": "0.10.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 712e0706cd..0000000000 --- a/src/chains/filecoin/options/src/logging-options.ts +++ /dev/null @@ -1,78 +0,0 @@ -import type { Definitions } from "@ganache/flavor"; -import { openSync, PathLike } from "fs"; -import { Logger, InternalLogger, createLogger } from "@ganache/utils"; -import { EOL } from "os"; - -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: { - rawType: Logger; - type: InternalLogger; - hasDefault: true; - }; - - /** - * The file to append logs to. - * - * Can be a filename, or an instance of URL. - * note: the URL scheme must be `file`, e.g., `file://path/to/file.log`. - * - * By default no log file is created. - */ - readonly file: { - type: number; - rawType: PathLike; - }; - }; -}; - -export const LoggingOptions: Definitions = { - file: { - normalize: (raw: PathLike): number => { - let descriptor: number; - try { - descriptor = openSync(raw, "a"); - } catch (err) { - const details = (err as Error).message; - throw new Error( - `Failed to open log file ${raw}. Please check if the file path is valid and if the process has write permissions to the directory.${EOL}${details}` - ); - } - return descriptor; - }, - - cliDescription: "The file to append logs to.", - cliType: "string" - }, - logger: { - normalize: (logger: Logger, config) => { - return createLogger({ - file: (config as any).file, - baseLogger: logger - }); - }, - cliDescription: - "An object, like `console`, that implements a `log` function.", - disableInCLI: true, - default: config => { - return createLogger({ - file: config.file, - baseLogger: console - }); - } - } -}; 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 05ac34f29a..0000000000 --- a/src/chains/filecoin/options/tsconfig.json +++ /dev/null @@ -1,28 +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" - }, - { - "name": "@ganache/utils", - "path": "../../../packages/utils" - } - ] -} 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/tsconfig.json b/src/tsconfig.json index afefae6da2..915cb0c9bc 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -3,9 +3,6 @@ "references": [ { "path": "packages/ganache" - }, - { - "path": "chains/filecoin/filecoin" } ] } \ No newline at end of file