From 753a22bfaa1f35b6c05a78374a446e92238ba7b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Jakub=20Nani=C5=A1ta?= Date: Thu, 9 Nov 2023 17:02:28 -0800 Subject: [PATCH] chore: Setup monorepo (#1) --- .eslintignore | 3 + .eslintrc.json | 33 + .github/workflows/publish-packages.yaml | 78 + .github/workflows/vape-test.yml | 54 + .gitignore | 98 +- .husky/pre-commit | 4 + .npmrc | 1 + .nvmrc | 1 + .prettierignore | 6 + .prettierrc.js | 7 + README.md | 273 +- package.json | 81 +- packages/ua-utils/.eslintignore | 3 + packages/ua-utils/.eslintrc.json | 3 + LICENSE => packages/ua-utils/LICENSE | 0 packages/ua-utils/README.md | 286 ++ packages/ua-utils/package.json | 54 + packages/ua-utils/src/checkWireAllConfig.ts | 196 ++ packages/ua-utils/src/constants/abi.ts | 31 + .../ua-utils/src}/constants/endpoints.ts | 6 +- packages/ua-utils/src/constants/node-url.json | 68 + packages/ua-utils/src/getConfig.ts | 49 + packages/ua-utils/src/getDefaultConfig.ts | 34 + packages/ua-utils/src/index.ts | 63 + packages/ua-utils/src/setConfig.ts | 325 ++ .../ua-utils/src/utils/crossChainHelper.ts | 364 +++ packages/ua-utils/src/utils/helpers.ts | 81 + packages/ua-utils/src/utils/wireAllHelpers.ts | 124 + packages/ua-utils/src/wireAll.ts | 177 ++ packages/ua-utils/tsconfig.json | 7 + packages/ua-utils/tsup.config.ts | 12 + src/checkWireAllConfig.ts | 157 - src/constants/abi.ts | 31 - src/constants/node-url.json | 68 - src/getConfig.ts | 49 - src/getDefaultConfig.ts | 34 - src/index.ts | 40 - src/setConfig.ts | 236 -- src/utils/crossChainHelper.ts | 355 --- src/utils/helpers.ts | 73 - src/utils/wireAllHelpers.ts | 107 - src/wireAll.ts | 146 - tsconfig.json | 52 +- tsup.config.ts | 12 - turbo.json | 25 + yarn.lock | 2723 ++++++++++++++++- 46 files changed, 4818 insertions(+), 1812 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 .github/workflows/publish-packages.yaml create mode 100644 .github/workflows/vape-test.yml create mode 100755 .husky/pre-commit create mode 100644 .npmrc create mode 100644 .nvmrc create mode 100644 .prettierignore create mode 100644 .prettierrc.js create mode 100644 packages/ua-utils/.eslintignore create mode 100644 packages/ua-utils/.eslintrc.json rename LICENSE => packages/ua-utils/LICENSE (100%) create mode 100644 packages/ua-utils/README.md create mode 100644 packages/ua-utils/package.json create mode 100644 packages/ua-utils/src/checkWireAllConfig.ts create mode 100644 packages/ua-utils/src/constants/abi.ts rename {src => packages/ua-utils/src}/constants/endpoints.ts (98%) create mode 100644 packages/ua-utils/src/constants/node-url.json create mode 100644 packages/ua-utils/src/getConfig.ts create mode 100644 packages/ua-utils/src/getDefaultConfig.ts create mode 100644 packages/ua-utils/src/index.ts create mode 100644 packages/ua-utils/src/setConfig.ts create mode 100644 packages/ua-utils/src/utils/crossChainHelper.ts create mode 100644 packages/ua-utils/src/utils/helpers.ts create mode 100644 packages/ua-utils/src/utils/wireAllHelpers.ts create mode 100644 packages/ua-utils/src/wireAll.ts create mode 100644 packages/ua-utils/tsconfig.json create mode 100644 packages/ua-utils/tsup.config.ts delete mode 100644 src/checkWireAllConfig.ts delete mode 100644 src/constants/abi.ts delete mode 100644 src/constants/node-url.json delete mode 100644 src/getConfig.ts delete mode 100644 src/getDefaultConfig.ts delete mode 100644 src/index.ts delete mode 100644 src/setConfig.ts delete mode 100644 src/utils/crossChainHelper.ts delete mode 100644 src/utils/helpers.ts delete mode 100644 src/utils/wireAllHelpers.ts delete mode 100644 src/wireAll.ts delete mode 100644 tsup.config.ts create mode 100644 turbo.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..44de66f72 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +.turbo +dist +node_modules diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..dc7a57b89 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "root": true, + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "mocha": true, + "node": true + }, + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint", "mocha", "prettier"], + "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier"], + "parserOptions": { + "ecmaVersion": 8 + }, + "ignorePatterns": ["node_modules/", "dist/", ".turbo/"], + "rules": { + "mocha/no-skipped-tests": "error", + "mocha/no-exclusive-tests": "error", + "prettier/prettier": "error", + + // Intermediate deescalation to warnings + // + // FIXME Slowly remove these problems, then remove these overrides + "no-undef": "warn", + "no-constant-condition": "warn", + + "no-unused-vars": "warn", + "@typescript-eslint/no-unused-vars": "warn", + "@typescript-eslint/no-explicit-any": "warn", + "@typescript-eslint/no-var-requires": "warn" + } +} diff --git a/.github/workflows/publish-packages.yaml b/.github/workflows/publish-packages.yaml new file mode 100644 index 000000000..7ec3bdb08 --- /dev/null +++ b/.github/workflows/publish-packages.yaml @@ -0,0 +1,78 @@ +name: Publish packages + +on: + push: + branches: + - main + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +jobs: + publish: + name: Publish + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version-file: ".nvmrc" + cache: "yarn" + + # Install the dependencies without running the post-install scripts + - name: Install Dependencies + run: yarn install --frozen-lockfile --prefer-offline --ignore-scripts + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + # Run the post-install scripts + - name: Build Dependencies + run: yarn install --frozen-lockfile --offline + + # Cache build artifacts from turbo + # + # This step will speed up workflow runs that don't touch the whole codebase + # (or the ones that don't touch the codebase at all) + - name: Cache turbo build setup + uses: actions/cache@v3 + with: + path: node_modules/.cache/turbo + key: ${{ runner.os }}-turbo-${{ github.ref_name }} + restore-keys: | + ${{ runner.os }}-turbo- + + - name: Lint + run: yarn lint + + - name: Build + run: yarn build + + - name: Test + run: yarn test + + # This step uses the changesets CLI to bump the package versions and/or publish the unpublished packages + # + # How this works is: + # + # - If there are any changesets (markdown files in the .changeset directory), + # changesets CLI will bump the package versions according to the bumps specified in the markdown files. + # + # - A PR is created containing these version bumps and with the changeset markdowns deleted + # + # - Once this PR is merged, this workflow kicks in again and this time checks + # whether there is anything that needs to be published + - name: Publish packages / create version bump PRs + uses: changesets/action@v1 + with: + version: yarn changeset version + publish: yarn changeset publish + + env: + # This is here because changesets/action will look for the .npmrc + # in HOME folder and if it doesn't fine one there it will create one + # + # Since we want to make sure it uses our .npmrc we'll just point it + # to our workspace root + HOME: ${{ github.workspace }} + GITHUB_TOKEN: ${{ secrets.LAYERZERO_BOT_GITHUB_TOKEN }} diff --git a/.github/workflows/vape-test.yml b/.github/workflows/vape-test.yml new file mode 100644 index 000000000..789382ea8 --- /dev/null +++ b/.github/workflows/vape-test.yml @@ -0,0 +1,54 @@ +name: Vape Tests + +on: + push: + # We have package publishing workflow running on main so this one is redundant + branches-ignore: + - "main" + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build-and-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version-file: ".nvmrc" + cache: "yarn" + + # Install the dependencies without running the post-install scripts + - name: Install Dependencies + run: yarn install --frozen-lockfile --prefer-offline --ignore-scripts + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + # Run the post-install scripts + - name: Build Dependencies + run: yarn install --frozen-lockfile --offline + + # Cache build artifacts from turbo + # + # This step will speed up workflow runs that don't touch the whole codebase + # (or the ones that don't touch the codebase at all) + - name: Cache turbo build setup + uses: actions/cache@v3 + with: + path: node_modules/.cache/turbo + key: ${{ runner.os }}-turbo-${{ github.ref_name }} + restore-keys: | + ${{ runner.os }}-turbo- + + - name: Lint + run: yarn lint + + - name: Build + run: yarn build + + - name: Test + run: yarn test diff --git a/.gitignore b/.gitignore index 887804ba3..db41f82d8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,108 +1,24 @@ # Logs logs *.log -npm-debug.log* yarn-debug.log* yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release # Dependency directories node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ # TypeScript cache *.tsbuildinfo -# Optional npm cache directory -.npm +# Turbo cache +.turbo # Optional eslint cache .eslintcache -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and *not* Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - +# Editor and OS files .DS_Store -package-lock.json -.idea \ No newline at end of file +.idea + +# Build artifacts +dist \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 000000000..d24fdfc60 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx lint-staged diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..ae643592e --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +//registry.npmjs.org/:_authToken=${NPM_TOKEN} diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 000000000..67152705f --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v18.20.0 \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..46f112ba0 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +yarn.lock +*.log +.eslintignore +.prettierignore +.netrc +*ignore diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 000000000..89f4730ea --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,7 @@ +module.exports = { + printWidth: 145, + tabWidth: 4, + useTabs: false, + semi: false, + trailingComma: "es5", +} diff --git a/README.md b/README.md index 1b228eceb..986e9a69f 100644 --- a/README.md +++ b/README.md @@ -4,271 +4,28 @@

-

@layerzerolabs/ua-utils

+

LayerZero EVM Utilities

- -

- - NPM Version - - Downloads - - Snyk Vulnerabilities for repository - - NPM License -

+## Development -## Installation - -```sh -$ npm install @layerzerolabs/ua-utils -``` -The plugin depends on [`@nomiclabs/hardhat-ethers`](https://www.npmjs.com/package/@nomiclabs/hardhat-ethers), so you need to import both plugins in your `hardhat.config.js`: +```bash +yarn -```js -require("@nomiclabs/hardhat-ethers"); -require("@layerzerolabs/ua-utils"); -``` +yarn build -Or if you are using TypeScript, in your `hardhat.config.ts`: +yarn lint -```ts -import "@nomiclabs/hardhat-ethers"; -import "@layerzerolabs/ua-utils"; +yarn test ``` -Make sure that network names in your `hardhat.config.js` match the following [naming convention](https://github.com/LayerZero-Labs/sdk/blob/main/packages/lz-sdk/src/enums/ChainKey.ts). -## Tasks - -The package adds the following tasks: - - - `getDefaultConfig` returns the default configuration for the specified chains. - - Usage: - - ```sh - npx hardhat getDefaultConfig --networks ethereum,bsc,polygon,avalanche - ``` - - `getConfig` returns the configuration of the specified contract. - - Parameters: - - `address` - the contract address. An optional parameter. Either contract name or contract address must be specified. - - `name` - the contract name. An optional parameter. It must be specified only if the contract was deployed using [`hardhat-deploy`](https://www.npmjs.com/package/hardhat-deploy) and the deployments information is located in the deployments folder. - - `network` - the network the contract is deployed to. - - `remote-networks` - a comma separated list of remote networks the contract is configured with. - - Usage: - - ```sh - npx hardhat getConfig --network ethereum --remote-networks bsc,polygon,avalanche --name OFT - ``` - - `setConfig` sets the configuration of the specified contract. - - Parameters: - - `config-path` - the relative path to a file containing the configuration. - - `address` - the address of the deployed contracts. An optional parameter. It should be provided if the contract address is the same on all chains. For contracts with different addresses, specify the address for each chain in the config. - - `name` - the name of the deployed contracts. An optional parameter. It should be provided only if the same contract deployed on all chains using [`hardhat-deploy`](https://www.npmjs.com/package/hardhat-deploy) and the deployment information is located in the deployments folder. For contracts with different names, specify the name for each chain in the config. - - `gnosis-config-path` - the relative path to a file containing the gnosis configuration. An optional parameter. If specified, the transactions will be sent to Gnosis. - - Usage: - - ```sh - npx hardhat setConfig --networks ethereum,bsc,avalanche --name OFT --config-path "./appConfig.json" --gnosis-config-path "./gnosisConfig.json" - ``` -
- - Below is an example of the application configuration - - ```json - { - "ethereum": { - "address": "", - "name": "ProxyOFT", - "sendVersion": 2, - "receiveVersion": 2, - "remoteConfigs": [ - { - "remoteChain": "bsc", - "inboundProofLibraryVersion": 1, - "inboundBlockConfirmations": 20, - "relayer": "0x902F09715B6303d4173037652FA7377e5b98089E", - "outboundProofType": 1, - "outboundBlockConfirmations": 15, - "oracle": "0x5a54fe5234E811466D5366846283323c954310B2" - }, - { - "remoteChain": "avalanche", - "inboundProofLibraryVersion": 1, - "inboundBlockConfirmations": 12, - "relayer": "0x902F09715B6303d4173037652FA7377e5b98089E", - "outboundProofType": 1, - "outboundBlockConfirmations": 15, - "oracle": "0x5a54fe5234E811466D5366846283323c954310B2" - } - ] - }, - "bsc": { - "address": "0x0702c7B1b18E5EBf022e17182b52F0AC262A8062", - "name": "", - "sendVersion": 2, - "receiveVersion": 2, - "remoteConfigs": [ - { - "remoteChain": "ethereum", - "inboundProofLibraryVersion": 1, - "inboundBlockConfirmations": 15, - "relayer": "0xA27A2cA24DD28Ce14Fb5f5844b59851F03DCf182", - "outboundProofType": 1, - "outboundBlockConfirmations": 20, - "oracle": "0x5a54fe5234E811466D5366846283323c954310B2" - } - ] - } - } - ``` - The top level elements represent chains the contracts are deployed to. The configuration section for each chain has the following fields: - - `address` - the contract address. An optional parameter. It should be provided if no address was specified in the task parameters. - - `name` - the contract name. An optional parameter. It should be provided only if the contract was deployed using [`hardhat-deploy`](https://www.npmjs.com/package/hardhat-deploy) and the deployment information is located in the deployments folder. - - `sendVersion` - the version of a messaging library contract used to send messages. If it isn't specified, the default version will be used. - - `receiveVersion` - the version of a messaging library contract used to receive messages. If it isn't specified, the default version will be used. - - `remoteConfigs` - an array of configuration settings for remote chains. - -
+## Troubleshooting - The configuration section for each chain has the following fields: +### Problems with committing - - `remoteChain` - the remote chain name. - - `inboundProofLibraryVersion` - the version of proof library for inbound messages. - - `inboundBlockConfirmations` - the number of block confirmations for inbound messages. - - `relayer` - the address of Relayer contract. - - `outboundProofType` - proof type used for outbound messages. - - `outboundBlockConfirmations` - the number of block confirmations for outbound messages. - - `oracle` - the address of the Oracle contract. - -
- - - `checkWireAllConfig` returns the current wired up configurations of the specified contract. - - Parameters: - - `e` - the environment ie: mainnet, testnet or sandbox. - - `u` - flag to show use custom adapter params. - - `t` - flag to show trusted remotes. - - `m` - flag to show min destination gas. - - `chains` - comma separated list of networks. - - `addresses` - comma separated list of contract addresses in same order as chains. An optional parameter, if no deployment folder is available and want to use contract addresses. - - `contract` - name of contract. An optional parameter. If all contract names are the same. - - `proxyContract` - name of proxy contract. An optional parameter. If one contract name is different. - - `proxyChain` - name of proxy chain. An optional parameter. If one chain has different contract name . - - Usage: - - ```sh - npx hardhat checkWireAllConfig --e testnet --u --t --m --chains ethereum-testnet,arbitrum-testnet --contract ExampleOFTV2 - - npx hardhat checkWireAllConfig --e testnet --u --t --m --chains ethereum-testnet,arbitrum-testnet,optimism-testnet --contract OFTV2 --proxy-contract ProxyOFTV2 --proxy-chain optimism-testnet - - npx hardhat checkWireAllConfig --e testnet --u --t --m --chains ethereum-testnet,arbitrum-testnet,optimism-testnet --addresses "0xD90E022dE858DfDFC3C0f66b0D9ACD12CA6eA3Ec,0x137d4e9C2431A3DCBa6e615E9438F2c558353a17,0x27631753FC88e7b45a46679B9Cd2e06378cB43dC" - ``` -
- - - `wireAll` sets the wire all configuration of the specified contract. - - Parameters: - - `e` - the environment ie: mainnet, testnet or sandbox. - - `noPrompt` - no prompt. An optional parameter defaults to false. - - `configPath` - config path. An optional parameter. Default: ./constants/wireUpConfig.json. - - `n` - send to gnosis. An optional parameter defaults to false. - - `gnosisConfigPath` - gnosis config path. An optional parameter. Default: ./constants/gnosisConfig.json. - - Usage: - - ```sh - npx hardhat --network ethereum-testnet wireAll --e testnet - ``` - - Below is an example of the wire all configuration - - ```json - { - "proxyContractConfig": { - "chain": "avalanche", - "name": "ProxyOFT" - }, - "contractConfig": { - "name": "OFT" - }, - "chainConfig": { - "avalanche": { - "defaultFeeBp": 2, - "useCustomAdapterParams": true, - "remoteNetworkConfig": { - "ethereum": { - "feeBpConfig": { - "feeBp": 5, - "enabled": true - }, - "minDstGasConfig": { - "packetType_0": 100000, - "packetType_1": 200000 - } - }, - "polygon": { - "minDstGasConfig": { - "packetType_0": 100000, - "packetType_1": 160000 - } - } - } - } - } - } - ``` - The `proxyContractConfig` is an optional setting, that defines the proxy chain and proxy contract name. - - `chain`: An optional string, defines the proxy chain. - - `name`: An optional string, defines the proxy contract name. - - `address`: A optional string, defines the contract address. Used when deployments folder are not available. Uses standard LzApp/Nonblocking/OFT/ONFT abi calls such as: - - `function setFeeBp(uint16, bool, uint16)` - - `function setDefaultFeeBp(uint16)` - - `function setMinDstGas(uint16, uint16, uint)` - - `function setUseCustomAdapterParams(bool)` - - `function setTrustedRemote(uint16, bytes)` - - - - The `contractConfig` is a conditionally required setting, that defines the contract name. - - `function setFeeBp(uint16, bool, uint16)` - - The `chainConfig`: is required and defines the chain settings (default fees, useCustomAdapterParams) and the remote chain configs (minDstGas config based of packetType, and custom feeBP per chain) - - `name`: A conditionally required string, defines the contract name. Used when contract names differ per chain. - - `address`: A conditionally required string, defines the contract address. Used when deployments folder are not available. Uses standard LzApp/Nonblocking/OFT/ONFT abi calls. - - `defaultFeeBp`: An optional number, defines the default fee bp for the chain. (Available in [OFTV2 w/ fee](https://github.com/LayerZero-Labs/solidity-examples/blob/ca7d4f1d482df5e17f8aaf1b34d0e4432020bc4e/contracts/token/oft/v2/fee/Fee.sol#L27).) - - `useCustomAdapterParams`: An optional bool that defaults to false. Uses default 200k destination gas on all cross chain messages. When false adapter parameters must be empty. When useCustomAdapterParams is true the minDstGasLookup must be set for each packet type and each chain. This requires whoever calls the send function to provide the adapter params with a destination gas >= amount set for that packet type and that destination chain. - - `remoteNetworkConfig` is a conditionally required setting, that defines the contract name. - - `minDstGasConfig`: is an optional object that defines the minDstGas required based off packetType. So for example when the UA on Avalanche sends [packet type 0](https://github.com/LayerZero-Labs/solidity-examples/blob/9134640fe5b618a047f365555e760c8736ebc162/contracts/token/oft/v2/OFTCoreV2.sol#L17) to Ethereum the minDstGas will be 100000. When the UA on Avalanche sends [packet type 1](https://github.com/LayerZero-Labs/solidity-examples/blob/9134640fe5b618a047f365555e760c8736ebc162/contracts/token/oft/v2/OFTCoreV2.sol#L18) to Polygon the minDstGas will be 160000. - - The `feeBpConfig` is an optional setting that defines custom feeBP per chain. (Note: setting custom fee per chain with enabled = TRUE, will triumph over defaultFeeBp.) - - `feeBp`: is an optional number, defines custom feeBP per chain. - - `enabled`: is an optional bool, defines if custom feeBP per chain is enabled - -
- More info and examples can be found here in the [Wire Up Configuration](https://layerzero.gitbook.io/docs/evm-guides/layerzero-tooling/wire-up-configuration) documentation. - -
- - Below is an example of the Gnosis configuration - - ```json - { - "ethereum": { - "safeAddress": "0xa36B7e7894aCfaa6c35A8A0EC630B71A6B8A6D22", - "url": "https://safe-transaction.mainnet.gnosis.io/" - }, - "bsc": { - "safeAddress": "0x4755D44c1C196dC524848200B0556A09084D1dFD", - "url": "https://safe-transaction.bsc.gnosis.io/" - }, - "avalanche": { - "safeAddress": "0x4FF2C33FD9042a76eaC920C037383E51659417Ee", - "url": "https://safe-transaction.avalanche.gnosis.io/" - } - } - ``` - For each chain you need to specify your Gnosis safe address and Gnosis Safe API url. You can find the list of supported chains and API urls in [Gnosis Safe documentation](https://docs.safe.global/learn/safe-core/safe-core-api/available-services). +If facing issues when commiting, make sure your `~/.huskyrc` file contains the following: +```bash +# This loads nvm.sh and sets the correct PATH before running hook +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +``` diff --git a/package.json b/package.json index c577c743d..8a656277d 100644 --- a/package.json +++ b/package.json @@ -1,47 +1,38 @@ { - "name": "@layerzerolabs/ua-utils", - "version": "0.0.15", - "repository": "https://github.com/LayerZero-Labs/ua-utils.git", - "license": "MIT", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "module": "dist/index.mjs", - "scripts": { - "build": "npx tsup", - "prebuild": "tsc -noEmit" - }, - "files": [ - "dist/", - "LICENSE" - ], - "devDependencies": { - "@gnosis.pm/safe-core-sdk": "^2.0.0", - "@gnosis.pm/safe-core-sdk-types": "^1.0.0", - "@gnosis.pm/safe-ethers-lib": "^1.0.0", - "@gnosis.pm/safe-service-client": "1.1.1", - "@nomiclabs/hardhat-ethers": "^2.2.3", - "dotenv": "^16.0.3", - "ethers": "^5.5.2", - "hardhat": "2.12.5", - "hardhat-deploy": "^0.11.22", - "ts-node": "^10.9.1", - "tsup": "^7.2.0", - "typescript": "^4.9.4" - }, - "dependencies": { - "@layerzerolabs/lz-definitions": "latest", - "@layerzerolabs/lz-sdk": "0.0.12", - "chalk": "4.1.2", - "cli-ux": "^6.0.9" - }, - "peerDependencies": { - "@gnosis.pm/safe-core-sdk": "^2.0.0", - "@gnosis.pm/safe-core-sdk-types": "^1.0.0", - "@gnosis.pm/safe-ethers-lib": "^1.0.0", - "@gnosis.pm/safe-service-client": "1.1.1", - "@nomiclabs/hardhat-ethers": "^2.2.3", - "ethers": "^5.5.2", - "hardhat": "2.12.5", - "hardhat-deploy": "^0.11.22" - } + "name": "@layerzerolabs/lz-utils", + "version": "0.0.1", + "private": true, + "scripts": { + "clean": "npx turbo run clean", + "build": "npx turbo run build", + "lint": "npx turbo run lint", + "test": "npx turbo run test", + "prepare": "husky install" + }, + "workspaces": [ + "packages/*" + ], + "devDependencies": { + "@changesets/cli": "^2.26.2", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", + "@types/node": "~18.18.9", + "eslint": "^8.53.0", + "eslint-config-prettier": "^9.0.0", + "eslint-config-standard": "^17.1.0", + "eslint-plugin-import": "^2.24.2", + "eslint-plugin-mocha": "10.2.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^5.0.1", + "eslint-plugin-promise": "^6.1.1", + "husky": "^8.0.3", + "lint-staged": "^15.0.1", + "prettier": "^3.0.3", + "prettier-plugin-solidity": "^1.0.0-beta.18", + "ts-node": "^10.9.1", + "turbo": "1.5.6" + }, + "lint-staged": { + "**/*": "npx prettier --write --ignore-unknown" + } } diff --git a/packages/ua-utils/.eslintignore b/packages/ua-utils/.eslintignore new file mode 100644 index 000000000..0f295f243 --- /dev/null +++ b/packages/ua-utils/.eslintignore @@ -0,0 +1,3 @@ +.turbo +dist +node_modules \ No newline at end of file diff --git a/packages/ua-utils/.eslintrc.json b/packages/ua-utils/.eslintrc.json new file mode 100644 index 000000000..5aa34cd97 --- /dev/null +++ b/packages/ua-utils/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "../../.eslintrc.json" +} diff --git a/LICENSE b/packages/ua-utils/LICENSE similarity index 100% rename from LICENSE rename to packages/ua-utils/LICENSE diff --git a/packages/ua-utils/README.md b/packages/ua-utils/README.md new file mode 100644 index 000000000..f05651554 --- /dev/null +++ b/packages/ua-utils/README.md @@ -0,0 +1,286 @@ +

+ + LayerZero + +

+ +

@layerzerolabs/ua-utils

+ + +

+ + NPM Version + + Downloads + + Snyk Vulnerabilities for repository + + NPM License +

+ +## Installation + +```sh +$ npm install @layerzerolabs/ua-utils +``` + +The plugin depends on [`@nomiclabs/hardhat-ethers`](https://www.npmjs.com/package/@nomiclabs/hardhat-ethers), so you need to import both plugins in your `hardhat.config.js`: + +```js +require("@nomiclabs/hardhat-ethers") +require("@layerzerolabs/ua-utils") +``` + +Or if you are using TypeScript, in your `hardhat.config.ts`: + +```ts +import "@nomiclabs/hardhat-ethers" +import "@layerzerolabs/ua-utils" +``` + +Make sure that network names in your `hardhat.config.js` match the following [naming convention](https://github.com/LayerZero-Labs/sdk/blob/main/packages/lz-sdk/src/enums/ChainKey.ts). + +## Tasks + +The package adds the following tasks: + +- `getDefaultConfig` returns the default configuration for the specified chains. + + Usage: + + ```sh + npx hardhat getDefaultConfig --networks ethereum,bsc,polygon,avalanche + ``` + +- `getConfig` returns the configuration of the specified contract. + + Parameters: + + - `address` - the contract address. An optional parameter. Either contract name or contract address must be specified. + - `name` - the contract name. An optional parameter. It must be specified only if the contract was deployed using [`hardhat-deploy`](https://www.npmjs.com/package/hardhat-deploy) and the deployments information is located in the deployments folder. + - `network` - the network the contract is deployed to. + - `remote-networks` - a comma separated list of remote networks the contract is configured with. + + Usage: + + ```sh + npx hardhat getConfig --network ethereum --remote-networks bsc,polygon,avalanche --name OFT + ``` + +- `setConfig` sets the configuration of the specified contract. + + Parameters: + + - `config-path` - the relative path to a file containing the configuration. + - `address` - the address of the deployed contracts. An optional parameter. It should be provided if the contract address is the same on all chains. For contracts with different addresses, specify the address for each chain in the config. + - `name` - the name of the deployed contracts. An optional parameter. It should be provided only if the same contract deployed on all chains using [`hardhat-deploy`](https://www.npmjs.com/package/hardhat-deploy) and the deployment information is located in the deployments folder. For contracts with different names, specify the name for each chain in the config. + - `gnosis-config-path` - the relative path to a file containing the gnosis configuration. An optional parameter. If specified, the transactions will be sent to Gnosis. + + Usage: + + ```sh + npx hardhat setConfig --networks ethereum,bsc,avalanche --name OFT --config-path "./appConfig.json" --gnosis-config-path "./gnosisConfig.json" + ``` + +
+ + Below is an example of the application configuration + + ```json + { + "ethereum": { + "address": "", + "name": "ProxyOFT", + "sendVersion": 2, + "receiveVersion": 2, + "remoteConfigs": [ + { + "remoteChain": "bsc", + "inboundProofLibraryVersion": 1, + "inboundBlockConfirmations": 20, + "relayer": "0x902F09715B6303d4173037652FA7377e5b98089E", + "outboundProofType": 1, + "outboundBlockConfirmations": 15, + "oracle": "0x5a54fe5234E811466D5366846283323c954310B2" + }, + { + "remoteChain": "avalanche", + "inboundProofLibraryVersion": 1, + "inboundBlockConfirmations": 12, + "relayer": "0x902F09715B6303d4173037652FA7377e5b98089E", + "outboundProofType": 1, + "outboundBlockConfirmations": 15, + "oracle": "0x5a54fe5234E811466D5366846283323c954310B2" + } + ] + }, + "bsc": { + "address": "0x0702c7B1b18E5EBf022e17182b52F0AC262A8062", + "name": "", + "sendVersion": 2, + "receiveVersion": 2, + "remoteConfigs": [ + { + "remoteChain": "ethereum", + "inboundProofLibraryVersion": 1, + "inboundBlockConfirmations": 15, + "relayer": "0xA27A2cA24DD28Ce14Fb5f5844b59851F03DCf182", + "outboundProofType": 1, + "outboundBlockConfirmations": 20, + "oracle": "0x5a54fe5234E811466D5366846283323c954310B2" + } + ] + } + } + ``` + + The top level elements represent chains the contracts are deployed to. The configuration section for each chain has the following fields: + + - `address` - the contract address. An optional parameter. It should be provided if no address was specified in the task parameters. + - `name` - the contract name. An optional parameter. It should be provided only if the contract was deployed using [`hardhat-deploy`](https://www.npmjs.com/package/hardhat-deploy) and the deployment information is located in the deployments folder. + - `sendVersion` - the version of a messaging library contract used to send messages. If it isn't specified, the default version will be used. + - `receiveVersion` - the version of a messaging library contract used to receive messages. If it isn't specified, the default version will be used. + - `remoteConfigs` - an array of configuration settings for remote chains. + +
+ + The configuration section for each chain has the following fields: + + - `remoteChain` - the remote chain name. + - `inboundProofLibraryVersion` - the version of proof library for inbound messages. + - `inboundBlockConfirmations` - the number of block confirmations for inbound messages. + - `relayer` - the address of Relayer contract. + - `outboundProofType` - proof type used for outbound messages. + - `outboundBlockConfirmations` - the number of block confirmations for outbound messages. + - `oracle` - the address of the Oracle contract. + +
+ +- `checkWireAllConfig` returns the current wired up configurations of the specified contract. + + Parameters: + + - `e` - the environment ie: mainnet, testnet or sandbox. + - `u` - flag to show use custom adapter params. + - `t` - flag to show trusted remotes. + - `m` - flag to show min destination gas. + - `chains` - comma separated list of networks. + - `addresses` - comma separated list of contract addresses in same order as chains. An optional parameter, if no deployment folder is available and want to use contract addresses. + - `contract` - name of contract. An optional parameter. If all contract names are the same. + - `proxyContract` - name of proxy contract. An optional parameter. If one contract name is different. + - `proxyChain` - name of proxy chain. An optional parameter. If one chain has different contract name . + + Usage: + + ```sh + npx hardhat checkWireAllConfig --e testnet --u --t --m --chains ethereum-testnet,arbitrum-testnet --contract ExampleOFTV2 + + npx hardhat checkWireAllConfig --e testnet --u --t --m --chains ethereum-testnet,arbitrum-testnet,optimism-testnet --contract OFTV2 --proxy-contract ProxyOFTV2 --proxy-chain optimism-testnet + + npx hardhat checkWireAllConfig --e testnet --u --t --m --chains ethereum-testnet,arbitrum-testnet,optimism-testnet --addresses "0xD90E022dE858DfDFC3C0f66b0D9ACD12CA6eA3Ec,0x137d4e9C2431A3DCBa6e615E9438F2c558353a17,0x27631753FC88e7b45a46679B9Cd2e06378cB43dC" + ``` + +
+ +- `wireAll` sets the wire all configuration of the specified contract. + + Parameters: + + - `e` - the environment ie: mainnet, testnet or sandbox. + - `noPrompt` - no prompt. An optional parameter defaults to false. + - `configPath` - config path. An optional parameter. Default: ./constants/wireUpConfig.json. + - `n` - send to gnosis. An optional parameter defaults to false. + - `gnosisConfigPath` - gnosis config path. An optional parameter. Default: ./constants/gnosisConfig.json. + + Usage: + + ```sh + npx hardhat --network ethereum-testnet wireAll --e testnet + ``` + + Below is an example of the wire all configuration + + ```json + { + "proxyContractConfig": { + "chain": "avalanche", + "name": "ProxyOFT" + }, + "contractConfig": { + "name": "OFT" + }, + "chainConfig": { + "avalanche": { + "defaultFeeBp": 2, + "useCustomAdapterParams": true, + "remoteNetworkConfig": { + "ethereum": { + "feeBpConfig": { + "feeBp": 5, + "enabled": true + }, + "minDstGasConfig": { + "packetType_0": 100000, + "packetType_1": 200000 + } + }, + "polygon": { + "minDstGasConfig": { + "packetType_0": 100000, + "packetType_1": 160000 + } + } + } + } + } + } + ``` + + The `proxyContractConfig` is an optional setting, that defines the proxy chain and proxy contract name. + + - `chain`: An optional string, defines the proxy chain. + - `name`: An optional string, defines the proxy contract name. + - `address`: A optional string, defines the contract address. Used when deployments folder are not available. Uses standard LzApp/Nonblocking/OFT/ONFT abi calls such as: + + - `function setFeeBp(uint16, bool, uint16)` + - `function setDefaultFeeBp(uint16)` + - `function setMinDstGas(uint16, uint16, uint)` + - `function setUseCustomAdapterParams(bool)` + - `function setTrustedRemote(uint16, bytes)` + + - The `contractConfig` is a conditionally required setting, that defines the contract name. + - `function setFeeBp(uint16, bool, uint16)` + - The `chainConfig`: is required and defines the chain settings (default fees, useCustomAdapterParams) and the remote chain configs (minDstGas config based of packetType, and custom feeBP per chain) + + - `name`: A conditionally required string, defines the contract name. Used when contract names differ per chain. + - `address`: A conditionally required string, defines the contract address. Used when deployments folder are not available. Uses standard LzApp/Nonblocking/OFT/ONFT abi calls. + - `defaultFeeBp`: An optional number, defines the default fee bp for the chain. (Available in [OFTV2 w/ fee](https://github.com/LayerZero-Labs/solidity-examples/blob/ca7d4f1d482df5e17f8aaf1b34d0e4432020bc4e/contracts/token/oft/v2/fee/Fee.sol#L27).) + - `useCustomAdapterParams`: An optional bool that defaults to false. Uses default 200k destination gas on all cross chain messages. When false adapter parameters must be empty. When useCustomAdapterParams is true the minDstGasLookup must be set for each packet type and each chain. This requires whoever calls the send function to provide the adapter params with a destination gas >= amount set for that packet type and that destination chain. + - `remoteNetworkConfig` is a conditionally required setting, that defines the contract name. - `minDstGasConfig`: is an optional object that defines the minDstGas required based off packetType. So for example when the UA on Avalanche sends [packet type 0](https://github.com/LayerZero-Labs/solidity-examples/blob/9134640fe5b618a047f365555e760c8736ebc162/contracts/token/oft/v2/OFTCoreV2.sol#L17) to Ethereum the minDstGas will be 100000. When the UA on Avalanche sends [packet type 1](https://github.com/LayerZero-Labs/solidity-examples/blob/9134640fe5b618a047f365555e760c8736ebc162/contracts/token/oft/v2/OFTCoreV2.sol#L18) to Polygon the minDstGas will be 160000. - The `feeBpConfig` is an optional setting that defines custom feeBP per chain. (Note: setting custom fee per chain with enabled = TRUE, will triumph over defaultFeeBp.) - `feeBp`: is an optional number, defines custom feeBP per chain. - `enabled`: is an optional bool, defines if custom feeBP per chain is enabled + +
+ + More info and examples can be found here in the [Wire Up Configuration](https://layerzero.gitbook.io/docs/evm-guides/layerzero-tooling/wire-up-configuration) documentation. + +
+ + Below is an example of the Gnosis configuration + + ```json + { + "ethereum": { + "safeAddress": "0xa36B7e7894aCfaa6c35A8A0EC630B71A6B8A6D22", + "url": "https://safe-transaction.mainnet.gnosis.io/" + }, + "bsc": { + "safeAddress": "0x4755D44c1C196dC524848200B0556A09084D1dFD", + "url": "https://safe-transaction.bsc.gnosis.io/" + }, + "avalanche": { + "safeAddress": "0x4FF2C33FD9042a76eaC920C037383E51659417Ee", + "url": "https://safe-transaction.avalanche.gnosis.io/" + } + } + ``` + + For each chain you need to specify your Gnosis safe address and Gnosis Safe API url. You can find the list of supported chains and API urls in [Gnosis Safe documentation](https://docs.safe.global/learn/safe-core/safe-core-api/available-services). diff --git a/packages/ua-utils/package.json b/packages/ua-utils/package.json new file mode 100644 index 000000000..83b39d100 --- /dev/null +++ b/packages/ua-utils/package.json @@ -0,0 +1,54 @@ +{ + "name": "@layerzerolabs/ua-utils", + "description": "Utilities for working with LayerZero EVM contracts", + "version": "0.0.15", + "license": "MIT", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "module": "dist/index.mjs", + "scripts": { + "build": "npx tsup", + "lint": "npx eslint '**/*.{js,ts,json}'", + "prebuild": "tsc -noEmit" + }, + "files": [ + "dist/", + "LICENSE" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/LayerZero-Labs/lz-utils.git", + "directory": "packages/ua-utils" + }, + "devDependencies": { + "@gnosis.pm/safe-core-sdk": "^2.0.0", + "@gnosis.pm/safe-core-sdk-types": "^1.0.0", + "@gnosis.pm/safe-ethers-lib": "^1.0.0", + "@gnosis.pm/safe-service-client": "1.1.1", + "@layerzerolabs/lz-definitions": "1.5.58", + "@layerzerolabs/lz-sdk": "0.0.12", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "@types/mocha": "^10.0.1", + "chalk": "4.1.2", + "cli-ux": "^6.0.9", + "dotenv": "^16.0.3", + "ethers": "^5.5.2", + "hardhat": "2.12.5", + "hardhat-deploy": "^0.11.22", + "ts-node": "^10.9.1", + "tsup": "^7.2.0", + "typescript": "^5.2.2" + }, + "peerDependencies": { + "@gnosis.pm/safe-core-sdk": "^2.0.0", + "@gnosis.pm/safe-core-sdk-types": "^1.0.0", + "@gnosis.pm/safe-ethers-lib": "^1.0.0", + "@gnosis.pm/safe-service-client": "1.1.1", + "@layerzerolabs/lz-definitions": "latest", + "@layerzerolabs/lz-sdk": "0.0.12", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "ethers": "^5.5.2", + "hardhat": "2.12.5", + "hardhat-deploy": "^0.11.22" + } +} diff --git a/packages/ua-utils/src/checkWireAllConfig.ts b/packages/ua-utils/src/checkWireAllConfig.ts new file mode 100644 index 000000000..7566e514f --- /dev/null +++ b/packages/ua-utils/src/checkWireAllConfig.ts @@ -0,0 +1,196 @@ +import { getContract, getContractAt, getLayerZeroChainId } from "./utils/crossChainHelper" +import { logError } from "./utils/helpers" +import { LZ_APP_ABI } from "./constants/abi" + +export default async function (taskArgs: any, hre: any) { + const localNetworks = taskArgs.chains.split(",") + const remoteNetworks = localNetworks + const contractAddresses = taskArgs?.addresses?.split(",") + + const checkWireAllConfigObj: { [key: string]: any } = {} + await Promise.all( + localNetworks.map(async (localNetwork: string, localIndex: number) => { + checkWireAllConfigObj[localNetwork] = { + useCustomAdapterParams: {}, + withdrawalFeeBps: {}, + minDstGasLookup: {}, + trustedRemoteLookup: {}, + } + + checkWireAllConfigObj[localNetwork].useCustomAdapterParams["useCustomAdapterParams"] = "" + checkWireAllConfigObj[localNetwork].withdrawalFeeBps["withdrawalFeeBps"] = "" + checkWireAllConfigObj[localNetwork].minDstGasLookup[localNetwork] = "" + checkWireAllConfigObj[localNetwork].trustedRemoteLookup[localNetwork] = "" + + let localContractNameOrAddress: any + if (taskArgs?.proxyChain && taskArgs?.proxyContract && localNetwork == taskArgs?.proxyChain) { + localContractNameOrAddress = taskArgs?.proxyContract + } else if (taskArgs?.contract !== undefined) { + localContractNameOrAddress = taskArgs.contract + } else if (contractAddresses !== undefined) { + localContractNameOrAddress = contractAddresses[localIndex] + } + + if (localContractNameOrAddress === undefined && contractAddresses === undefined) { + logError(`Invalid wire up config for localContractNameOrAddress.`) + return + } + + if (taskArgs.u) + checkWireAllConfigObj[localNetwork].useCustomAdapterParams["useCustomAdapterParams"] = await getUseCustomAdapterParams( + hre, + localNetwork, + localContractNameOrAddress + ) + if (taskArgs.wfb) + checkWireAllConfigObj[localNetwork].withdrawalFeeBps["withdrawalFeeBps"] = await getWithdrawalFeeBps( + hre, + localNetwork, + localContractNameOrAddress + ) + + await Promise.all( + remoteNetworks.map(async (remoteNetwork: string, remoteIndex: number) => { + let remoteContractNameOrAddress + if (taskArgs?.proxyChain && taskArgs?.proxyContract && remoteNetwork == taskArgs?.proxyChain) { + remoteContractNameOrAddress = taskArgs?.proxyContract + } else if (taskArgs?.contract !== undefined) { + remoteContractNameOrAddress = taskArgs.contract + } else if (contractAddresses !== undefined) { + remoteContractNameOrAddress = contractAddresses[remoteIndex] + } + + if (remoteContractNameOrAddress === undefined && contractAddresses === undefined) { + logError(`Invalid wire up config for remoteContractNameOrAddress.`) + return + } + + if (taskArgs.t) + checkWireAllConfigObj[localNetwork].trustedRemoteLookup[remoteNetwork] = await getTrustedRemote( + hre, + localNetwork, + localContractNameOrAddress, + remoteNetwork, + remoteContractNameOrAddress + ) + if (taskArgs.m) + checkWireAllConfigObj[localNetwork].minDstGasLookup[remoteNetwork] = await getMinDstGas( + hre, + localNetwork, + localContractNameOrAddress, + remoteNetwork + ) + }) + ) + }) + ) + + if (taskArgs.u) { + console.log("Use Custom Adapter Params Table") + const useCustomAdapterParamsTable = Object.keys(checkWireAllConfigObj).map((network) => ({ + [network]: checkWireAllConfigObj[network].useCustomAdapterParams, + })) + console.table(useCustomAdapterParamsTable.reduce((r, c) => Object.assign(r, c), {})) + } + + if (taskArgs.wfb) { + console.log("Withdrawal Fee Bps Lookup Table") + const minDstGasLookupTable = Object.keys(checkWireAllConfigObj).map((network) => ({ + [network]: checkWireAllConfigObj[network].withdrawalFeeBps, + })) + console.table(minDstGasLookupTable.reduce((r, c) => Object.assign(r, c), {})) + } + + if (taskArgs.t) { + console.log("Trusted Remote Lookup Table") + const trustedRemoteLookupTable = Object.keys(checkWireAllConfigObj).map((network) => ({ + [network]: checkWireAllConfigObj[network].trustedRemoteLookup, + })) + console.table(trustedRemoteLookupTable.reduce((r, c) => Object.assign(r, c), {})) + } + + if (taskArgs.m) { + console.log("Min Dst Gas Lookup Table") + const minDstGasLookupTable = Object.keys(checkWireAllConfigObj).map((network) => ({ + [network]: checkWireAllConfigObj[network].minDstGasLookup, + })) + console.table(minDstGasLookupTable.reduce((r, c) => Object.assign(r, c), {})) + } +} + +async function getUseCustomAdapterParams(hre: any, localNetwork: string, localContractNameOrAddress: string): Promise { + let localContract + if (hre.ethers.utils.isAddress(localContractNameOrAddress)) { + localContract = await getContractAt(hre, localNetwork, LZ_APP_ABI, localContractNameOrAddress) + } else { + localContract = await getContract(hre, localNetwork, localContractNameOrAddress) + } + return await localContract.useCustomAdapterParams() +} + +async function getWithdrawalFeeBps(hre: any, localNetwork: string, localContractNameOrAddress: string): Promise { + let localContract + if (hre.ethers.utils.isAddress(localContractNameOrAddress)) { + localContract = await getContractAt(hre, localNetwork, LZ_APP_ABI, localContractNameOrAddress) + } else { + localContract = await getContract(hre, localNetwork, localContractNameOrAddress) + } + let withdrawalFeeBps + try { + withdrawalFeeBps = await localContract.withdrawalFeeBps() + } catch (e) { + withdrawalFeeBps = "N/A" + } + return withdrawalFeeBps +} + +async function getMinDstGas( + hre: any, + localNetwork: string, + localContractNameOrAddress: string, + remoteNetwork: string +): Promise<{ PT_0: string; PT_1: string } | string> { + let localContract + if (hre.ethers.utils.isAddress(localContractNameOrAddress)) { + localContract = await getContractAt(hre, localNetwork, LZ_APP_ABI, localContractNameOrAddress) + } else { + localContract = await getContract(hre, localNetwork, localContractNameOrAddress) + } + if (localNetwork === remoteNetwork) return "" + const remoteChainId = getLayerZeroChainId(remoteNetwork) + const minGasPk_0 = await localContract.minDstGasLookup(remoteChainId, 0) + const minGasPk_1 = await localContract.minDstGasLookup(remoteChainId, 1) + const packetTypes = { + PT_0: minGasPk_0.toString(), + PT_1: minGasPk_1.toString(), + } + return packetTypes +} + +async function getTrustedRemote( + hre: any, + localNetwork: string, + localContractNameOrAddress: string, + remoteNetwork: string, + remoteContractNameOrAddress: string +): Promise { + let localContract + if (hre.ethers.utils.isAddress(localContractNameOrAddress)) { + localContract = await getContractAt(hre, localNetwork, LZ_APP_ABI, localContractNameOrAddress) + } else { + localContract = await getContract(hre, localNetwork, localContractNameOrAddress) + } + + let remoteContract + if (hre.ethers.utils.isAddress(remoteContractNameOrAddress)) { + remoteContract = await getContractAt(hre, remoteNetwork, LZ_APP_ABI, remoteContractNameOrAddress) + } else { + remoteContract = await getContract(hre, remoteNetwork, remoteContractNameOrAddress) + } + + const remoteContractAddress = await remoteContract.address + const desiredTrustedRemote = hre.ethers.utils.solidityPack(["bytes"], [remoteContractAddress + localContract.address.substring(2)]) + const remoteChainId = getLayerZeroChainId(remoteNetwork) + const currentTrustedRemote = await localContract.trustedRemoteLookup(remoteChainId) + return currentTrustedRemote != desiredTrustedRemote ? (localNetwork === remoteNetwork ? "" : "🟥") : "🟩" +} diff --git a/packages/ua-utils/src/constants/abi.ts b/packages/ua-utils/src/constants/abi.ts new file mode 100644 index 000000000..038026fc2 --- /dev/null +++ b/packages/ua-utils/src/constants/abi.ts @@ -0,0 +1,31 @@ +export const ENDPOINT_ABI = [ + "function defaultSendVersion() view returns (uint16)", + "function defaultReceiveVersion() view returns (uint16)", + "function defaultSendLibrary() view returns (address)", + "function defaultReceiveLibraryAddress() view returns (address)", + "function uaConfigLookup(address) view returns (tuple(uint16 sendVersion, uint16 receiveVersion, address receiveLibraryAddress, address sendLibrary))", +] + +export const MESSAGING_LIBRARY_ABI = [ + "function appConfig(address, uint16) view returns (tuple(uint16 inboundProofLibraryVersion, uint64 inboundBlockConfirmations, address relayer, uint16 outboundProofType, uint64 outboundBlockConfirmations, address oracle))", + "function defaultAppConfig(uint16) view returns (tuple(uint16 inboundProofLibraryVersion, uint64 inboundBlockConfirmations, address relayer, uint16 outboundProofType, uint64 outboundBlockConfirmations, address oracle))", +] + +export const USER_APPLICATION_ABI = [ + "function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config)", + "function setSendVersion(uint16 _version)", + "function setReceiveVersion(uint16 _version)", +] + +export const LZ_APP_ABI = [ + "function setTrustedRemote(uint16 _srcChainId, bytes calldata _path)", + "function setUseCustomAdapterParams(bool _useCustomAdapterParams)", + "function setDefaultFeeBp(uint16 _feeBp)", + "function setFeeBp(uint16 _dstChainId, bool _enabled, uint16 _feeBp)", + "function setMinDstGas(uint16 _dstChainId, uint16 _packetType, uint _minGas)", + "function useCustomAdapterParams() public view returns (bool) ", + "function trustedRemoteLookup(uint16) public view returns (bytes)", + "function minDstGasLookup(uint16, uint16) public view returns (uint)", + "function defaultFeeBp() public view returns (uint16)", + "function chainIdToFeeBps(uint16) public view returns (uint16, bool)", +] diff --git a/src/constants/endpoints.ts b/packages/ua-utils/src/constants/endpoints.ts similarity index 98% rename from src/constants/endpoints.ts rename to packages/ua-utils/src/constants/endpoints.ts index bdc73238c..353204ee3 100644 --- a/src/constants/endpoints.ts +++ b/packages/ua-utils/src/constants/endpoints.ts @@ -1,4 +1,4 @@ -export const LZ_ENDPOINTS: {[key: string]: string} = { +export const LZ_ENDPOINTS: { [key: string]: string } = { "aavegotchi-testnet": "0xfeBE4c839EFA9f506C092a32fD0BB546B76A1d38", "arbitrum-mainnet": "0x3c2269811836af69497E5F486A85D7316753cf62", "arbitrum-testnet": "0x6aB5Ae6822647046626e83ee6dB8187151E1d5ab", @@ -83,5 +83,5 @@ export const LZ_ENDPOINTS: {[key: string]: string} = { "zksync-mainnet": "0x9b896c0e23220469C7AE69cb4BbAE391eAa4C8da", "zksync-testnet": "0x093D2CF57f764f09C3c2Ac58a42A2601B8C79281", "zora-mainnet": "0xb6319cC6c8c27A8F5dAF0dD3DF91EA35C4720dd7", - "zora-testnet": "0x83c73Da98cf733B03315aFa8758834b36a195b87" -} \ No newline at end of file + "zora-testnet": "0x83c73Da98cf733B03315aFa8758834b36a195b87", +} diff --git a/packages/ua-utils/src/constants/node-url.json b/packages/ua-utils/src/constants/node-url.json new file mode 100644 index 000000000..2f73a4560 --- /dev/null +++ b/packages/ua-utils/src/constants/node-url.json @@ -0,0 +1,68 @@ +{ + "mainnet": { + "arbitrum-mainnet": "https://endpoints.omniatech.io/v1/arbitrum/one/public", + "avalanche-mainnet": "https://avalanche-c-chain.publicnode.com", + "bsc-mainnet": "https://binance.llamarpc.com", + "celo-mainnet": "https://1rpc.io/celo", + "coredao-mainnet": "https://rpc.coredao.org", + "dexalot-mainnet": "https://subnets.avax.network/dexalot/mainnet/rpc", + "dfk-mainnet": "https://dfkchain.api.onfinality.io/public", + "dos-mainnet": "https://main.doschain.com", + "ethereum-mainnet": "https://eth.llamarpc.com", + "fantom-mainnet": "https://fantom.publicnode.com", + "fuse-mainnet": "https://rpc.fuse.io", + "gnosis-mainnet": "https://gnosis-mainnet.public.blastapi.io", + "goerli-mainnet": "https://ethereum-goerli.publicnode.com", + "harmony-mainnet": "https://1rpc.io/one", + "klaytn-mainnet": "https://1rpc.io/klay", + "meter-mainnet": "https://rpc.meter.io", + "metis-mainnet": "https://metis-mainnet.public.blastapi.io", + "moonbeam-mainnet": "https://1rpc.io/glmr", + "moonriver-mainnet": "https://rpc.api.moonriver.moonbeam.network", + "okx-mainnet": "https://oktc-mainnet.public.blastapi.io", + "optimism-mainnet": "https://1rpc.io/op", + "polygon-mainnet": "https://polygon.llamarpc.com", + "sepolia-mainnet": "https://rpc-sepolia.rockx.com", + "shrapnel-mainnet": "https://subnets.avax.network/shrapnel/mainnet/rpc", + "tenet-mainnet": "https://rpc.tenet.org", + "telos-mainnet": "https://rpc1.eu.telos.net/evm", + "zkpolygon-mainnet": "https://zkevm-rpc.com", + "zksync-mainnet": "https://zksync.drpc.org" + }, + "testnet": { + "aavegotchi": "", + "arbitrum-testnet": "https://arbitrum-goerli.publicnode.com", + "avalanche-testnet": "https://avalanche-fuji-c-chain.publicnode.com", + "base-testnet": "https://base-goerli.publicnode.com", + "bsc-testnet": "https://bsc-testnet.publicnode.com", + "canto": "https://testnet-archive.plexnode.wtf", + "cathay": "", + "celo-testnet": "https://alfajores-forno.celo-testnet.org", + "coredao-testnet": "https://rpc.test.btcs.network", + "dexalot-testnet": "https://subnets.avax.network/dexalot/testnet/rpc", + "dfk-testnet": "https://subnets.avax.network/defi-kingdoms/dfk-chain-testnet/rpc", + "dos-testnet": "https://test.doschain.com", + "ethereum-testnet": "https://ethereum-goerli.publicnode.com", + "fantom-testnet": "https://fantom-testnet.publicnode.com", + "fuse-testnet": "https://rpc.fusespark.io", + "gnosis-testnet": "https://rpc.chiadochain.net", + "harmony-testnet": "https://api.s0.ps.hmny.io", + "kava-testnet": "https://evm.testnet.kava.io", + "klaytn-testnet": "https://public-node-api.klaytnapi.com/v1/baobab", + "meter-testnet": "https://rpctest.meter.io", + "metis-testnet": "https://goerli.gateway.metisdevops.link", + "moonbeam-testnet": "https://rpc.api.moonbase.moonbeam.network", + "okx-testnet": "https://exchaintestrpc.okex.org", + "optimism-testnet": "https://optimism-goerli.publicnode.com", + "orderly-testnet": "", + "polygon-testnet": "https://polygon-mumbai-bor.publicnode.com", + "scroll-testnet": "https://scroll-testnet.blockpi.network/v1/rpc/public", + "sepolia-testnet": "https://api.zan.top/node/v1/eth/sepolia/public", + "shrapnel-testnet": "https://subnets.avax.network/shrapnel/testnet/rpc", + "tenet-testnet": "https://rpc.testnet.tenet.org", + "telos-testnet": "https://testnet.telos.net/evm", + "linea-testnet": "https://rpc.goerli.linea.build", + "zkpolygon": "https://rpc.public.zkevm-test.net", + "zksync-testnet": "https://testnet.era.zksync.dev" + } +} diff --git a/packages/ua-utils/src/getConfig.ts b/packages/ua-utils/src/getConfig.ts new file mode 100644 index 000000000..fb1768e93 --- /dev/null +++ b/packages/ua-utils/src/getConfig.ts @@ -0,0 +1,49 @@ +import { getDeploymentAddresses, getApplicationConfig, getEndpointAddress } from "./utils/crossChainHelper" +import { ENDPOINT_ABI, MESSAGING_LIBRARY_ABI } from "./constants/abi" +import { logError } from "./utils/helpers" + +export default async (taskArgs: any, hre: any) => { + const network = hre.network.name + const remoteNetworks = taskArgs.remoteNetworks.split(",") + const contractName = taskArgs.name + let contractAddress = taskArgs.address + + if (!contractName && !contractAddress) { + logError("Provide contract name or address") + return + } + + if (contractName && !contractAddress) { + contractAddress = getDeploymentAddresses(network, false)[contractName] + if (!contractAddress) { + logError(`Deployment information isn't found for ${contractName}`) + return + } + } + + const endpoint = await hre.ethers.getContractAt(ENDPOINT_ABI, getEndpointAddress(network)) + const appConfig = await endpoint.uaConfigLookup(contractAddress) + const sendVersion = appConfig.sendVersion + const receiveVersion = appConfig.receiveVersion + const sendLibraryAddress = sendVersion === 0 ? await endpoint.defaultSendLibrary() : appConfig.sendLibrary + const sendLibrary = await hre.ethers.getContractAt(MESSAGING_LIBRARY_ABI, sendLibraryAddress) + let receiveLibrary: any + + if (sendVersion !== receiveVersion) { + const receiveLibraryAddress = receiveVersion === 0 ? await endpoint.defaultReceiveLibraryAddress() : appConfig.receiveLibraryAddress + receiveLibrary = await hre.ethers.getContractAt(MESSAGING_LIBRARY_ABI, receiveLibraryAddress) + } + + const remoteConfig: any[] = await Promise.all( + remoteNetworks.map(async (remoteNetwork: string) => { + if (network === remoteNetwork) return + return await getApplicationConfig(remoteNetwork, sendLibrary, receiveLibrary, contractAddress) + }) + ) + + console.log("Network ", network) + console.log("Application address", contractAddress) + console.log("Send version ", sendVersion) + console.log("Receive version ", receiveVersion) + console.table(remoteConfig) +} diff --git a/packages/ua-utils/src/getDefaultConfig.ts b/packages/ua-utils/src/getDefaultConfig.ts new file mode 100644 index 000000000..f6cf2dee0 --- /dev/null +++ b/packages/ua-utils/src/getDefaultConfig.ts @@ -0,0 +1,34 @@ +import { ethers } from "ethers" +import { getProvider, getLayerZeroChainId, getEndpointAddress } from "./utils/crossChainHelper" +const { ENDPOINT_ABI, MESSAGING_LIBRARY_ABI } = require("./constants/abi") + +export default async (taskArgs: any, hre: any) => { + const networks = taskArgs.networks.split(",") + + const configByNetwork = await Promise.all( + networks.map(async (network: string) => { + const provider = getProvider(hre, network) + console.log() + const endpoint = new ethers.Contract(getEndpointAddress(network), ENDPOINT_ABI, provider) + const sendVersion = await endpoint.defaultSendVersion() + const receiveVersion = await endpoint.defaultReceiveVersion() + const sendLibraryAddress = await endpoint.defaultSendLibrary() + const messagingLibrary = new ethers.Contract(sendLibraryAddress, MESSAGING_LIBRARY_ABI, provider) + const config = await messagingLibrary.defaultAppConfig(getLayerZeroChainId(network)) + + return { + network, + sendVersion, + receiveVersion, + inboundProofLibraryVersion: config.inboundProofLibraryVersion, + inboundBlockConfirmations: config.inboundBlockConfirmations.toNumber(), + relayer: config.relayer, + outboundProofType: config.outboundProofType, + outboundBlockConfirmations: config.outboundBlockConfirmations.toNumber(), + oracle: config.oracle, + } + }) + ) + + console.table(configByNetwork) +} diff --git a/packages/ua-utils/src/index.ts b/packages/ua-utils/src/index.ts new file mode 100644 index 000000000..ce273379d --- /dev/null +++ b/packages/ua-utils/src/index.ts @@ -0,0 +1,63 @@ +import { task, types } from "hardhat/config" +import wireAll from "./wireAll" +import setConfig from "./setConfig" +import getDefaultConfig from "./getDefaultConfig" +import getConfig from "./getConfig" +import checkWireAllConfig from "./checkWireAllConfig" + +task( + "setConfig", + "sets Send and Receive Messaging Library versions and a custom application config for contracts implementing ILayerZeroUserApplicationConfig interface", + setConfig +) + .addParam("configPath", "the application config file path") + .addOptionalParam( + "name", + "name of the deployed contracts. Should be specified if the same contract deployed on different chains and the deployment information is located in the deployments folder" + ) + .addOptionalParam("address", "address of the deployed contracts. Should be specified if the contract address is the same on all chains") + .addOptionalParam("gnosisConfigPath", "the path to a file with Gnosis config. If specified, the transactions will be sent to Gnosis") + .addOptionalParam("gasLimit", "override execution gasLimit") + +task( + "getDefaultConfig", + "outputs the default Send and Receive Messaging Library versions and the default application config", + getDefaultConfig +).addParam("networks", "comma separated list of networks") + +task("getConfig", "outputs the application's Send and Receive Messaging Library versions and the config for remote networks", getConfig) + .addParam("remoteNetworks", "comma separated list of remote networks") + .addOptionalParam( + "name", + "name of the deployed contract. Should be specified only if the deployment information is located in the deployments folder" + ) + .addOptionalParam("address", "the contract address") + +task("checkWireAllConfig", "", checkWireAllConfig) + .addParam("e", "the environment ie: mainnet, testnet or sandbox") + .addFlag("u", "show use custom adapter params") + .addFlag("t", "show trusted remote lookup") + .addFlag("m", "show min destination gas lookup") + .addParam("chains", "comma separated list of networks") + .addOptionalParam("contract", "name of contract") + .addOptionalParam("addresses", "addresses of contracts in same order as chains") + .addOptionalParam("proxyContract", "name of proxy contract") + .addOptionalParam("proxyChain", "name of proxy chain") + +task("wireAll", "", wireAll) + .addParam("e", "the environment ie: mainnet, testnet or sandbox") + .addOptionalParam("noPrompt", "no prompt", false, types.boolean) + .addOptionalParam( + "configPath", + "Optional config path. Default: ./constants/wireUpConfig.json", + "./constants/wireUpConfig.json", + types.string + ) + .addOptionalParam("n", "send to gnosis", false, types.boolean) + .addOptionalParam("gasLimit", "override execution gasLimit") + .addOptionalParam( + "gnosisConfigPath", + "Optional config path. Default: ./constants/gnosisConfig.json", + "./constants/gnosisConfig.json", + types.string + ) diff --git a/packages/ua-utils/src/setConfig.ts b/packages/ua-utils/src/setConfig.ts new file mode 100644 index 000000000..9a51d10fb --- /dev/null +++ b/packages/ua-utils/src/setConfig.ts @@ -0,0 +1,325 @@ +import { promptToProceed, writeToCsv, logError, logWarning, printTransactions, logSuccess, configExist, getConfig } from "./utils/helpers" +import { + executeTransaction, + executeGnosisTransactions, + getContractAt, + getWalletContractAt, + Transaction, + getContract, + getWalletContract, + getApplicationConfig, + getEndpointAddress, + getLayerZeroChainId, +} from "./utils/crossChainHelper" +import { ENDPOINT_ABI, MESSAGING_LIBRARY_ABI, USER_APPLICATION_ABI } from "./constants/abi" +import { utils } from "ethers" + +// Application config types from UltraLightNodeV2 contract +const CONFIG_TYPE_INBOUND_PROOF_LIBRARY_VERSION = 1 +const CONFIG_TYPE_INBOUND_BLOCK_CONFIRMATIONS = 2 +const CONFIG_TYPE_RELAYER = 3 +const CONFIG_TYPE_OUTBOUND_PROOF_TYPE = 4 +const CONFIG_TYPE_OUTBOUND_BLOCK_CONFIRMATIONS = 5 +const CONFIG_TYPE_ORACLE = 6 + +export default async (taskArgs: any, hre: any) => { + const configPath = taskArgs.configPath + const name = taskArgs.name + const address = taskArgs.address + const gnosisConfigPath = taskArgs.gnosisConfigPath + const sendToGnosis = gnosisConfigPath && configExist(gnosisConfigPath) + + if (!configExist(configPath)) { + logError(`User application config file is not found`) + return + } + + const config = getConfig(configPath) + const networks = Object.keys(config) + + const transactionByNetwork: any[] = (await Promise.all( + networks.map(async (network: string) => { + const transactions: Transaction[] = [] + const chainId = getLayerZeroChainId(network) + const networkConfig = config[network] + + if (!networkConfig) return + const endpoint = await getContractAt(hre, network, ENDPOINT_ABI, getEndpointAddress(network)) + + const contractName = networkConfig.name ?? name + const contractAddress = networkConfig.address ?? address + + if (!contractName && !contractAddress) { + logWarning(`Contract information isn't found for ${network}`) + return + } + + const app = contractName + ? await getContract(hre, network, contractName) + : await getContractAt(hre, network, USER_APPLICATION_ABI, contractAddress) + const appConfig = await endpoint.uaConfigLookup(app.address) + const sendLibraryAddress = appConfig.sendVersion === 0 ? await endpoint.defaultSendLibrary() : appConfig.sendLibrary + const sendLibrary = await getContractAt(hre, network, MESSAGING_LIBRARY_ABI, sendLibraryAddress) + let receiveLibrary: any + + if (appConfig.sendVersion !== appConfig.receiveVersion) { + const receiveLibraryAddress = + appConfig.receiveVersion === 0 ? await endpoint.defaultReceiveLibraryAddress() : appConfig.receiveLibraryAddress + receiveLibrary = await getContractAt(hre, network, MESSAGING_LIBRARY_ABI, receiveLibraryAddress) + } + + if (networkConfig.sendVersion) { + transactions.push(...(await setSendVersion(chainId, app, appConfig.sendVersion, networkConfig.sendVersion))) + } + + if (networkConfig.receiveVersion) { + transactions.push(...(await setReceiveVersion(chainId, app, appConfig.receiveVersion, networkConfig.receiveVersion))) + } + + const remoteConfigs = networkConfig.remoteConfigs + const newSendVersion = networkConfig.sendVersion ?? appConfig.sendVersion + const newReceiveVersion = networkConfig.receiveVersion ?? appConfig.receiveVersion + + if (remoteConfigs) { + await Promise.all( + remoteConfigs.map(async (newConfig: any) => { + if (newConfig.remoteChain === network) return + + const oldConfig = await getApplicationConfig(newConfig.remoteChain, sendLibrary, receiveLibrary, app.address) + const remoteChainId = getLayerZeroChainId(newConfig.remoteChain) + + if (newConfig.inboundProofLibraryVersion) { + transactions.push( + ...(await setConfig( + newReceiveVersion, + chainId, + remoteChainId, + app, + CONFIG_TYPE_INBOUND_PROOF_LIBRARY_VERSION, + "uint16", + oldConfig.inboundProofLibraryVersion, + newConfig.inboundProofLibraryVersion + )) + ) + } + + if (newConfig.inboundBlockConfirmations) { + transactions.push( + ...(await setConfig( + newReceiveVersion, + chainId, + remoteChainId, + app, + CONFIG_TYPE_INBOUND_BLOCK_CONFIRMATIONS, + "uint64", + oldConfig.inboundBlockConfirmations, + newConfig.inboundBlockConfirmations + )) + ) + } + + if (newConfig.relayer) { + transactions.push( + ...(await setConfig( + newSendVersion, + chainId, + remoteChainId, + app, + CONFIG_TYPE_RELAYER, + "address", + oldConfig.relayer, + newConfig.relayer + )) + ) + } + + if (newConfig.outboundProofType) { + transactions.push( + ...(await setConfig( + newSendVersion, + chainId, + remoteChainId, + app, + CONFIG_TYPE_OUTBOUND_PROOF_TYPE, + "uint16", + oldConfig.outboundProofType, + newConfig.outboundProofType + )) + ) + } + + if (newConfig.outboundBlockConfirmations) { + transactions.push( + ...(await setConfig( + newSendVersion, + chainId, + remoteChainId, + app, + CONFIG_TYPE_OUTBOUND_BLOCK_CONFIRMATIONS, + "uint64", + oldConfig.outboundBlockConfirmations, + newConfig.outboundBlockConfirmations + )) + ) + } + + if (newConfig.oracle) { + transactions.push( + ...(await setConfig( + newSendVersion, + chainId, + remoteChainId, + app, + CONFIG_TYPE_ORACLE, + "address", + oldConfig.oracle, + newConfig.oracle + )) + ) + } + }) + ) + } + return { + network: network, + transactions, + } + }) + )) as any[] + + const totalTransactionsNeedingChange = transactionByNetwork.reduce((count, { transactions }) => { + count += transactions.filter((tx: Transaction) => tx.needChange).length + return count + }, 0) + + if (totalTransactionsNeedingChange == 0) { + console.log("No changes needed") + return + } + + const columns = ["chainId", "remoteChainId", "contractAddress", "functionName", "args", "diff"] + printTransactions(columns, transactionByNetwork) + writeToCsv("setConfigTransactions.csv", columns, transactionByNetwork) + await promptToProceed(`Would you like to proceed with the above instructions ${sendToGnosis ? "in Gnosis?" : "?"}`) + + const errors: any[] = [] + const print: any = {} + let previousPrintLine = 0 + const printResult = () => { + if (previousPrintLine) { + process.stdout.moveCursor(0, -previousPrintLine) + } + if (Object.keys(print)) { + previousPrintLine = Object.keys(print).length + 4 + console.table(Object.keys(print).map((network) => ({ network, ...print[network] }))) + } + } + + if (sendToGnosis) { + const gnosisConfig = getConfig(gnosisConfigPath) + await Promise.all( + transactionByNetwork.map(async ({ network, transactions }) => { + const transactionToCommit = transactions.filter((transaction: Transaction) => transaction.needChange) + print[network] = print[network] || { requests: "1/1" } + print[network].current = `executeGnosisTransactions: ${transactionToCommit}` + try { + await executeGnosisTransactions(hre, network, gnosisConfig, transactionToCommit) + print[network].requests = "1/1" + } catch (err: any) { + errors.push({ network, err }) + print[network].current = err.message + print[network].err = true + } + }) + ) + printResult() + if (errors.length) { + logError(`\nFinished with ${errors.length === 1 ? "an error" : `${errors.length} errors`}`, false) + errors.forEach((x) => { + console.log(x.err) + console.log() + }) + } + } else { + await Promise.all( + transactionByNetwork.map(async ({ network, transactions }) => { + const transactionToCommit = transactions.filter((transaction: any) => transaction.needChange) + const networkConfig = config[network] + const contractName = networkConfig.name ?? name + const contractAddress = networkConfig.address ?? address + const app = contractName + ? await getWalletContract(hre, network, contractName) + : await getWalletContractAt(hre, network, USER_APPLICATION_ABI, contractAddress) + + let successTx = 0 + print[network] = print[network] || { requests: `${successTx}/${transactionToCommit.length}` } + for (const transaction of transactionToCommit) { + print[network].current = `${transaction.functionName}(${transaction.args})` + printResult() + try { + const gasLimit = taskArgs.gasLimit + const tx = await executeTransaction(hre, network, transaction, gasLimit, app) + print[network].past = `${transaction.functionName}(${transaction.args}) (${tx.transactionHash})` + successTx++ + print[network].requests = `${successTx}/${transactionToCommit.length}` + printResult() + } catch (err: any) { + logError(`Failing to call ${transaction.contractName}.${transaction.functionName} on ${network} with an error ${err}`) + errors.push({ network, err }) + print[network].current = err + print[network].err = true + printResult() + break + } + } + }) + ) + } + + if (!errors.length) { + logSuccess("\nFinished successfully") + } +} + +const setSendVersion = async (chainId: string, app: any, oldSendVersion: any, newSendVersion: any): Promise => { + const needChange = oldSendVersion !== newSendVersion + const contractAddress = app.address + const functionName = "setSendVersion" + const args = [newSendVersion] + const calldata = app.interface.encodeFunctionData(functionName, args) + const diff = needChange ? { oldValue: oldSendVersion, newValue: newSendVersion } : undefined + + return [{ needChange, chainId, contractAddress, functionName, args, calldata, diff }] +} + +const setReceiveVersion = async (chainId: string, app: any, currentReceiveVersion: any, newReceiveVersion: any): Promise => { + const needChange = currentReceiveVersion !== newReceiveVersion + const contractAddress = app.address + const functionName = "setReceiveVersion" + const args = [newReceiveVersion] + const calldata = app.interface.encodeFunctionData(functionName, args) + const diff = needChange ? { oldValue: currentReceiveVersion, newValue: newReceiveVersion } : undefined + + return [{ needChange, chainId, contractAddress, functionName, args, calldata, diff }] +} + +const setConfig = async ( + configVersion: any, + chainId: string, + remoteChainId: string, + app: any, + configType: number, + configValueType: string, + oldValue: any, + newValue: any +): Promise => { + const newConfig = utils.defaultAbiCoder.encode([configValueType], [newValue]) + const contractAddress = app.address + const functionName = "setConfig" + const args = [configVersion, remoteChainId, configType, newConfig] + const needChange = oldValue !== newValue + const calldata = app.interface.encodeFunctionData(functionName, args) + const diff = needChange ? { oldValue, newValue } : undefined + + return [{ needChange, chainId, remoteChainId, contractAddress, functionName, args, calldata, diff }] +} diff --git a/packages/ua-utils/src/utils/crossChainHelper.ts b/packages/ua-utils/src/utils/crossChainHelper.ts new file mode 100644 index 000000000..45d53e9c1 --- /dev/null +++ b/packages/ua-utils/src/utils/crossChainHelper.ts @@ -0,0 +1,364 @@ +import * as ethers from "ethers" +import { Contract, ContractReceipt } from "ethers" +import EthersAdapter from "@gnosis.pm/safe-ethers-lib" +import SafeServiceClient from "@gnosis.pm/safe-service-client" +import Safe from "@gnosis.pm/safe-core-sdk" +import { LZ_APP_ABI } from "../constants/abi" +import { LZ_ENDPOINTS } from "../constants/endpoints" +import { MainnetEndpointId, TestnetEndpointId, SandboxEndpointId } from "@layerzerolabs/lz-definitions" +import { promptToProceed, arrayToCsv, getConfig } from "./helpers" +const path = require("path") +const fs = require("fs") +import { writeFile } from "fs/promises" + +export interface ExecutableTransaction { + contractName: string + functionName: string + args: any[] + txArgs?: any +} + +export interface Transaction { + needChange: boolean + chainId: string + remoteChainId?: string + contractAddress: string + functionName: string + args: any[] + calldata?: string + diff?: { [key: string]: { newValue: any; oldValue: any } } +} + +export interface NetworkTransactions { + network: string + transactions: Transaction[] +} + +const providerByNetwork: { [name: string]: ethers.providers.JsonRpcProvider } = {} +export const getProvider = (hre: any, network: string) => { + if (!providerByNetwork[network]) { + const networkUrl = hre.config.networks[network].url + providerByNetwork[network] = new ethers.providers.JsonRpcProvider(networkUrl) + } + return providerByNetwork[network] +} + +export const getWallet = (index: number) => ethers.Wallet.fromMnemonic(process.env.MNEMONIC || "", `m/44'/60'/0'/0/${index}`) + +const connectedWallets: { [key: string]: any } = {} +export const getConnectedWallet = (hre: any, network: string, walletIndex: number) => { + const key = `${network}-${walletIndex}` + if (!connectedWallets[key]) { + const provider = getProvider(hre, network) + const wallet = getWallet(walletIndex) + connectedWallets[key] = wallet.connect(provider) + } + return connectedWallets[key] +} + +const deploymentAddresses: { [key: string]: string } = {} +export const getDeploymentAddress = (network: string, contractName: string) => { + const key = `${network}-${contractName}` + if (!deploymentAddresses[key]) { + deploymentAddresses[key] = getDeploymentAddresses(network)[contractName] + } + if (!deploymentAddresses[key]) { + throw Error(`contract ${key} not found for network: ${network}`) + } + return deploymentAddresses[key] +} + +const contracts: { [key: string]: any } = {} +export const getContract = async (hre: any, network: string, contractName: string) => { + if (network == "hardhat") { + return await hre.ethers.getContract(contractName) + } + + const key = `${network}-${contractName}` + if (!contracts[key]) { + const contractAddress = getDeploymentAddress(network, contractName) + const provider = getProvider(hre, network) + const contractFactory = await getContractFactory(hre, contractName) + const contract = contractFactory.attach(contractAddress) + contracts[key] = contract.connect(provider) + } + return contracts[key] +} + +export const getContractAt = async (hre: any, network: string, abi: any, contractAddress: string) => { + const key = `${network}-${contractAddress}` + if (!contracts[key]) { + const provider = getProvider(hre, network) + const contract = new Contract(contractAddress, abi, provider) + contracts[key] = contract.connect(provider) + } + return contracts[key] +} + +export const getWalletContract = async (hre: any, network: string, contractName: string, walletIndex: number = 0) => { + const contract = await getContract(hre, network, contractName) + const wallet = getConnectedWallet(hre, network, walletIndex) + return contract.connect(wallet) +} + +export const getWalletContractAt = async (hre: any, network: string, abi: any, contractAddress: string, walletIndex = 0) => { + const contract = await getContractAt(hre, network, abi, contractAddress) + const wallet = getConnectedWallet(hre, network, walletIndex) + return contract.connect(wallet) +} + +const contractFactories: { [name: string]: ethers.ContractFactory } = {} +const getContractFactory = async (hre: any, contractName: string) => { + if (!contractFactories[contractName]) { + contractFactories[contractName] = await hre.ethers.getContractFactory(contractName) + } + return contractFactories[contractName] +} + +export const executeTransaction = async ( + hre: any, + network: string, + transaction: any, + gasLimit?: any, + contract?: any, + abi?: any +): Promise => { + let walletContract + if (contract) { + walletContract = contract + } else if (hre.ethers.utils.isAddress(transaction.contractName)) { + walletContract = await getWalletContractAt(hre, network, abi, transaction.contractName, 0) + } else { + walletContract = await getWalletContract(hre, network, transaction.contractName, 0) + } + const gasPrice = await getProvider(hre, network).getGasPrice() + const finalGasPrice = gasPrice.mul(10).div(8) + return await ( + await walletContract[transaction.functionName](...transaction.args, { + gasPrice: finalGasPrice, + gasLimit: gasLimit !== undefined ? gasLimit : 200000, + ...transaction.txArgs, + }) + ).wait() +} + +export async function executeTransactions(hre: any, taskArgs: any, transactionBynetwork: any[]) { + const columns = ["needChange", "chainId", "remoteChainId", "contractName", "functionName", "args", "diff", "calldata"] + + const data = transactionBynetwork.reduce((acc, { network, transactions }) => { + transactions.forEach((transaction: any) => { + acc.push([ + network, + ...columns.map((key) => { + if (typeof transaction[key] === "object") { + return JSON.stringify(transaction[key]) + } else { + return transaction[key] + } + }), + ]) + }) + return acc + }, [] as any) + await writeFile("./transactions.csv", arrayToCsv(["network"].concat(columns), data)) + + console.log("Full configuration is written at:") + console.log(`file:/${process.cwd()}/transactions.csv`) + + const errs: any[] = [] + const print: any = {} + let previousPrintLine = 0 + const printResult = () => { + if (previousPrintLine) { + process.stdout.moveCursor(0, -previousPrintLine) + } + if (Object.keys(print)) { + previousPrintLine = Object.keys(print).length + 4 + console.table(Object.keys(print).map((network) => ({ network, ...print[network] }))) + } + } + + if (taskArgs.n) { + await promptToProceed("Would you like to Submit to gnosis?", taskArgs.noPrompt) + const gnosisConfig = getConfig(taskArgs.gnosisConfigPath) + await Promise.all( + transactionBynetwork.map(async ({ network, transactions }) => { + const transactionToCommit = transactions.filter((transaction: any) => transaction.needChange) + print[network] = print[network] || { requests: `1/1` } + print[network].current = `executeGnosisTransactions: ${transactionToCommit}` + try { + await executeGnosisTransactions(hre, network, gnosisConfig, transactionToCommit) + print[network].requests = `1/1` + printResult() + } catch (err: any) { + console.log(`Failing calling executeGnosisTransactions for network ${network} with err ${err}`) + errs.push({ + network, + err, + }) + print[network].current = err.message + print[network].err = true + printResult() + } + }) + ) + } else { + await promptToProceed("Would you like to run these transactions?", taskArgs.noPrompt) + await Promise.all( + transactionBynetwork.map(async ({ network, transactions }) => { + const transactionToCommit = transactions.filter((transaction: any) => transaction.needChange) + + let successTx = 0 + print[network] = print[network] || { requests: `${successTx}/${transactionToCommit.length}` } + for (const transaction of transactionToCommit) { + print[network].current = `${transaction.contractName}.${transaction.functionName}` + printResult() + try { + const gasLimit = taskArgs.gasLimit + const tx = await executeTransaction(hre, network, transaction, gasLimit) + print[network].past = `${transaction.contractName}.${transaction.functionName} (${tx.transactionHash})` + successTx++ + print[network].requests = `${successTx}/${transactionToCommit.length}` + printResult() + } catch (err: any) { + console.log( + `Failing calling ${transaction.contractName}.${transaction.functionName} for network ${network} with err ${err}` + ) + console.log(err) + errs.push({ + network, + err, + }) + print[network].current = err + print[network].err = true + printResult() + break + } + } + }) + ) + } + + if (!errs.length) { + console.log("Wired all networks successfully") + } else { + console.log(errs) + } +} + +export const executeGnosisTransactions = async (hre: any, network: string, gnosisConfig: any, transactions: Transaction[]) => { + const signer = await getConnectedWallet(hre, network, 0) + if (!gnosisConfig[network]) { + throw Error(`Gnosis for ${network} not found or not supported`) + } + + const { safeAddress, url } = gnosisConfig[network] + console.log(`safeAddress[${safeAddress}] url[${url}]`) + + const safeService = new SafeServiceClient(url) + const ethAdapter = new EthersAdapter({ + ethers: hre.ethers, + signerOrProvider: signer, + }) + + const safeSdk: Safe = await Safe.create({ ethAdapter, safeAddress }) + const gnosisTransactions = transactions.map((tx) => ({ to: tx.contractAddress, data: tx.calldata!, value: "0" })) + const nonce = await safeService.getNextNonce(safeAddress) + const safeTransaction = await safeSdk.createTransaction(gnosisTransactions, { nonce }) + + await safeSdk.signTransaction(safeTransaction) + const safeTxHash = await safeSdk.getTransactionHash(safeTransaction) + await safeService.proposeTransaction({ + safeAddress, + safeTransaction, + safeTxHash, + senderAddress: signer.address, + }) +} + +export const getDeploymentAddresses = (network: string, throwIfMissing: boolean = true): any => { + const deploymentAddresses: { [key: string]: any } = {} + const DEPLOYMENT_PATH = path.resolve("deployments") + + if (!fs.existsSync(DEPLOYMENT_PATH)) { + return deploymentAddresses + } + + let folderName = network + if (network === "hardhat") { + folderName = "localhost" + } + const networkFolderName = fs.readdirSync(DEPLOYMENT_PATH).filter((f: string) => f === folderName)[0] + if (networkFolderName === undefined) { + if (throwIfMissing) { + throw new Error("missing deployment files for endpoint " + folderName) + } + return deploymentAddresses + } + + const networkFolderPath = path.resolve(DEPLOYMENT_PATH, folderName) + const files = fs.readdirSync(networkFolderPath).filter((f: string) => f.includes(".json")) + files.forEach((file: string) => { + const filepath = path.resolve(networkFolderPath, file) + const data = JSON.parse(fs.readFileSync(filepath)) + const contractName = file.split(".")[0] + deploymentAddresses[contractName] = data.address + }) + + return deploymentAddresses +} + +export const getApplicationConfig = async (remoteNetwork: string, sendLibrary: any, receiveLibrary: any, applicationAddress: string) => { + const remoteChainId = getLayerZeroChainId(remoteNetwork) + const sendConfig = await sendLibrary.appConfig(applicationAddress, remoteChainId) + let inboundProofLibraryVersion = sendConfig.inboundProofLibraryVersion + let inboundBlockConfirmations = sendConfig.inboundBlockConfirmations.toNumber() + + if (receiveLibrary) { + const receiveConfig = await receiveLibrary.appConfig(applicationAddress, remoteChainId) + inboundProofLibraryVersion = receiveConfig.inboundProofLibraryVersion + inboundBlockConfirmations = receiveConfig.inboundBlockConfirmations.toNumber() + } + return { + remoteNetwork, + inboundProofLibraryVersion, + inboundBlockConfirmations, + relayer: sendConfig.relayer, + outboundProofType: sendConfig.outboundProofType, + outboundBlockConfirmations: sendConfig.outboundBlockConfirmations.toNumber(), + oracle: sendConfig.oracle, + } +} + +export const getEndpointAddress = (network: string): string => { + return LZ_ENDPOINTS[network] +} + +// expecting "chain-environment" eg. "ethereum-mainnet", "ethereum-testnet", "ethereum-sandbox" +export const getLayerZeroChainId = (network: string): string => { + const [chainName, environment] = network.split("-") + const chainIdEnum = getChainIdEnum(chainName, environment) + if (environment == "mainnet") { + return MainnetEndpointId[chainIdEnum as any] + } else if (environment == "testnet") { + return TestnetEndpointId[chainIdEnum as any] + } else if (environment == "sandbox") { + return SandboxEndpointId[chainIdEnum as any] + } else { + throw new Error("cannot find chainId") + } +} + +const getChainIdEnum = (chainName: string, environment: string): string => { + return `${chainName.split("-")[0].toUpperCase()}_${environment.toUpperCase()}` +} + +export const getContractInstance = async (hre: any, network: string, contractNameOrAddress: string) => { + let contract + if (hre.ethers.utils.isAddress(contractNameOrAddress)) { + contract = await getContractAt(hre, network, LZ_APP_ABI, contractNameOrAddress) + } else { + contract = await getContract(hre, network, contractNameOrAddress) + } + return contract +} diff --git a/packages/ua-utils/src/utils/helpers.ts b/packages/ua-utils/src/utils/helpers.ts new file mode 100644 index 000000000..388b63a75 --- /dev/null +++ b/packages/ua-utils/src/utils/helpers.ts @@ -0,0 +1,81 @@ +import { cli } from "cli-ux" +import fs from "fs" +import chalk from "chalk" +import { Transaction, NetworkTransactions } from "./crossChainHelper" + +export const promptToProceed = async (msg: string, noPrompt: boolean = false) => { + if (!noPrompt) { + const proceed = await cli.prompt(`${msg} Y/N`) + if (!["y", "yes"].includes(proceed.toLowerCase())) { + process.exit(0) + } + } +} + +export const arrayToCsv = (columns: string[], data: any) => + columns + .join(",") + .concat("\n") + .concat( + data + .map( + (row: any) => + row + .map(String) // convert every value to String + .map((v: any) => (v === "undefined" ? "" : v)) + .map((v: any) => v.replace(/"/g, '""')) // escape double colons + .map((v: any) => `"${v}"`) // quote it + .join(",") // comma-separated + ) + .join("\r\n") // rows starting on new lines + ) + +export const writeToCsv = async (fileName: string, columns: string[], transactionByNetwork: any[]) => { + const data = transactionByNetwork.reduce((acc, { network, transactions }) => { + transactions.forEach((tx: any) => { + acc.push([ + network, + ...columns.map((key) => { + const keys = key.split("/") + for (const field in tx) { + if (keys.includes(field)) { + if (typeof tx[field] === "object") { + return JSON.stringify(tx[field]) + } else { + return tx[field] + } + } + } + }), + ]) + }) + return acc + }, []) + fs.writeFileSync(fileName, arrayToCsv(["network"].concat(columns), data)) + console.log(`Transactions are written to: ${chalk.green(fileName)}`) +} + +export const printTransactions = (columns: string[], transactionByNetwork: NetworkTransactions[]) => { + let totalTransactionsNeedingChange: number = 0 + + transactionByNetwork.forEach(({ network, transactions }) => { + console.log(`\n================================================`) + console.log(chalk.green(`${network.toUpperCase()} transactions`)) + console.log(`================================================`) + const transactionsNeedingChange = transactions.filter((tx: Transaction) => tx.needChange) + totalTransactionsNeedingChange += transactionsNeedingChange.length + + if (!transactionsNeedingChange.length) { + console.log("No changes needed\n") + } else { + console.table(transactionsNeedingChange, columns) + } + }) +} + +export const logError = (message: string, includeErrorText: boolean = true) => + console.log(chalk.red(includeErrorText ? `ERROR: ${message}` : message)) +export const logWarning = (message: string) => console.log(chalk.yellow(`WARNING: ${message}`)) +export const logSuccess = (message: string) => console.log(chalk.green(`${message}`)) +export const configExist = (fileName: string) => fs.existsSync(fileName) +export const getConfig = (fileName: string) => JSON.parse(fs.readFileSync(fileName, "utf-8")) diff --git a/packages/ua-utils/src/utils/wireAllHelpers.ts b/packages/ua-utils/src/utils/wireAllHelpers.ts new file mode 100644 index 000000000..7d81ce005 --- /dev/null +++ b/packages/ua-utils/src/utils/wireAllHelpers.ts @@ -0,0 +1,124 @@ +import { Transaction, getLayerZeroChainId, getContractInstance } from "./crossChainHelper" + +export async function setUseCustomAdapterParams( + hre: any, + localNetwork: string, + localContractNameOrAddress: string, + useCustom: boolean +): Promise { + const localContract = await getContractInstance(hre, localNetwork, localContractNameOrAddress) + const cur = await localContract.useCustomAdapterParams() + const needChange = cur !== useCustom + + // function setUseCustomAdapterParams(bool _useCustomAdapterParams) + const functionName = "setUseCustomAdapterParams" + const params = ["bool"] + const args = [useCustom] + + const tx: any = { + needChange, + chainId: getLayerZeroChainId(localNetwork), + contractName: localContractNameOrAddress, + functionName: functionName, + args: args, + calldata: localContract.interface.encodeFunctionData(functionName, args), + } + if (tx.needChange) { + tx.diff = JSON.stringify({ useCustomAdapterParams: { oldValue: cur, newValue: useCustom } }) + } + return [tx] +} + +export async function setMinDstGas( + hre: any, + localNetwork: string, + localContractNameOrAddress: string, + minDstGasConfig: any, + remoteChainId: string +): Promise { + const txns: Transaction[] = [] + const localContract = await getContractInstance(hre, localNetwork, localContractNameOrAddress) + const packetTypes = Object.keys(minDstGasConfig) + for (const packet of packetTypes) { + const packetType = parseInt(packet.at(-1) as string) + const minGas = minDstGasConfig[packet] + const cur = (await localContract.minDstGasLookup(remoteChainId, packetType)).toNumber() + const needChange = cur !== minGas + + // function setMinDstGas(uint16 _dstChainId, uint16 _packetType, uint _minGas) + const functionName = "setMinDstGas" + const params = ["uint16", "uint16", "uint256"] + const args = [remoteChainId, packetType, minGas] + + const tx: any = { + needChange, + chainId: getLayerZeroChainId(localNetwork), + contractName: localContractNameOrAddress, + functionName, + args: args, + calldata: localContract.interface.encodeFunctionData(functionName, args), + } + if (tx.needChange) { + tx.diff = JSON.stringify({ oldValue: cur, newValue: minGas }) + } + txns.push(tx) + } + return txns +} + +export async function setTrustedRemote( + hre: any, + localNetwork: string, + localContractNameOrAddress: string, + remoteNetwork: string, + remoteContractNameOrAddress: string +): Promise { + const localContract = await getContractInstance(hre, localNetwork, localContractNameOrAddress) + const remoteContract = await getContractInstance(hre, remoteNetwork, remoteContractNameOrAddress) + + const remoteContractAddress = await remoteContract.address + const desiredTrustedRemote = hre.ethers.utils.solidityPack(["bytes"], [remoteContractAddress + localContract.address.substring(2)]) + + const remoteChainId = getLayerZeroChainId(remoteNetwork) + const cur = await localContract.trustedRemoteLookup(remoteChainId) + const needChange = cur != desiredTrustedRemote + + // function setTrustedRemote(uint16 _srcChainId, bytes calldata _path) + const functionName = "setTrustedRemote" + const params = ["uint16", "bytes"] + const args = [remoteChainId, desiredTrustedRemote] + + const tx: any = { + needChange, + chainId: getLayerZeroChainId(localNetwork), + contractName: localContractNameOrAddress, + functionName: functionName, + args: args, + calldata: localContract.interface.encodeFunctionData(functionName, args), + } + if (tx.needChange) { + tx.diff = JSON.stringify({ trustedRemote: { oldValue: cur, newValue: desiredTrustedRemote } }) + } + return [tx] +} + +export function getContractNameOrAddress(chain: string, WIRE_UP_CONFIG: any) { + let contractNameOrAddress + const proxyChain = WIRE_UP_CONFIG?.proxyContractConfig?.chain + if (proxyChain === chain) { + if (WIRE_UP_CONFIG?.proxyContractConfig?.name) { + contractNameOrAddress = WIRE_UP_CONFIG?.proxyContractConfig?.name + } else if (WIRE_UP_CONFIG?.proxyContractConfig?.address) { + contractNameOrAddress = WIRE_UP_CONFIG?.proxyContractConfig?.address + } + } else { + if (WIRE_UP_CONFIG?.contractConfig?.name) { + contractNameOrAddress = WIRE_UP_CONFIG?.contractConfig?.name + } else if (WIRE_UP_CONFIG?.chainConfig?.[chain]?.name) { + contractNameOrAddress = WIRE_UP_CONFIG?.chainConfig?.[chain]?.name + } else if (WIRE_UP_CONFIG?.chainConfig?.[chain]?.address) { + contractNameOrAddress = WIRE_UP_CONFIG?.chainConfig?.[chain]?.address + } + } + return contractNameOrAddress +} diff --git a/packages/ua-utils/src/wireAll.ts b/packages/ua-utils/src/wireAll.ts new file mode 100644 index 000000000..895cf46ee --- /dev/null +++ b/packages/ua-utils/src/wireAll.ts @@ -0,0 +1,177 @@ +import { Transaction, NetworkTransactions, getContractInstance, getLayerZeroChainId, executeTransactions } from "./utils/crossChainHelper" +import { configExist, getConfig, logError, printTransactions } from "./utils/helpers" +import { setUseCustomAdapterParams, setMinDstGas, setTrustedRemote, getContractNameOrAddress } from "./utils/wireAllHelpers" + +export default async function (taskArgs: any, hre: any) { + if (!configExist(taskArgs.configPath)) { + logError(`Wire up config file is not found.`) + return + } + + if (taskArgs.n && !configExist(taskArgs.gnosisConfigPath)) { + logError(`Gnosis config file not found`) + return + } + + const deployer = (await hre.getNamedAccounts()).deployer + console.log(`CURRENT SIGNER: ${deployer}`) + + const WIRE_UP_CONFIG = getConfig(taskArgs.configPath) + const localNetworks = Object.keys(WIRE_UP_CONFIG?.chainConfig) + + console.log(`************************************************`) + console.log(`Computing diff`) + console.log(`************************************************`) + + const transactionByNetwork: NetworkTransactions[] = (await Promise.all( + localNetworks.map(async (localNetwork) => { + // array of transactions to execute + const transactions: Transaction[] = [] + const remoteNetworks = Object.keys(WIRE_UP_CONFIG?.chainConfig?.[localNetwork]?.remoteNetworkConfig) + + const localContractNameOrAddress = getContractNameOrAddress(localNetwork, WIRE_UP_CONFIG) + if (localContractNameOrAddress === undefined) { + logError(`Invalid wire up config for localContractNameOrAddress.`) + return + } + + // check if useCustomAdapterParams needs to be set + const useCustomAdapterParams = WIRE_UP_CONFIG?.chainConfig?.[localNetwork]?.useCustomAdapterParams + if (useCustomAdapterParams !== undefined) { + transactions.push(...(await setUseCustomAdapterParams(hre, localNetwork, localContractNameOrAddress, useCustomAdapterParams))) + } + + // check if defaultFeeBp needs to be set + const defaultFeeBp = WIRE_UP_CONFIG?.chainConfig?.[localNetwork]?.defaultFeeBp + if (defaultFeeBp !== undefined) { + transactions.push(...(await setDefaultFeeBp(hre, localNetwork, localContractNameOrAddress, defaultFeeBp))) + } + + await Promise.all( + remoteNetworks.map(async (remoteNetwork) => { + // skip wiring itself + if (localNetwork === remoteNetwork) return + const proxyChain = WIRE_UP_CONFIG?.proxyContractConfig?.chain + + const remoteContractNameOrAddress = getContractNameOrAddress(remoteNetwork, WIRE_UP_CONFIG) + if (remoteContractNameOrAddress === undefined) { + logError(`Invalid wire up config for remoteContractNameOrAddress.`) + return + } + + // setTrustedRemote + transactions.push( + ...(await setTrustedRemote(hre, localNetwork, localContractNameOrAddress, remoteNetwork, remoteContractNameOrAddress)) + ) + + // setFeeBp + if (WIRE_UP_CONFIG?.chainConfig?.[localNetwork]?.remoteNetworkConfig?.[remoteNetwork]?.feeBpConfig !== undefined) { + transactions.push( + ...(await setFeeBp( + hre, + localNetwork, + localContractNameOrAddress, + WIRE_UP_CONFIG?.chainConfig?.[localNetwork]?.remoteNetworkConfig?.[remoteNetwork].feeBpConfig, + getLayerZeroChainId(remoteNetwork) + )) + ) + } + + // setMinDstGas + if (WIRE_UP_CONFIG?.chainConfig?.[localNetwork]?.remoteNetworkConfig?.[remoteNetwork]?.minDstGasConfig !== undefined) { + transactions.push( + ...(await setMinDstGas( + hre, + localNetwork, + localContractNameOrAddress, + WIRE_UP_CONFIG?.chainConfig?.[localNetwork]?.remoteNetworkConfig?.[remoteNetwork].minDstGasConfig, + getLayerZeroChainId(remoteNetwork) + )) + ) + } + }) + ) + return { + network: localNetwork, + transactions: transactions, + } + }) + )) as NetworkTransactions[] + + const noChanges = transactionByNetwork.reduce((acc, { transactions }) => { + acc += transactions.filter((transaction) => transaction.needChange).length + return acc + }, 0) + if (noChanges == 0) { + //early return + console.log("No changes needed") + return + } + const columns = ["needChange", "chainId", "contractName", "functionName", "args", "diff"] + printTransactions(columns, transactionByNetwork) + await executeTransactions(hre, taskArgs, transactionByNetwork) +} + +async function setDefaultFeeBp( + hre: any, + localNetwork: string, + localContractNameOrAddress: string, + defaultFeeBp: number +): Promise { + const localContract = await getContractInstance(hre, localNetwork, localContractNameOrAddress) + const cur = await localContract.defaultFeeBp() + const needChange = cur !== defaultFeeBp + + // function setDefaultFeeBp(uint16 _feeBp) + const functionName = "setDefaultFeeBp" + const params = ["uint16"] + const args = [defaultFeeBp] + + const tx: any = { + needChange, + chainId: getLayerZeroChainId(localNetwork), + contractName: localContractNameOrAddress, + functionName: functionName, + args: args, + calldata: localContract.interface.encodeFunctionData(functionName, args), + } + if (tx.needChange) { + tx.diff = JSON.stringify({ defaultFeeBp: { oldValue: cur, newValue: defaultFeeBp } }) + } + return [tx] +} + +async function setFeeBp( + hre: any, + localNetwork: string, + localContractNameOrAddress: string, + feeBpConfig: any, + remoteChainId: string +): Promise { + const localContract = await getContractInstance(hre, localNetwork, localContractNameOrAddress) + const feeConfig = await localContract.chainIdToFeeBps(remoteChainId) + const curFeeBp = feeConfig[0] + const curEnabled = feeConfig[1] + const needChange = curFeeBp !== feeBpConfig.feeBp || curEnabled !== feeBpConfig.enabled + + // function setFeeBp(uint16 _dstChainId, bool _enabled, uint16 _feeBp) + const functionName = "setFeeBp" + const params = ["uint16", "bool", "uint16"] + const args = [remoteChainId, feeBpConfig.enabled, feeBpConfig.feeBp] + const calldata = localContract.interface.encodeFunctionData(functionName, args) + + const tx: any = { + needChange, + chainId: getLayerZeroChainId(localNetwork), + contractName: localContractNameOrAddress, + functionName: functionName, + args: args, + calldata: localContract.interface.encodeFunctionData(functionName, args), + } + if (tx.needChange) { + tx.diff = JSON.stringify({ + feeBp: { oldFeeBpValue: curFeeBp, newFeeBpValue: feeBpConfig.feeBp, oldEnabledFee: curEnabled, newEnabledFee: feeBpConfig.enabled }, + }) + } + return [tx] +} diff --git a/packages/ua-utils/tsconfig.json b/packages/ua-utils/tsconfig.json new file mode 100644 index 000000000..9a02e76ca --- /dev/null +++ b/packages/ua-utils/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "exclude": ["dist", "node_modules"], + "compilerOptions": { + "types": ["node", "mocha"] + } +} diff --git a/packages/ua-utils/tsup.config.ts b/packages/ua-utils/tsup.config.ts new file mode 100644 index 000000000..16d909226 --- /dev/null +++ b/packages/ua-utils/tsup.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "tsup" + +export default defineConfig({ + entry: ["src/index.ts"], + outDir: "./dist", + clean: true, + dts: true, + sourcemap: true, + splitting: false, + treeshake: true, + format: ["esm", "cjs"], +}) diff --git a/src/checkWireAllConfig.ts b/src/checkWireAllConfig.ts deleted file mode 100644 index 5cd344574..000000000 --- a/src/checkWireAllConfig.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { getContract, getContractAt, getLayerZeroChainId } from "./utils/crossChainHelper"; -import { logError } from "./utils/helpers"; -import { LZ_APP_ABI } from "./constants/abi"; - -export default async function (taskArgs: any, hre: any) { - const localNetworks = taskArgs.chains.split(","); - const remoteNetworks = localNetworks; - const contractAddresses = taskArgs?.addresses?.split(","); - - let checkWireAllConfigObj: { [key: string]: any } = {} - await Promise.all( - localNetworks.map(async (localNetwork: string, localIndex: number) => { - checkWireAllConfigObj[localNetwork] = { - useCustomAdapterParams: {}, - withdrawalFeeBps: {}, - minDstGasLookup: {}, - trustedRemoteLookup: {} - } - - checkWireAllConfigObj[localNetwork].useCustomAdapterParams["useCustomAdapterParams"] = ""; - checkWireAllConfigObj[localNetwork].withdrawalFeeBps["withdrawalFeeBps"] = ""; - checkWireAllConfigObj[localNetwork].minDstGasLookup[localNetwork] = ""; - checkWireAllConfigObj[localNetwork].trustedRemoteLookup[localNetwork] = ""; - - let localContractNameOrAddress: any; - if(taskArgs?.proxyChain && taskArgs?.proxyContract && localNetwork == taskArgs?.proxyChain) { - localContractNameOrAddress = taskArgs?.proxyContract - } else if(taskArgs?.contract !== undefined) { - localContractNameOrAddress = taskArgs.contract - } else if(contractAddresses !== undefined) { - localContractNameOrAddress = contractAddresses[localIndex] - } - - if (localContractNameOrAddress === undefined && contractAddresses === undefined) { - logError(`Invalid wire up config for localContractNameOrAddress.`); - return; - } - - if(taskArgs.u) checkWireAllConfigObj[localNetwork].useCustomAdapterParams["useCustomAdapterParams"] = await getUseCustomAdapterParams(hre, localNetwork, localContractNameOrAddress); - if(taskArgs.wfb) checkWireAllConfigObj[localNetwork].withdrawalFeeBps["withdrawalFeeBps"] = await getWithdrawalFeeBps(hre, localNetwork, localContractNameOrAddress); - - await Promise.all( - remoteNetworks.map(async (remoteNetwork: string, remoteIndex: number) => { - - let remoteContractNameOrAddress; - if(taskArgs?.proxyChain && taskArgs?.proxyContract && remoteNetwork == taskArgs?.proxyChain) { - remoteContractNameOrAddress = taskArgs?.proxyContract - } else if(taskArgs?.contract !== undefined) { - remoteContractNameOrAddress = taskArgs.contract - } else if(contractAddresses !== undefined) { - remoteContractNameOrAddress = contractAddresses[remoteIndex] - } - - if (remoteContractNameOrAddress === undefined && contractAddresses === undefined) { - logError(`Invalid wire up config for remoteContractNameOrAddress.`); - return; - } - - if(taskArgs.t) checkWireAllConfigObj[localNetwork].trustedRemoteLookup[remoteNetwork] = await getTrustedRemote(hre, localNetwork, localContractNameOrAddress, remoteNetwork, remoteContractNameOrAddress); - if(taskArgs.m) checkWireAllConfigObj[localNetwork].minDstGasLookup[remoteNetwork] = await getMinDstGas(hre, localNetwork, localContractNameOrAddress, remoteNetwork); - }) - ); - }) - ); - - if(taskArgs.u) { - console.log("Use Custom Adapter Params Table"); - let useCustomAdapterParamsTable = Object.keys(checkWireAllConfigObj).map((network) => ({ [network]: checkWireAllConfigObj[network].useCustomAdapterParams})) - console.table(useCustomAdapterParamsTable.reduce(((r, c) => Object.assign(r, c)), {})); - } - - if(taskArgs.wfb) { - console.log("Withdrawal Fee Bps Lookup Table"); - let minDstGasLookupTable = Object.keys(checkWireAllConfigObj).map((network) => ({ [network]: checkWireAllConfigObj[network].withdrawalFeeBps})) - console.table(minDstGasLookupTable.reduce(((r, c) => Object.assign(r, c)), {})); - } - - if(taskArgs.t) { - console.log("Trusted Remote Lookup Table"); - let trustedRemoteLookupTable = Object.keys(checkWireAllConfigObj).map((network) => ({ [network]: checkWireAllConfigObj[network].trustedRemoteLookup})) - console.table(trustedRemoteLookupTable.reduce(((r, c) => Object.assign(r, c)), {})); - } - - if(taskArgs.m) { - console.log("Min Dst Gas Lookup Table"); - let minDstGasLookupTable = Object.keys(checkWireAllConfigObj).map((network) => ({ [network]: checkWireAllConfigObj[network].minDstGasLookup})) - console.table(minDstGasLookupTable.reduce(((r, c) => Object.assign(r, c)), {})); - } -} - -async function getUseCustomAdapterParams(hre: any, localNetwork: string, localContractNameOrAddress: string): Promise { - let localContract; - if (hre.ethers.utils.isAddress(localContractNameOrAddress)) { - localContract = await getContractAt(hre, localNetwork, LZ_APP_ABI, localContractNameOrAddress); - } else { - localContract = await getContract(hre, localNetwork, localContractNameOrAddress); - } - return await localContract.useCustomAdapterParams(); -} - -async function getWithdrawalFeeBps(hre: any, localNetwork: string, localContractNameOrAddress: string): Promise { - let localContract; - if (hre.ethers.utils.isAddress(localContractNameOrAddress)) { - localContract = await getContractAt(hre, localNetwork, LZ_APP_ABI, localContractNameOrAddress); - } else { - localContract = await getContract(hre, localNetwork, localContractNameOrAddress); - } - let withdrawalFeeBps; - try { - withdrawalFeeBps = await localContract.withdrawalFeeBps(); - } catch(e) { - withdrawalFeeBps = "N/A" - } - return withdrawalFeeBps; -} - - -async function getMinDstGas(hre: any, localNetwork: string, localContractNameOrAddress: string, remoteNetwork: string,): Promise { - let localContract; - if (hre.ethers.utils.isAddress(localContractNameOrAddress)) { - localContract = await getContractAt(hre, localNetwork, LZ_APP_ABI, localContractNameOrAddress); - } else { - localContract = await getContract(hre, localNetwork, localContractNameOrAddress); - } - let packetTypes: any; - if(localNetwork === remoteNetwork) return ""; - const remoteChainId = getLayerZeroChainId(remoteNetwork); - let minGasPk_0 = await localContract.minDstGasLookup(remoteChainId, 0) - let minGasPk_1 = await localContract.minDstGasLookup(remoteChainId, 1) - packetTypes = { - "PT_0": minGasPk_0.toString(), - "PT_1": minGasPk_1.toString() - } - return packetTypes; -} - -async function getTrustedRemote(hre: any, localNetwork: string, localContractNameOrAddress: string, remoteNetwork: string, remoteContractNameOrAddress: string): Promise { - let localContract; - if (hre.ethers.utils.isAddress(localContractNameOrAddress)) { - localContract = await getContractAt(hre, localNetwork, LZ_APP_ABI, localContractNameOrAddress); - } else { - localContract = await getContract(hre, localNetwork, localContractNameOrAddress); - } - - let remoteContract; - if (hre.ethers.utils.isAddress(remoteContractNameOrAddress)) { - remoteContract = await getContractAt(hre, remoteNetwork, LZ_APP_ABI, remoteContractNameOrAddress); - } else { - remoteContract = await getContract(hre, remoteNetwork, remoteContractNameOrAddress); - } - - const remoteContractAddress = await remoteContract.address; - const desiredTrustedRemote = hre.ethers.utils.solidityPack(["bytes"], [remoteContractAddress + localContract.address.substring(2)]); - const remoteChainId = getLayerZeroChainId(remoteNetwork) - const currentTrustedRemote = await localContract.trustedRemoteLookup(remoteChainId); - return currentTrustedRemote != desiredTrustedRemote ? (localNetwork === remoteNetwork ? "" : "🟥") : "🟩"; -} \ No newline at end of file diff --git a/src/constants/abi.ts b/src/constants/abi.ts deleted file mode 100644 index accce71b2..000000000 --- a/src/constants/abi.ts +++ /dev/null @@ -1,31 +0,0 @@ -export const ENDPOINT_ABI = [ - "function defaultSendVersion() view returns (uint16)", - "function defaultReceiveVersion() view returns (uint16)", - "function defaultSendLibrary() view returns (address)", - "function defaultReceiveLibraryAddress() view returns (address)", - "function uaConfigLookup(address) view returns (tuple(uint16 sendVersion, uint16 receiveVersion, address receiveLibraryAddress, address sendLibrary))" -]; - -export const MESSAGING_LIBRARY_ABI = [ - "function appConfig(address, uint16) view returns (tuple(uint16 inboundProofLibraryVersion, uint64 inboundBlockConfirmations, address relayer, uint16 outboundProofType, uint64 outboundBlockConfirmations, address oracle))", - "function defaultAppConfig(uint16) view returns (tuple(uint16 inboundProofLibraryVersion, uint64 inboundBlockConfirmations, address relayer, uint16 outboundProofType, uint64 outboundBlockConfirmations, address oracle))" -]; - - -export const USER_APPLICATION_ABI = [ - "function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config)", - "function setSendVersion(uint16 _version)", "function setReceiveVersion(uint16 _version)" -]; - -export const LZ_APP_ABI = [ - "function setTrustedRemote(uint16 _srcChainId, bytes calldata _path)", - "function setUseCustomAdapterParams(bool _useCustomAdapterParams)", - "function setDefaultFeeBp(uint16 _feeBp)", - "function setFeeBp(uint16 _dstChainId, bool _enabled, uint16 _feeBp)", - "function setMinDstGas(uint16 _dstChainId, uint16 _packetType, uint _minGas)", - "function useCustomAdapterParams() public view returns (bool) ", - "function trustedRemoteLookup(uint16) public view returns (bytes)", - "function minDstGasLookup(uint16, uint16) public view returns (uint)", - "function defaultFeeBp() public view returns (uint16)", - "function chainIdToFeeBps(uint16) public view returns (uint16, bool)", -]; \ No newline at end of file diff --git a/src/constants/node-url.json b/src/constants/node-url.json deleted file mode 100644 index 877489c1f..000000000 --- a/src/constants/node-url.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "mainnet": { - "arbitrum-mainnet": "https://endpoints.omniatech.io/v1/arbitrum/one/public", - "avalanche-mainnet": "https://avalanche-c-chain.publicnode.com", - "bsc-mainnet": "https://binance.llamarpc.com", - "celo-mainnet": "https://1rpc.io/celo", - "coredao-mainnet": "https://rpc.coredao.org", - "dexalot-mainnet": "https://subnets.avax.network/dexalot/mainnet/rpc", - "dfk-mainnet": "https://dfkchain.api.onfinality.io/public", - "dos-mainnet": "https://main.doschain.com", - "ethereum-mainnet": "https://eth.llamarpc.com", - "fantom-mainnet": "https://fantom.publicnode.com", - "fuse-mainnet": "https://rpc.fuse.io", - "gnosis-mainnet": "https://gnosis-mainnet.public.blastapi.io", - "goerli-mainnet": "https://ethereum-goerli.publicnode.com", - "harmony-mainnet": "https://1rpc.io/one", - "klaytn-mainnet": "https://1rpc.io/klay", - "meter-mainnet": "https://rpc.meter.io", - "metis-mainnet": "https://metis-mainnet.public.blastapi.io", - "moonbeam-mainnet": "https://1rpc.io/glmr", - "moonriver-mainnet": "https://rpc.api.moonriver.moonbeam.network", - "okx-mainnet": "https://oktc-mainnet.public.blastapi.io", - "optimism-mainnet": "https://1rpc.io/op", - "polygon-mainnet": "https://polygon.llamarpc.com", - "sepolia-mainnet": "https://rpc-sepolia.rockx.com", - "shrapnel-mainnet": "https://subnets.avax.network/shrapnel/mainnet/rpc", - "tenet-mainnet": "https://rpc.tenet.org", - "telos-mainnet": "https://rpc1.eu.telos.net/evm", - "zkpolygon-mainnet": "https://zkevm-rpc.com", - "zksync-mainnet": "https://zksync.drpc.org" - }, - "testnet": { - "aavegotchi": "", - "arbitrum-testnet": "https://arbitrum-goerli.publicnode.com", - "avalanche-testnet": "https://avalanche-fuji-c-chain.publicnode.com", - "base-testnet": "https://base-goerli.publicnode.com", - "bsc-testnet": "https://bsc-testnet.publicnode.com", - "canto": "https://testnet-archive.plexnode.wtf", - "cathay": "", - "celo-testnet": "https://alfajores-forno.celo-testnet.org", - "coredao-testnet": "https://rpc.test.btcs.network", - "dexalot-testnet": "https://subnets.avax.network/dexalot/testnet/rpc", - "dfk-testnet": "https://subnets.avax.network/defi-kingdoms/dfk-chain-testnet/rpc", - "dos-testnet": "https://test.doschain.com", - "ethereum-testnet": "https://ethereum-goerli.publicnode.com", - "fantom-testnet": "https://fantom-testnet.publicnode.com", - "fuse-testnet": "https://rpc.fusespark.io", - "gnosis-testnet": "https://rpc.chiadochain.net", - "harmony-testnet": "https://api.s0.ps.hmny.io", - "kava-testnet": "https://evm.testnet.kava.io", - "klaytn-testnet": "https://public-node-api.klaytnapi.com/v1/baobab", - "meter-testnet": "https://rpctest.meter.io", - "metis-testnet": "https://goerli.gateway.metisdevops.link", - "moonbeam-testnet": "https://rpc.api.moonbase.moonbeam.network", - "okx-testnet": "https://exchaintestrpc.okex.org", - "optimism-testnet": "https://optimism-goerli.publicnode.com", - "orderly-testnet": "", - "polygon-testnet": "https://polygon-mumbai-bor.publicnode.com", - "scroll-testnet": "https://scroll-testnet.blockpi.network/v1/rpc/public", - "sepolia-testnet": "https://api.zan.top/node/v1/eth/sepolia/public", - "shrapnel-testnet": "https://subnets.avax.network/shrapnel/testnet/rpc", - "tenet-testnet": "https://rpc.testnet.tenet.org", - "telos-testnet": "https://testnet.telos.net/evm", - "linea-testnet": "https://rpc.goerli.linea.build", - "zkpolygon": "https://rpc.public.zkevm-test.net", - "zksync-testnet": "https://testnet.era.zksync.dev" - } -} \ No newline at end of file diff --git a/src/getConfig.ts b/src/getConfig.ts deleted file mode 100644 index 3691dded2..000000000 --- a/src/getConfig.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { getDeploymentAddresses, getApplicationConfig, getEndpointAddress } from "./utils/crossChainHelper"; -import { ENDPOINT_ABI, MESSAGING_LIBRARY_ABI } from "./constants/abi"; -import { logError } from "./utils/helpers"; - -export default async (taskArgs: any, hre: any) => { - const network = hre.network.name; - const remoteNetworks = taskArgs.remoteNetworks.split(","); - const contractName = taskArgs.name; - let contractAddress = taskArgs.address; - - if (!contractName && !contractAddress) { - logError("Provide contract name or address"); - return; - } - - if (contractName && !contractAddress) { - contractAddress = getDeploymentAddresses(network, false)[contractName]; - if (!contractAddress) { - logError(`Deployment information isn't found for ${contractName}`); - return; - } - } - - const endpoint = await hre.ethers.getContractAt(ENDPOINT_ABI, getEndpointAddress(network)); - const appConfig = await endpoint.uaConfigLookup(contractAddress); - const sendVersion = appConfig.sendVersion; - const receiveVersion = appConfig.receiveVersion; - const sendLibraryAddress = sendVersion === 0 ? await endpoint.defaultSendLibrary() : appConfig.sendLibrary; - const sendLibrary = await hre.ethers.getContractAt(MESSAGING_LIBRARY_ABI, sendLibraryAddress); - let receiveLibrary: any; - - if (sendVersion !== receiveVersion){ - const receiveLibraryAddress = receiveVersion === 0 ? await endpoint.defaultReceiveLibraryAddress() : appConfig.receiveLibraryAddress; - receiveLibrary = await hre.ethers.getContractAt(MESSAGING_LIBRARY_ABI, receiveLibraryAddress); - } - - const remoteConfig: any[] = await Promise.all( - remoteNetworks.map(async (remoteNetwork: string) => { - if (network === remoteNetwork) return; - return await getApplicationConfig(remoteNetwork, sendLibrary, receiveLibrary, contractAddress); - }) - ) - - console.log("Network ", network); - console.log("Application address", contractAddress); - console.log("Send version ", sendVersion); - console.log("Receive version ", receiveVersion); - console.table(remoteConfig); -} \ No newline at end of file diff --git a/src/getDefaultConfig.ts b/src/getDefaultConfig.ts deleted file mode 100644 index b3990bf9b..000000000 --- a/src/getDefaultConfig.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { ethers } from "ethers"; -import { getProvider, getLayerZeroChainId, getEndpointAddress } from "./utils/crossChainHelper"; -const { ENDPOINT_ABI, MESSAGING_LIBRARY_ABI } = require("./constants/abi") - -export default async (taskArgs: any, hre: any) => { - const networks = taskArgs.networks.split(","); - - const configByNetwork = await Promise.all( - networks.map(async (network: string) => { - const provider = getProvider(hre, network); - console.log() - const endpoint = new ethers.Contract(getEndpointAddress(network), ENDPOINT_ABI, provider); - const sendVersion = await endpoint.defaultSendVersion(); - const receiveVersion = await endpoint.defaultReceiveVersion(); - const sendLibraryAddress = await endpoint.defaultSendLibrary(); - const messagingLibrary = new ethers.Contract(sendLibraryAddress, MESSAGING_LIBRARY_ABI, provider); - const config = await messagingLibrary.defaultAppConfig(getLayerZeroChainId(network)); - - return { - network, - sendVersion, - receiveVersion, - inboundProofLibraryVersion: config.inboundProofLibraryVersion, - inboundBlockConfirmations: config.inboundBlockConfirmations.toNumber(), - relayer: config.relayer, - outboundProofType: config.outboundProofType, - outboundBlockConfirmations: config.outboundBlockConfirmations.toNumber(), - oracle: config.oracle, - }; - }) - ) - - console.table(configByNetwork); -} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index eabc3b568..000000000 --- a/src/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { task, types } from "hardhat/config"; -import wireAll from './wireAll'; -import setConfig from './setConfig'; -import getDefaultConfig from './getDefaultConfig'; -import getConfig from './getConfig'; -import checkWireAllConfig from './checkWireAllConfig'; - -task("setConfig", "sets Send and Receive Messaging Library versions and a custom application config for contracts implementing ILayerZeroUserApplicationConfig interface", setConfig) - .addParam("configPath", "the application config file path") - .addOptionalParam("name", "name of the deployed contracts. Should be specified if the same contract deployed on different chains and the deployment information is located in the deployments folder") - .addOptionalParam("address", "address of the deployed contracts. Should be specified if the contract address is the same on all chains") - .addOptionalParam("gnosisConfigPath", "the path to a file with Gnosis config. If specified, the transactions will be sent to Gnosis") - .addOptionalParam("gasLimit", "override execution gasLimit") - -task("getDefaultConfig", "outputs the default Send and Receive Messaging Library versions and the default application config", getDefaultConfig) - .addParam("networks", "comma separated list of networks") - -task("getConfig", "outputs the application's Send and Receive Messaging Library versions and the config for remote networks", getConfig) - .addParam("remoteNetworks", "comma separated list of remote networks") - .addOptionalParam("name", "name of the deployed contract. Should be specified only if the deployment information is located in the deployments folder") - .addOptionalParam("address", "the contract address"); - -task("checkWireAllConfig", "", checkWireAllConfig) - .addParam("e", "the environment ie: mainnet, testnet or sandbox") - .addFlag("u", "show use custom adapter params") - .addFlag("t", "show trusted remote lookup") - .addFlag("m", "show min destination gas lookup") - .addParam("chains", "comma separated list of networks") - .addOptionalParam("contract", "name of contract") - .addOptionalParam("addresses", "addresses of contracts in same order as chains") - .addOptionalParam("proxyContract", "name of proxy contract") - .addOptionalParam("proxyChain", "name of proxy chain") - -task("wireAll", "", wireAll) - .addParam("e", "the environment ie: mainnet, testnet or sandbox") - .addOptionalParam("noPrompt", "no prompt", false, types.boolean) - .addOptionalParam("configPath", "Optional config path. Default: ./constants/wireUpConfig.json", "./constants/wireUpConfig.json", types.string) - .addOptionalParam("n", "send to gnosis", false, types.boolean) - .addOptionalParam("gasLimit", "override execution gasLimit") - .addOptionalParam("gnosisConfigPath", "Optional config path. Default: ./constants/gnosisConfig.json", "./constants/gnosisConfig.json", types.string) diff --git a/src/setConfig.ts b/src/setConfig.ts deleted file mode 100644 index 2112d164d..000000000 --- a/src/setConfig.ts +++ /dev/null @@ -1,236 +0,0 @@ -import { promptToProceed, writeToCsv, logError, logWarning, printTransactions, logSuccess, configExist, getConfig } from "./utils/helpers"; -import { executeTransaction, executeGnosisTransactions, getContractAt, getWalletContractAt, Transaction, getContract, getWalletContract, getApplicationConfig, getEndpointAddress, getLayerZeroChainId } from "./utils/crossChainHelper"; -import { ENDPOINT_ABI, MESSAGING_LIBRARY_ABI, USER_APPLICATION_ABI } from "./constants/abi"; -import { utils } from "ethers"; - -// Application config types from UltraLightNodeV2 contract -const CONFIG_TYPE_INBOUND_PROOF_LIBRARY_VERSION = 1; -const CONFIG_TYPE_INBOUND_BLOCK_CONFIRMATIONS = 2; -const CONFIG_TYPE_RELAYER = 3; -const CONFIG_TYPE_OUTBOUND_PROOF_TYPE = 4; -const CONFIG_TYPE_OUTBOUND_BLOCK_CONFIRMATIONS = 5; -const CONFIG_TYPE_ORACLE = 6; - -export default async (taskArgs: any, hre: any) => { - const configPath = taskArgs.configPath; - const name = taskArgs.name; - const address = taskArgs.address; - const gnosisConfigPath = taskArgs.gnosisConfigPath; - const sendToGnosis = gnosisConfigPath && configExist(gnosisConfigPath); - - if (!configExist(configPath)) { - logError(`User application config file is not found`); - return; - } - - const config = getConfig(configPath); - const networks = Object.keys(config); - - const transactionByNetwork: any[] = ( - await Promise.all( - networks.map(async (network: string) => { - const transactions: Transaction[] = []; - const chainId = getLayerZeroChainId(network); - const networkConfig = config[network]; - - if (!networkConfig) return; - const endpoint = await getContractAt(hre, network, ENDPOINT_ABI, getEndpointAddress(network)); - - const contractName = networkConfig.name ?? name; - const contractAddress = networkConfig.address ?? address; - - if (!contractName && !contractAddress) { - logWarning(`Contract information isn't found for ${network}`); - return; - } - - const app = contractName ? await getContract(hre, network, contractName) : await getContractAt(hre, network, USER_APPLICATION_ABI, contractAddress); - const appConfig = await endpoint.uaConfigLookup(app.address); - const sendLibraryAddress = appConfig.sendVersion === 0 ? await endpoint.defaultSendLibrary() : appConfig.sendLibrary; - const sendLibrary = await getContractAt(hre, network, MESSAGING_LIBRARY_ABI, sendLibraryAddress); - let receiveLibrary: any; - - if (appConfig.sendVersion !== appConfig.receiveVersion) { - const receiveLibraryAddress = appConfig.receiveVersion === 0 ? await endpoint.defaultReceiveLibraryAddress() : appConfig.receiveLibraryAddress; - receiveLibrary = await getContractAt(hre, network, MESSAGING_LIBRARY_ABI, receiveLibraryAddress); - } - - if (networkConfig.sendVersion) { - transactions.push(...(await setSendVersion(chainId, app, appConfig.sendVersion, networkConfig.sendVersion))); - } - - if (networkConfig.receiveVersion) { - transactions.push(...(await setReceiveVersion(chainId, app, appConfig.receiveVersion, networkConfig.receiveVersion))); - } - - const remoteConfigs = networkConfig.remoteConfigs; - const newSendVersion = networkConfig.sendVersion ?? appConfig.sendVersion; - const newReceiveVersion = networkConfig.receiveVersion ?? appConfig.receiveVersion; - - if (remoteConfigs) { - await Promise.all( - remoteConfigs.map(async (newConfig: any) => { - if (newConfig.remoteChain === network) return; - - const oldConfig = await getApplicationConfig(newConfig.remoteChain, sendLibrary, receiveLibrary, app.address); - const remoteChainId = getLayerZeroChainId(newConfig.remoteChain); - - if (newConfig.inboundProofLibraryVersion) { - transactions.push(...(await setConfig(newReceiveVersion, chainId, remoteChainId, app, CONFIG_TYPE_INBOUND_PROOF_LIBRARY_VERSION, "uint16", oldConfig.inboundProofLibraryVersion, newConfig.inboundProofLibraryVersion))); - } - - if (newConfig.inboundBlockConfirmations) { - transactions.push(...(await setConfig(newReceiveVersion, chainId, remoteChainId, app, CONFIG_TYPE_INBOUND_BLOCK_CONFIRMATIONS, "uint64", oldConfig.inboundBlockConfirmations, newConfig.inboundBlockConfirmations))); - } - - if (newConfig.relayer) { - transactions.push(...(await setConfig(newSendVersion, chainId, remoteChainId, app, CONFIG_TYPE_RELAYER, "address", oldConfig.relayer, newConfig.relayer))); - } - - if (newConfig.outboundProofType) { - transactions.push(...(await setConfig(newSendVersion, chainId, remoteChainId, app, CONFIG_TYPE_OUTBOUND_PROOF_TYPE, "uint16", oldConfig.outboundProofType, newConfig.outboundProofType))); - } - - if (newConfig.outboundBlockConfirmations) { - transactions.push(...(await setConfig(newSendVersion, chainId, remoteChainId, app, CONFIG_TYPE_OUTBOUND_BLOCK_CONFIRMATIONS, "uint64", oldConfig.outboundBlockConfirmations, newConfig.outboundBlockConfirmations))); - } - - if (newConfig.oracle) { - transactions.push(...(await setConfig(newSendVersion, chainId, remoteChainId, app, CONFIG_TYPE_ORACLE, "address", oldConfig.oracle, newConfig.oracle))); - } - }) - ); - } - return { - network: network, - transactions, - }; - }) - ) - ) as any[]; - - const totalTransactionsNeedingChange = transactionByNetwork.reduce((count, { transactions }) => { - count += transactions.filter((tx: Transaction) => tx.needChange).length; - return count; - }, 0); - - if (totalTransactionsNeedingChange == 0) { - console.log("No changes needed"); - return; - } - - const columns = ["chainId", "remoteChainId", "contractAddress", "functionName", "args", "diff"]; - printTransactions(columns, transactionByNetwork); - writeToCsv("setConfigTransactions.csv", columns, transactionByNetwork); - await promptToProceed(`Would you like to proceed with the above instructions ${sendToGnosis ? "in Gnosis?" : "?"}`); - - const errors: any[] = []; - const print: any = {}; - let previousPrintLine = 0; - const printResult = () => { - if (previousPrintLine) { - process.stdout.moveCursor(0, -previousPrintLine); - } - if (Object.keys(print)) { - previousPrintLine = Object.keys(print).length + 4; - console.table(Object.keys(print).map((network) => ({ network, ...print[network] }))); - } - }; - - if (sendToGnosis) { - const gnosisConfig = getConfig(gnosisConfigPath); - await Promise.all( - transactionByNetwork.map(async ({ network, transactions }) => { - const transactionToCommit = transactions.filter((transaction: Transaction) => transaction.needChange); - print[network] = print[network] || { requests: "1/1" }; - print[network].current = `executeGnosisTransactions: ${transactionToCommit}`; - try { - await executeGnosisTransactions(hre, network, gnosisConfig, transactionToCommit); - print[network].requests = "1/1"; - } catch (err: any) { - errors.push({ network, err }); - print[network].current = err.message; - print[network].err = true; - } - }) - ) - printResult(); - if (errors.length) { - logError(`\nFinished with ${errors.length === 1 ? "an error" : `${errors.length} errors`}`, false); - errors.forEach((x) => { - console.log(x.err); - console.log(); - }) - } - } else { - await Promise.all( - transactionByNetwork.map(async ({ network, transactions }) => { - const transactionToCommit = transactions.filter((transaction: any) => transaction.needChange); - const networkConfig = config[network]; - const contractName = networkConfig.name ?? name; - const contractAddress = networkConfig.address ?? address; - const app = contractName ? await getWalletContract(hre, network, contractName) : await getWalletContractAt(hre, network, USER_APPLICATION_ABI, contractAddress); - - let successTx = 0; - print[network] = print[network] || { requests: `${successTx}/${transactionToCommit.length}` }; - for (let transaction of transactionToCommit) { - print[network].current = `${transaction.functionName}(${transaction.args})`; - printResult(); - try { - const gasLimit = taskArgs.gasLimit; - const tx = await executeTransaction(hre, network, transaction, gasLimit, app); - print[network].past = `${transaction.functionName}(${transaction.args}) (${tx.transactionHash})`; - successTx++; - print[network].requests = `${successTx}/${transactionToCommit.length}`; - printResult(); - } catch (err: any) { - logError(`Failing to call ${transaction.contractName}.${transaction.functionName} on ${network} with an error ${err}`); - errors.push({ network, err }); - print[network].current = err; - print[network].err = true; - printResult(); - break; - } - } - }) - ); - } - - if (!errors.length) { - logSuccess("\nFinished successfully"); - } -} - -const setSendVersion = async (chainId: string, app: any, oldSendVersion: any, newSendVersion: any): Promise => { - const needChange = oldSendVersion !== newSendVersion; - const contractAddress = app.address; - const functionName = "setSendVersion"; - const args = [newSendVersion]; - const calldata = app.interface.encodeFunctionData(functionName, args); - const diff = needChange ? { oldValue: oldSendVersion, newValue: newSendVersion } : undefined; - - return [{ needChange, chainId, contractAddress, functionName, args, calldata, diff }]; -} - -const setReceiveVersion = async (chainId: string, app: any, currentReceiveVersion: any, newReceiveVersion: any): Promise => { - const needChange = currentReceiveVersion !== newReceiveVersion; - const contractAddress = app.address; - const functionName = "setReceiveVersion"; - const args = [newReceiveVersion]; - const calldata = app.interface.encodeFunctionData(functionName, args); - const diff = needChange ? { oldValue: currentReceiveVersion, newValue: newReceiveVersion } : undefined; - - return [{ needChange, chainId, contractAddress, functionName, args, calldata, diff }]; -} - -const setConfig = async (configVersion: any, chainId: string, remoteChainId: string, app: any, configType: number, configValueType: string, oldValue: any, newValue: any): Promise => { - const newConfig = utils.defaultAbiCoder.encode([configValueType], [newValue]); - const contractAddress = app.address; - const functionName = "setConfig"; - const args = [configVersion, remoteChainId, configType, newConfig]; - const needChange = oldValue !== newValue; - const calldata = app.interface.encodeFunctionData(functionName, args); - const diff = needChange ? { oldValue, newValue } : undefined; - - return [{ needChange, chainId, remoteChainId, contractAddress, functionName, args, calldata, diff }]; -} \ No newline at end of file diff --git a/src/utils/crossChainHelper.ts b/src/utils/crossChainHelper.ts deleted file mode 100644 index 791865652..000000000 --- a/src/utils/crossChainHelper.ts +++ /dev/null @@ -1,355 +0,0 @@ -import * as ethers from "ethers"; -import { Contract, ContractReceipt } from "ethers"; -import EthersAdapter from "@gnosis.pm/safe-ethers-lib"; -import SafeServiceClient from "@gnosis.pm/safe-service-client"; -import Safe from "@gnosis.pm/safe-core-sdk"; -import { LZ_APP_ABI } from "../constants/abi"; -import { LZ_ENDPOINTS } from "../constants/endpoints"; -import { MainnetEndpointId, TestnetEndpointId, SandboxEndpointId } from "@layerzerolabs/lz-definitions"; -import { promptToProceed, arrayToCsv, getConfig } from "./helpers"; -const path = require("path"); -const fs = require("fs"); -import { writeFile } from "fs/promises"; - - -export interface ExecutableTransaction { - contractName: string; - functionName: string; - args: any[]; - txArgs?: any; -} - -export interface Transaction { - needChange: boolean; - chainId: string; - remoteChainId?: string; - contractAddress: string; - functionName: string; - args: any[]; - calldata?: string; - diff?: { [key: string]: { newValue: any; oldValue: any } }; -} - -export interface NetworkTransactions { - network: string; - transactions: Transaction[]; -} - -const providerByNetwork: { [name: string]: ethers.providers.JsonRpcProvider } = {}; -export const getProvider = (hre: any, network: string) => { - if (!providerByNetwork[network]) { - const networkUrl = hre.config.networks[network].url; - providerByNetwork[network] = new ethers.providers.JsonRpcProvider(networkUrl); - } - return providerByNetwork[network]; -} - -export const getWallet = (index: number) => ethers.Wallet.fromMnemonic(process.env.MNEMONIC || "", `m/44'/60'/0'/0/${index}`) - -const connectedWallets: { [key: string]: any } = {}; -export const getConnectedWallet = (hre: any, network: string, walletIndex: number) => { - const key = `${network}-${walletIndex}`; - if (!connectedWallets[key]) { - const provider = getProvider(hre, network); - const wallet = getWallet(walletIndex); - connectedWallets[key] = wallet.connect(provider); - } - return connectedWallets[key]; -}; - -const deploymentAddresses: { [key: string]: string } = {}; -export const getDeploymentAddress = (network: string, contractName: string) => { - const key = `${network}-${contractName}`; - if (!deploymentAddresses[key]) { - deploymentAddresses[key] = getDeploymentAddresses(network)[contractName]; - } - if (!deploymentAddresses[key]) { - throw Error(`contract ${key} not found for network: ${network}`); - } - return deploymentAddresses[key]; -} - -const contracts: { [key: string]: any } = {}; -export const getContract = async (hre: any, network: string, contractName: string) => { - if (network == "hardhat") { - return await hre.ethers.getContract(contractName); - } - - const key = `${network}-${contractName}`; - if (!contracts[key]) { - const contractAddress = getDeploymentAddress(network, contractName); - const provider = getProvider(hre, network); - const contractFactory = await getContractFactory(hre, contractName); - const contract = contractFactory.attach(contractAddress); - contracts[key] = contract.connect(provider); - } - return contracts[key]; -} - -export const getContractAt = async (hre: any, network: string, abi: any, contractAddress: string) => { - const key = `${network}-${contractAddress}`; - if (!contracts[key]) { - const provider = getProvider(hre, network); - const contract = new Contract(contractAddress, abi, provider); - contracts[key] = contract.connect(provider); - } - return contracts[key]; -} - -export const getWalletContract = async (hre: any, network: string, contractName: string, walletIndex: number = 0) => { - const contract = await getContract(hre, network, contractName); - const wallet = getConnectedWallet(hre, network, walletIndex); - return contract.connect(wallet); -} - -export const getWalletContractAt = async (hre: any, network: string, abi: any, contractAddress: string, walletIndex = 0) => { - const contract = await getContractAt(hre, network, abi, contractAddress); - const wallet = getConnectedWallet(hre, network, walletIndex); - return contract.connect(wallet); -}; - -const contractFactories: { [name: string]: ethers.ContractFactory } = {}; -const getContractFactory = async (hre: any, contractName: string) => { - if (!contractFactories[contractName]) { - contractFactories[contractName] = await hre.ethers.getContractFactory(contractName); - } - return contractFactories[contractName]; -} - -export const executeTransaction = async (hre: any, network: string, transaction: any, gasLimit?: any, contract?: any, abi?: any): Promise => { - let walletContract; - if (contract) { - walletContract = contract; - } else if(hre.ethers.utils.isAddress(transaction.contractName)) { - walletContract = await getWalletContractAt(hre, network, abi, transaction.contractName, 0); - } else { - walletContract = await getWalletContract(hre, network, transaction.contractName, 0); - } - const gasPrice = await getProvider(hre, network).getGasPrice(); - const finalGasPrice = gasPrice.mul(10).div(8); - return await ( - await walletContract[transaction.functionName](...transaction.args, { - gasPrice: finalGasPrice, - gasLimit: gasLimit !== undefined ? gasLimit : 200000, - ...transaction.txArgs, - }) - ).wait() -} - -export async function executeTransactions(hre: any, taskArgs: any, transactionBynetwork: any[]) { - const columns = ["needChange", "chainId", "remoteChainId", "contractName", "functionName", "args", "diff", "calldata"]; - - const data = transactionBynetwork.reduce((acc, { network, transactions }) => { - transactions.forEach((transaction: any) => { - acc.push([ - network, - ...columns.map((key) => { - if (typeof transaction[key] === "object") { - return JSON.stringify(transaction[key]); - } else { - return transaction[key]; - } - }), - ]); - }); - return acc; - }, [] as any); - await writeFile("./transactions.csv", arrayToCsv(["network"].concat(columns), data)); - - console.log("Full configuration is written at:"); - console.log(`file:/${process.cwd()}/transactions.csv`); - - const errs: any[] = []; - const print: any = {}; - let previousPrintLine = 0; - const printResult = () => { - if (previousPrintLine) { - process.stdout.moveCursor(0, -previousPrintLine); - } - if (Object.keys(print)) { - previousPrintLine = Object.keys(print).length + 4; - console.table(Object.keys(print).map((network) => ({ network, ...print[network] }))); - } - }; - - if (taskArgs.n) { - await promptToProceed("Would you like to Submit to gnosis?", taskArgs.noPrompt); - const gnosisConfig = getConfig(taskArgs.gnosisConfigPath); - await Promise.all( - transactionBynetwork.map(async ({ network, transactions }) => { - const transactionToCommit = transactions.filter((transaction: any) => transaction.needChange); - print[network] = print[network] || { requests: `1/1` }; - print[network].current = `executeGnosisTransactions: ${transactionToCommit}`; - try { - await executeGnosisTransactions(hre, network, gnosisConfig, transactionToCommit); - print[network].requests = `1/1`; - printResult(); - } catch (err: any) { - console.log(`Failing calling executeGnosisTransactions for network ${network} with err ${err}`); - errs.push({ - network, - err, - }); - print[network].current = err.message; - print[network].err = true; - printResult(); - } - }) - ); - } else { - await promptToProceed("Would you like to run these transactions?", taskArgs.noPrompt); - await Promise.all( - transactionBynetwork.map(async ({ network, transactions }) => { - const transactionToCommit = transactions.filter((transaction: any) => transaction.needChange); - - let successTx = 0; - print[network] = print[network] || { requests: `${successTx}/${transactionToCommit.length}` }; - for (let transaction of transactionToCommit) { - print[network].current = `${transaction.contractName}.${transaction.functionName}`; - printResult(); - try { - const gasLimit = taskArgs.gasLimit; - const tx = await executeTransaction(hre, network, transaction, gasLimit); - print[network].past = `${transaction.contractName}.${transaction.functionName} (${tx.transactionHash})`; - successTx++; - print[network].requests = `${successTx}/${transactionToCommit.length}`; - printResult(); - } catch (err: any) { - console.log(`Failing calling ${transaction.contractName}.${transaction.functionName} for network ${network} with err ${err}`); - console.log(err); - errs.push({ - network, - err, - }); - print[network].current = err; - print[network].err = true; - printResult(); - break; - } - } - }) - ); - } - - if (!errs.length) { - console.log("Wired all networks successfully"); - } else { - console.log(errs); - } -} - - -export const executeGnosisTransactions = async (hre: any, network: string, gnosisConfig: any, transactions: Transaction[]) => { - const signer = await getConnectedWallet(hre, network, 0); - if (!gnosisConfig[network]) { - throw Error(`Gnosis for ${network} not found or not supported`); - } - - const { safeAddress, url } = gnosisConfig[network]; - console.log(`safeAddress[${safeAddress}] url[${url}]`); - - const safeService = new SafeServiceClient(url); - const ethAdapter = new EthersAdapter({ - ethers: hre.ethers, - signerOrProvider: signer, - }); - - const safeSdk: Safe = await Safe.create({ ethAdapter, safeAddress }); - const gnosisTransactions = transactions.map((tx) => ({ to: tx.contractAddress, data: tx.calldata!, value: "0" })); - const nonce = await safeService.getNextNonce(safeAddress); - const safeTransaction = await safeSdk.createTransaction(gnosisTransactions, { nonce }); - - await safeSdk.signTransaction(safeTransaction); - const safeTxHash = await safeSdk.getTransactionHash(safeTransaction); - await safeService.proposeTransaction({ - safeAddress, - safeTransaction, - safeTxHash, - senderAddress: signer.address, - }); -} - -export const getDeploymentAddresses = (network: string, throwIfMissing: boolean = true): any => { - const deploymentAddresses: { [key: string]: any } = {}; - const DEPLOYMENT_PATH = path.resolve("deployments"); - - if (!fs.existsSync(DEPLOYMENT_PATH)) { - return deploymentAddresses; - } - - let folderName = network; - if (network === "hardhat") { - folderName = "localhost"; - } - const networkFolderName = fs.readdirSync(DEPLOYMENT_PATH).filter((f:string) => f === folderName)[0]; - if (networkFolderName === undefined) { - if(throwIfMissing) { - throw new Error("missing deployment files for endpoint " + folderName); - } - return deploymentAddresses; - } - - const networkFolderPath = path.resolve(DEPLOYMENT_PATH, folderName); - const files = fs.readdirSync(networkFolderPath).filter((f: string) => f.includes(".json")); - files.forEach((file: string) => { - const filepath = path.resolve(networkFolderPath, file); - const data = JSON.parse(fs.readFileSync(filepath)); - const contractName = file.split(".")[0]; - deploymentAddresses[contractName] = data.address; - }); - - return deploymentAddresses; -} - -export const getApplicationConfig = async (remoteNetwork: string, sendLibrary: any, receiveLibrary: any, applicationAddress: string) => { - const remoteChainId = getLayerZeroChainId(remoteNetwork); - const sendConfig = await sendLibrary.appConfig(applicationAddress, remoteChainId); - let inboundProofLibraryVersion = sendConfig.inboundProofLibraryVersion; - let inboundBlockConfirmations = sendConfig.inboundBlockConfirmations.toNumber(); - - if (receiveLibrary) { - const receiveConfig = await receiveLibrary.appConfig(applicationAddress, remoteChainId); - inboundProofLibraryVersion = receiveConfig.inboundProofLibraryVersion; - inboundBlockConfirmations = receiveConfig.inboundBlockConfirmations.toNumber(); - } - return { - remoteNetwork, - inboundProofLibraryVersion, - inboundBlockConfirmations, - relayer: sendConfig.relayer, - outboundProofType: sendConfig.outboundProofType, - outboundBlockConfirmations: sendConfig.outboundBlockConfirmations.toNumber(), - oracle: sendConfig.oracle, - }; -}; - -export const getEndpointAddress = (network: string): string => { return LZ_ENDPOINTS[network] } - -// expecting "chain-environment" eg. "ethereum-mainnet", "ethereum-testnet", "ethereum-sandbox" -export const getLayerZeroChainId = (network: string): string => { - const [chainName, environment] = network.split("-"); - const chainIdEnum = getChainIdEnum(chainName, environment) - if(environment == "mainnet") { - return MainnetEndpointId[chainIdEnum as any] - } else if(environment == "testnet") { - return TestnetEndpointId[chainIdEnum as any] - } else if(environment == "sandbox") { - return SandboxEndpointId[chainIdEnum as any] - } else { - throw new Error("cannot find chainId"); - } -} - -const getChainIdEnum = (chainName: string, environment: string,): string => { - return `${chainName.split("-")[0].toUpperCase()}_${environment.toUpperCase()}` -} - -export const getContractInstance = async (hre: any, network: string, contractNameOrAddress: string) => { - let contract; - if (hre.ethers.utils.isAddress(contractNameOrAddress)) { - contract = await getContractAt(hre, network, LZ_APP_ABI, contractNameOrAddress); - } else { - contract = await getContract(hre, network, contractNameOrAddress); - } - return contract; -} \ No newline at end of file diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts deleted file mode 100644 index f0b4186a5..000000000 --- a/src/utils/helpers.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { cli } from "cli-ux"; -import fs from "fs"; -import chalk from "chalk"; -import { Transaction, NetworkTransactions } from "./crossChainHelper"; - -export const promptToProceed = async (msg: string, noPrompt: boolean = false) => { - if (!noPrompt) { - const proceed = await cli.prompt(`${msg} Y/N`); - if (!["y", "yes"].includes(proceed.toLowerCase())) { - process.exit(0); - } - } -} - -export const arrayToCsv = (columns: string[], data: any) => - columns.join(",").concat("\n").concat(data.map((row: any) => row - .map(String) // convert every value to String - .map((v: any) => (v === "undefined" ? "" : v)) - .map((v: any) => v.replace(/"/g, '""')) // escape double colons - .map((v: any) => `"${v}"`) // quote it - .join(",") // comma-separated - ) - .join("\r\n") // rows starting on new lines -) - -export const writeToCsv = async (fileName: string, columns: string[], transactionByNetwork: any[]) => { - const data = transactionByNetwork.reduce((acc, { network, transactions }) => { - transactions.forEach((tx: any) => { - acc.push([ - network, - ...columns.map((key) => { - const keys = key.split("/"); - for (const field in tx) { - if (keys.includes(field)) { - if (typeof tx[field] === "object") { - return JSON.stringify(tx[field]); - } else { - return tx[field]; - } - } - } - }), - ]); - }); - return acc; - }, []); - fs.writeFileSync(fileName, arrayToCsv(["network"].concat(columns), data)); - console.log(`Transactions are written to: ${chalk.green(fileName)}`); -} - -export const printTransactions = (columns: string[], transactionByNetwork: NetworkTransactions[]) => { - let totalTransactionsNeedingChange: number = 0; - - transactionByNetwork.forEach(({ network, transactions }) => { - console.log(`\n================================================`); - console.log(chalk.green(`${network.toUpperCase()} transactions`)); - console.log(`================================================`); - const transactionsNeedingChange = transactions.filter((tx: Transaction) => tx.needChange); - totalTransactionsNeedingChange += transactionsNeedingChange.length; - - if (!transactionsNeedingChange.length) { - console.log("No changes needed\n"); - } else { - console.table(transactionsNeedingChange, columns); - } - }) -} - -export const logError = (message: string, includeErrorText: boolean = true) => console.log(chalk.red(includeErrorText ? `ERROR: ${message}` : message)); -export const logWarning = (message: string) => console.log(chalk.yellow(`WARNING: ${message}`)); -export const logSuccess = (message: string) => console.log(chalk.green(`${message}`)); -export const configExist = (fileName: string) => fs.existsSync(fileName); -export const getConfig = (fileName: string) => JSON.parse(fs.readFileSync(fileName, "utf-8")); \ No newline at end of file diff --git a/src/utils/wireAllHelpers.ts b/src/utils/wireAllHelpers.ts deleted file mode 100644 index 1727bd0cb..000000000 --- a/src/utils/wireAllHelpers.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { Transaction, getLayerZeroChainId, getContractInstance } from "./crossChainHelper"; - -export async function setUseCustomAdapterParams(hre: any, localNetwork: string, localContractNameOrAddress: string, useCustom: boolean): Promise { - const localContract = await getContractInstance(hre, localNetwork, localContractNameOrAddress) - const cur = await localContract.useCustomAdapterParams(); - const needChange = cur !== useCustom; - - // function setUseCustomAdapterParams(bool _useCustomAdapterParams) - const functionName = "setUseCustomAdapterParams"; - const params = ["bool"]; - let args = [useCustom]; - - const tx: any = { - needChange, - chainId: getLayerZeroChainId(localNetwork), - contractName: localContractNameOrAddress, - functionName: functionName, - args: args, - calldata: localContract.interface.encodeFunctionData(functionName, args) - }; - if (tx.needChange) { - tx.diff = JSON.stringify({ useCustomAdapterParams: { oldValue: cur, newValue: useCustom } }); - } - return [tx]; -} - -export async function setMinDstGas(hre: any, localNetwork: string, localContractNameOrAddress: string, minDstGasConfig: any, remoteChainId: string): Promise { - const txns: Transaction[] = []; - const localContract = await getContractInstance(hre, localNetwork, localContractNameOrAddress) - const packetTypes = Object.keys(minDstGasConfig); - for(const packet of packetTypes) { - let packetType = parseInt(packet.at(-1) as string); - const minGas = minDstGasConfig[packet]; - const cur = (await localContract.minDstGasLookup(remoteChainId, packetType)).toNumber(); - const needChange = cur !== minGas; - - // function setMinDstGas(uint16 _dstChainId, uint16 _packetType, uint _minGas) - const functionName = "setMinDstGas"; - const params = ["uint16", "uint16", "uint256"]; - let args = [remoteChainId, packetType, minGas]; - - const tx: any = { - needChange, - chainId: getLayerZeroChainId(localNetwork), - contractName: localContractNameOrAddress, - functionName, - args: args, - calldata: localContract.interface.encodeFunctionData(functionName, args) - }; - if (tx.needChange) { - tx.diff = JSON.stringify({ oldValue: cur, newValue: minGas }); - } - txns.push(tx); - } - return txns; -} - -export async function setTrustedRemote(hre: any, localNetwork: string, localContractNameOrAddress: string, remoteNetwork: string, remoteContractNameOrAddress: string): Promise { - const localContract = await getContractInstance(hre, localNetwork, localContractNameOrAddress) - const remoteContract = await getContractInstance(hre, remoteNetwork, remoteContractNameOrAddress) - - const remoteContractAddress = await remoteContract.address; - const desiredTrustedRemote = hre.ethers.utils.solidityPack(["bytes"], [remoteContractAddress + localContract.address.substring(2)]); - - const remoteChainId = getLayerZeroChainId(remoteNetwork); - const cur = await localContract.trustedRemoteLookup(remoteChainId); - const needChange = cur != desiredTrustedRemote; - - // function setTrustedRemote(uint16 _srcChainId, bytes calldata _path) - const functionName = "setTrustedRemote"; - const params = ["uint16", "bytes"]; - let args = [remoteChainId, desiredTrustedRemote]; - - const tx: any = { - needChange, - chainId: getLayerZeroChainId(localNetwork), - contractName: localContractNameOrAddress, - functionName: functionName, - args: args, - calldata: localContract.interface.encodeFunctionData(functionName, args) - }; - if (tx.needChange) { - tx.diff = JSON.stringify({ trustedRemote: { oldValue: cur, newValue: desiredTrustedRemote } }); - } - return [tx]; -} - -export function getContractNameOrAddress(chain: string, WIRE_UP_CONFIG: any) { - let contractNameOrAddress; - const proxyChain = WIRE_UP_CONFIG?.proxyContractConfig?.chain; - if (proxyChain === chain) { - if (WIRE_UP_CONFIG?.proxyContractConfig?.name) { - contractNameOrAddress = WIRE_UP_CONFIG?.proxyContractConfig?.name; - } else if (WIRE_UP_CONFIG?.proxyContractConfig?.address) { - contractNameOrAddress = WIRE_UP_CONFIG?.proxyContractConfig?.address; - } - } else { - if (WIRE_UP_CONFIG?.contractConfig?.name) { - contractNameOrAddress = WIRE_UP_CONFIG?.contractConfig?.name; - } else if (WIRE_UP_CONFIG?.chainConfig?.[chain]?.name) { - contractNameOrAddress = WIRE_UP_CONFIG?.chainConfig?.[chain]?.name; - } else if (WIRE_UP_CONFIG?.chainConfig?.[chain]?.address) { - contractNameOrAddress = WIRE_UP_CONFIG?.chainConfig?.[chain]?.address; - } - } - return contractNameOrAddress; -} \ No newline at end of file diff --git a/src/wireAll.ts b/src/wireAll.ts deleted file mode 100644 index 3374f8099..000000000 --- a/src/wireAll.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { Transaction, NetworkTransactions, getContractInstance, getLayerZeroChainId, executeTransactions } from "./utils/crossChainHelper"; -import { configExist, getConfig, logError, printTransactions } from "./utils/helpers"; -import { setUseCustomAdapterParams, setMinDstGas, setTrustedRemote, getContractNameOrAddress } from "./utils/wireAllHelpers"; - -export default async function (taskArgs: any, hre: any) { - if (!configExist(taskArgs.configPath)) { - logError(`Wire up config file is not found.`); - return; - } - - if (taskArgs.n && !configExist(taskArgs.gnosisConfigPath)) { - logError(`Gnosis config file not found`); - return; - } - - const deployer = (await hre.getNamedAccounts()).deployer; - console.log(`CURRENT SIGNER: ${deployer}`); - - const WIRE_UP_CONFIG = getConfig(taskArgs.configPath); - const localNetworks = Object.keys(WIRE_UP_CONFIG?.chainConfig) - - console.log(`************************************************`); - console.log(`Computing diff`); - console.log(`************************************************`); - - let transactionByNetwork: NetworkTransactions[] = await Promise.all( - localNetworks.map(async (localNetwork) => { - // array of transactions to execute - const transactions: Transaction[] = []; - const remoteNetworks = Object.keys(WIRE_UP_CONFIG?.chainConfig?.[localNetwork]?.remoteNetworkConfig) - - let localContractNameOrAddress = getContractNameOrAddress(localNetwork, WIRE_UP_CONFIG); - if (localContractNameOrAddress === undefined) { - logError(`Invalid wire up config for localContractNameOrAddress.`); - return; - } - - // check if useCustomAdapterParams needs to be set - const useCustomAdapterParams = WIRE_UP_CONFIG?.chainConfig?.[localNetwork]?.useCustomAdapterParams; - if (useCustomAdapterParams !== undefined) { - transactions.push(...(await setUseCustomAdapterParams(hre, localNetwork, localContractNameOrAddress, useCustomAdapterParams))); - } - - // check if defaultFeeBp needs to be set - const defaultFeeBp = WIRE_UP_CONFIG?.chainConfig?.[localNetwork]?.defaultFeeBp; - if (defaultFeeBp !== undefined) { - transactions.push(...(await setDefaultFeeBp(hre, localNetwork, localContractNameOrAddress, defaultFeeBp))); - } - - await Promise.all( - remoteNetworks.map(async (remoteNetwork) => { - // skip wiring itself - if (localNetwork === remoteNetwork) return; - const proxyChain = WIRE_UP_CONFIG?.proxyContractConfig?.chain; - - let remoteContractNameOrAddress = getContractNameOrAddress(remoteNetwork, WIRE_UP_CONFIG); - if (remoteContractNameOrAddress === undefined) { - logError(`Invalid wire up config for remoteContractNameOrAddress.`); - return; - } - - // setTrustedRemote - transactions.push(...(await setTrustedRemote(hre, localNetwork, localContractNameOrAddress, remoteNetwork, remoteContractNameOrAddress))); - - // setFeeBp - if (WIRE_UP_CONFIG?.chainConfig?.[localNetwork]?.remoteNetworkConfig?.[remoteNetwork]?.feeBpConfig !== undefined) { - transactions.push(...(await setFeeBp(hre, localNetwork, localContractNameOrAddress, WIRE_UP_CONFIG?.chainConfig?.[localNetwork]?.remoteNetworkConfig?.[remoteNetwork].feeBpConfig, getLayerZeroChainId(remoteNetwork)))); - } - - // setMinDstGas - if (WIRE_UP_CONFIG?.chainConfig?.[localNetwork]?.remoteNetworkConfig?.[remoteNetwork]?.minDstGasConfig !== undefined) { - transactions.push(...(await setMinDstGas(hre, localNetwork, localContractNameOrAddress, WIRE_UP_CONFIG?.chainConfig?.[localNetwork]?.remoteNetworkConfig?.[remoteNetwork].minDstGasConfig, getLayerZeroChainId(remoteNetwork)))); - } - }) - ); - return { - network: localNetwork, - transactions: transactions, - }; - }) - ) as NetworkTransactions[]; - - const noChanges = transactionByNetwork.reduce((acc, { transactions }) => { - acc += transactions.filter((transaction) => transaction.needChange).length; - return acc; - }, 0); - if (noChanges == 0) { - //early return - console.log("No changes needed"); - return; - } - const columns = ["needChange", "chainId", "contractName", "functionName", "args", "diff"]; - printTransactions(columns, transactionByNetwork); - await executeTransactions(hre, taskArgs, transactionByNetwork); -}; - -async function setDefaultFeeBp(hre: any, localNetwork: string, localContractNameOrAddress: string, defaultFeeBp: number): Promise { - const localContract = await getContractInstance(hre, localNetwork, localContractNameOrAddress) - const cur = await localContract.defaultFeeBp(); - const needChange = cur !== defaultFeeBp; - - // function setDefaultFeeBp(uint16 _feeBp) - const functionName = "setDefaultFeeBp"; - const params = ["uint16"]; - let args = [defaultFeeBp]; - - const tx: any = { - needChange, - chainId: getLayerZeroChainId(localNetwork), - contractName: localContractNameOrAddress, - functionName: functionName, - args: args, - calldata: localContract.interface.encodeFunctionData(functionName, args) - }; - if (tx.needChange) { - tx.diff = JSON.stringify({ defaultFeeBp: { oldValue: cur, newValue: defaultFeeBp } }); - } - return [tx]; -} - -async function setFeeBp(hre: any, localNetwork: string, localContractNameOrAddress: string, feeBpConfig: any, remoteChainId: string): Promise { - const localContract = await getContractInstance(hre, localNetwork, localContractNameOrAddress) - const feeConfig = await localContract.chainIdToFeeBps(remoteChainId); - const curFeeBp = feeConfig[0]; - const curEnabled = feeConfig[1]; - const needChange = curFeeBp !== feeBpConfig.feeBp || curEnabled !== feeBpConfig.enabled; - - // function setFeeBp(uint16 _dstChainId, bool _enabled, uint16 _feeBp) - const functionName = "setFeeBp"; - const params = ["uint16", "bool", "uint16"]; - const args = [remoteChainId, feeBpConfig.enabled, feeBpConfig.feeBp]; - const calldata = localContract.interface.encodeFunctionData(functionName, args); - - const tx: any = { - needChange, - chainId: getLayerZeroChainId(localNetwork), - contractName: localContractNameOrAddress, - functionName: functionName, - args: args, - calldata: localContract.interface.encodeFunctionData(functionName, args) - }; - if (tx.needChange) { - tx.diff = JSON.stringify({ feeBp: { oldFeeBpValue: curFeeBp, newFeeBpValue: feeBpConfig.feeBp, oldEnabledFee: curEnabled, newEnabledFee: feeBpConfig.enabled } }); - } - return [tx]; -} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index a39af537a..3aea6981c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,26 +1,28 @@ { - "compilerOptions": { - "target": "esnext", - "composite": false, - "declaration": true, - "declarationMap": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "inlineSources": false, - "isolatedModules": false, - "module": "commonjs", - "moduleResolution": "node", - "noUnusedLocals": false, - "noUnusedParameters": false, - "preserveWatchOutput": true, - "skipLibCheck": true, - "strict": true, - "noImplicitAny": true, - "sourceMap": true, - "outDir": "./dist", - "types": ["node"], - "lib": ["ES2015"] - }, - "exclude": ["dist", "node_modules"], - "include": ["./src"] -} \ No newline at end of file + "compilerOptions": { + "target": "es2018", + "module": "esnext", + "lib": ["es2021", "dom"], + "importHelpers": true, + "noEmit": true, + "declaration": true, + "sourceMap": true, + "strict": true, + "noImplicitAny": false, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "moduleResolution": "node", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "allowJs": true, + "resolveJsonModule": true, + "types": ["node"] + } +} diff --git a/tsup.config.ts b/tsup.config.ts deleted file mode 100644 index d643b69e0..000000000 --- a/tsup.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineConfig } from "tsup"; - -export default defineConfig({ - entry: ["src/index.ts"], - outDir: "./dist", - clean: true, - dts: true, - sourcemap: true, - splitting: false, - treeshake: true, - format: ["esm", "cjs"], -}); \ No newline at end of file diff --git a/turbo.json b/turbo.json new file mode 100644 index 000000000..9ef0f0d4a --- /dev/null +++ b/turbo.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://turbo.build/schema.json", + "pipeline": { + "build": { + "outputs": ["dist/**"], + "dependsOn": ["^build"] + }, + "clean": { + "outputs": [], + "cache": false + }, + "dev": { + "cache": false, + "outputs": [], + "persistent": true + }, + "lint": { + "cache": false + }, + "test": { + "outputs": [], + "dependsOn": ["^build"] + } + } +} diff --git a/yarn.lock b/yarn.lock index bc1c7ffe3..7f9d55e8d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,240 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@babel/code-frame@^7.0.0": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== + dependencies: + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/runtime@^7.20.1", "@babel/runtime@^7.5.5": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" + integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== + dependencies: + regenerator-runtime "^0.14.0" + +"@changesets/apply-release-plan@^6.1.4": + version "6.1.4" + resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-6.1.4.tgz#09293256090737ecd2f683842d6d732034a5e3c8" + integrity sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/config" "^2.3.1" + "@changesets/get-version-range-type" "^0.3.2" + "@changesets/git" "^2.0.0" + "@changesets/types" "^5.2.1" + "@manypkg/get-packages" "^1.1.3" + detect-indent "^6.0.0" + fs-extra "^7.0.1" + lodash.startcase "^4.4.0" + outdent "^0.5.0" + prettier "^2.7.1" + resolve-from "^5.0.0" + semver "^7.5.3" + +"@changesets/assemble-release-plan@^5.2.4": + version "5.2.4" + resolved "https://registry.yarnpkg.com/@changesets/assemble-release-plan/-/assemble-release-plan-5.2.4.tgz#d42fd63f4297a2e630e8e0a49f07d4ff5f5ef7bc" + integrity sha512-xJkWX+1/CUaOUWTguXEbCDTyWJFECEhmdtbkjhn5GVBGxdP/JwaHBIU9sW3FR6gD07UwZ7ovpiPclQZs+j+mvg== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/errors" "^0.1.4" + "@changesets/get-dependents-graph" "^1.3.6" + "@changesets/types" "^5.2.1" + "@manypkg/get-packages" "^1.1.3" + semver "^7.5.3" + +"@changesets/changelog-git@^0.1.14": + version "0.1.14" + resolved "https://registry.yarnpkg.com/@changesets/changelog-git/-/changelog-git-0.1.14.tgz#852caa7727dcf91497c131d05bc2cd6248532ada" + integrity sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA== + dependencies: + "@changesets/types" "^5.2.1" + +"@changesets/cli@^2.26.2": + version "2.26.2" + resolved "https://registry.yarnpkg.com/@changesets/cli/-/cli-2.26.2.tgz#8914dd6ef3ea425a7d5935f6c35a8b7ccde54e45" + integrity sha512-dnWrJTmRR8bCHikJHl9b9HW3gXACCehz4OasrXpMp7sx97ECuBGGNjJhjPhdZNCvMy9mn4BWdplI323IbqsRig== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/apply-release-plan" "^6.1.4" + "@changesets/assemble-release-plan" "^5.2.4" + "@changesets/changelog-git" "^0.1.14" + "@changesets/config" "^2.3.1" + "@changesets/errors" "^0.1.4" + "@changesets/get-dependents-graph" "^1.3.6" + "@changesets/get-release-plan" "^3.0.17" + "@changesets/git" "^2.0.0" + "@changesets/logger" "^0.0.5" + "@changesets/pre" "^1.0.14" + "@changesets/read" "^0.5.9" + "@changesets/types" "^5.2.1" + "@changesets/write" "^0.2.3" + "@manypkg/get-packages" "^1.1.3" + "@types/is-ci" "^3.0.0" + "@types/semver" "^7.5.0" + ansi-colors "^4.1.3" + chalk "^2.1.0" + enquirer "^2.3.0" + external-editor "^3.1.0" + fs-extra "^7.0.1" + human-id "^1.0.2" + is-ci "^3.0.1" + meow "^6.0.0" + outdent "^0.5.0" + p-limit "^2.2.0" + preferred-pm "^3.0.0" + resolve-from "^5.0.0" + semver "^7.5.3" + spawndamnit "^2.0.0" + term-size "^2.1.0" + tty-table "^4.1.5" + +"@changesets/config@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@changesets/config/-/config-2.3.1.tgz#3d4a1dc866c3623375180b30f69fccdf0e3efebf" + integrity sha512-PQXaJl82CfIXddUOppj4zWu+987GCw2M+eQcOepxN5s+kvnsZOwjEJO3DH9eVy+OP6Pg/KFEWdsECFEYTtbg6w== + dependencies: + "@changesets/errors" "^0.1.4" + "@changesets/get-dependents-graph" "^1.3.6" + "@changesets/logger" "^0.0.5" + "@changesets/types" "^5.2.1" + "@manypkg/get-packages" "^1.1.3" + fs-extra "^7.0.1" + micromatch "^4.0.2" + +"@changesets/errors@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@changesets/errors/-/errors-0.1.4.tgz#f79851746c43679a66b383fdff4c012f480f480d" + integrity sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q== + dependencies: + extendable-error "^0.1.5" + +"@changesets/get-dependents-graph@^1.3.6": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.6.tgz#5e19e7b0bfbc7dc38e1986eaaa7016ff377ed888" + integrity sha512-Q/sLgBANmkvUm09GgRsAvEtY3p1/5OCzgBE5vX3vgb5CvW0j7CEljocx5oPXeQSNph6FXulJlXV3Re/v3K3P3Q== + dependencies: + "@changesets/types" "^5.2.1" + "@manypkg/get-packages" "^1.1.3" + chalk "^2.1.0" + fs-extra "^7.0.1" + semver "^7.5.3" + +"@changesets/get-release-plan@^3.0.17": + version "3.0.17" + resolved "https://registry.yarnpkg.com/@changesets/get-release-plan/-/get-release-plan-3.0.17.tgz#8aabced2795ffeae864696b60ee3031f8a94c5f3" + integrity sha512-6IwKTubNEgoOZwDontYc2x2cWXfr6IKxP3IhKeK+WjyD6y3M4Gl/jdQvBw+m/5zWILSOCAaGLu2ZF6Q+WiPniw== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/assemble-release-plan" "^5.2.4" + "@changesets/config" "^2.3.1" + "@changesets/pre" "^1.0.14" + "@changesets/read" "^0.5.9" + "@changesets/types" "^5.2.1" + "@manypkg/get-packages" "^1.1.3" + +"@changesets/get-version-range-type@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@changesets/get-version-range-type/-/get-version-range-type-0.3.2.tgz#8131a99035edd11aa7a44c341cbb05e668618c67" + integrity sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg== + +"@changesets/git@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@changesets/git/-/git-2.0.0.tgz#8de57649baf13a86eb669a25fa51bcad5cea517f" + integrity sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/errors" "^0.1.4" + "@changesets/types" "^5.2.1" + "@manypkg/get-packages" "^1.1.3" + is-subdir "^1.1.1" + micromatch "^4.0.2" + spawndamnit "^2.0.0" + +"@changesets/logger@^0.0.5": + version "0.0.5" + resolved "https://registry.yarnpkg.com/@changesets/logger/-/logger-0.0.5.tgz#68305dd5a643e336be16a2369cb17cdd8ed37d4c" + integrity sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw== + dependencies: + chalk "^2.1.0" + +"@changesets/parse@^0.3.16": + version "0.3.16" + resolved "https://registry.yarnpkg.com/@changesets/parse/-/parse-0.3.16.tgz#f8337b70aeb476dc81745ab3294022909bc4a84a" + integrity sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg== + dependencies: + "@changesets/types" "^5.2.1" + js-yaml "^3.13.1" + +"@changesets/pre@^1.0.14": + version "1.0.14" + resolved "https://registry.yarnpkg.com/@changesets/pre/-/pre-1.0.14.tgz#9df73999a4d15804da7381358d77bb37b00ddf0f" + integrity sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/errors" "^0.1.4" + "@changesets/types" "^5.2.1" + "@manypkg/get-packages" "^1.1.3" + fs-extra "^7.0.1" + +"@changesets/read@^0.5.9": + version "0.5.9" + resolved "https://registry.yarnpkg.com/@changesets/read/-/read-0.5.9.tgz#a1b63a82b8e9409738d7a0f9cc39b6d7c28cbab0" + integrity sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/git" "^2.0.0" + "@changesets/logger" "^0.0.5" + "@changesets/parse" "^0.3.16" + "@changesets/types" "^5.2.1" + chalk "^2.1.0" + fs-extra "^7.0.1" + p-filter "^2.1.0" + +"@changesets/types@^4.0.1": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@changesets/types/-/types-4.1.0.tgz#fb8f7ca2324fd54954824e864f9a61a82cb78fe0" + integrity sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw== + +"@changesets/types@^5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@changesets/types/-/types-5.2.1.tgz#a228c48004aa8a93bce4be2d1d31527ef3bf21f6" + integrity sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg== + +"@changesets/write@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@changesets/write/-/write-0.2.3.tgz#baf6be8ada2a67b9aba608e251bfea4fdc40bc63" + integrity sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/types" "^5.2.1" + fs-extra "^7.0.1" + human-id "^1.0.2" + prettier "^2.7.1" + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -119,6 +353,38 @@ resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" + integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.53.0": + version "8.53.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.53.0.tgz#bea56f2ed2b5baea164348ff4d5a879f6f81f20d" + integrity sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w== + "@ethereumjs/rlp@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" @@ -543,6 +809,25 @@ "@gnosis.pm/safe-core-sdk-types" "^1.0.0" node-fetch "^2.6.6" +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== + dependencies: + "@humanwhocodes/object-schema" "^2.0.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== + "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" @@ -583,10 +868,10 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@layerzerolabs/lz-definitions@latest": - version "1.5.50" - resolved "https://registry.npmjs.org/@layerzerolabs/lz-definitions/-/lz-definitions-1.5.50.tgz#73bc7ce2f3417be83d83ef5861e8b4647b5ac458" - integrity sha512-lFV2Kdge1Q2RXmkXFs09q7sdL39CJ3UF0m0vFqaGmBHOqeSrIpDeoZBd/kcwTQkdmE2j5Gii8mBaD9b/sv9Nuw== +"@layerzerolabs/lz-definitions@1.5.58": + version "1.5.58" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-definitions/-/lz-definitions-1.5.58.tgz#f462cb5d16bfa652892880ad946f7eeb5e97cf22" + integrity sha512-i5BAAh4v60gZqHck5oAxR0dGToKSR2h+avGq5c41UrpktPdzskZvdCKFS9JPdRjvvlrHBYDcwNUCdP9qvzl7JA== dependencies: tiny-invariant "^1.3.1" @@ -595,6 +880,28 @@ resolved "https://registry.npmjs.org/@layerzerolabs/lz-sdk/-/lz-sdk-0.0.12.tgz#b41b5b266d41f89c0a720de48581e0a8910180a8" integrity sha512-ldf+H8SVUF9EtaQg9y7XzGDP95lH4T/UIYVglL2DrNBe5CBiWm5wkL/5SnGpTgbLHbw60eLaGxQH/wmO6txAiQ== +"@manypkg/find-root@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@manypkg/find-root/-/find-root-1.1.0.tgz#a62d8ed1cd7e7d4c11d9d52a8397460b5d4ad29f" + integrity sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA== + dependencies: + "@babel/runtime" "^7.5.5" + "@types/node" "^12.7.1" + find-up "^4.1.0" + fs-extra "^8.1.0" + +"@manypkg/get-packages@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@manypkg/get-packages/-/get-packages-1.1.3.tgz#e184db9bba792fa4693de4658cfb1463ac2c9c47" + integrity sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A== + dependencies: + "@babel/runtime" "^7.5.5" + "@changesets/types" "^4.0.1" + "@manypkg/find-root" "^1.1.0" + fs-extra "^8.1.0" + globby "^11.0.0" + read-yaml-file "^1.1.0" + "@metamask/eth-sig-util@^4.0.0": version "4.0.1" resolved "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" @@ -646,7 +953,7 @@ resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -906,6 +1213,18 @@ resolved "https://registry.npmjs.org/@oclif/screen/-/screen-3.0.7.tgz#1db88a8d9f143d3c96dab9e6bbb630f298ba6256" integrity sha512-jQBPHcMh5rcIPKdqA6xlzioLOmkaVnjg2MVyjMzBKV8hDhLWNSiZqx7NAWXpP70v2LFvGdVoV8BSbK9iID3eHg== +"@pkgr/utils@^2.3.1": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" + integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw== + dependencies: + cross-spawn "^7.0.3" + fast-glob "^3.3.0" + is-glob "^4.0.3" + open "^9.1.0" + picocolors "^1.0.0" + tslib "^2.6.0" + "@scure/base@~1.1.0": version "1.1.3" resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f" @@ -1013,6 +1332,13 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" +"@solidity-parser/parser@^0.16.2": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.2.tgz#42cb1e3d88b3e8029b0c9befff00b634cd92d2fa" + integrity sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg== + dependencies: + antlr4ts "^0.5.0-alpha.4" + "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" @@ -1052,11 +1378,38 @@ dependencies: "@types/node" "*" +"@types/is-ci@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/is-ci/-/is-ci-3.0.4.tgz#6f883e86e32f47747acbc6929a623d4e6fd71915" + integrity sha512-AkCYCmwlXeuH89DagDCzvCAyltI2v9lh3U3DqSg/GrBYoReAaWwxfXCqMx9UV5MajLZ4ZFwZzV4cABGIxk2XRw== + dependencies: + ci-info "^3.1.0" + +"@types/json-schema@^7.0.12": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + "@types/lru-cache@^5.1.0": version "5.1.1" resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== +"@types/minimist@^1.2.0": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== + +"@types/mocha@^10.0.1": + version "10.0.4" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.4.tgz#b5331955ebca216604691fd4fcd2dbdc2bd559a4" + integrity sha512-xKU7bUjiFTIttpWaIZ9qvgg+22O1nmbA+HRxdlR+u6TWsGfmFdXrheJoK4fFxrHNVIOBDvDNKZG+LYBpMHpX3w== + "@types/node@*": version "20.8.6" resolved "https://registry.npmjs.org/@types/node/-/node-20.8.6.tgz#0dbd4ebcc82ad0128df05d0e6f57e05359ee47fa" @@ -1064,11 +1417,23 @@ dependencies: undici-types "~5.25.1" -"@types/node@^12.12.6": +"@types/node@^12.12.6", "@types/node@^12.7.1": version "12.20.55" - resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== +"@types/node@~18.18.9": + version "18.18.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.9.tgz#5527ea1832db3bba8eb8023ce8497b7d3f299592" + integrity sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ== + dependencies: + undici-types "~5.26.4" + +"@types/normalize-package-data@^2.4.0": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== + "@types/pbkdf2@^3.0.0": version "3.1.0" resolved "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" @@ -1088,6 +1453,101 @@ dependencies: "@types/node" "*" +"@types/semver@^7.5.0": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.5.tgz#deed5ab7019756c9c90ea86139106b0346223f35" + integrity sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg== + +"@typescript-eslint/eslint-plugin@^6.9.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz#cfe2bd34e26d2289212946b96ab19dcad64b661a" + integrity sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.10.0" + "@typescript-eslint/type-utils" "6.10.0" + "@typescript-eslint/utils" "6.10.0" + "@typescript-eslint/visitor-keys" "6.10.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^6.9.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.10.0.tgz#578af79ae7273193b0b6b61a742a2bc8e02f875a" + integrity sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog== + dependencies: + "@typescript-eslint/scope-manager" "6.10.0" + "@typescript-eslint/types" "6.10.0" + "@typescript-eslint/typescript-estree" "6.10.0" + "@typescript-eslint/visitor-keys" "6.10.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.10.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz#b0276118b13d16f72809e3cecc86a72c93708540" + integrity sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg== + dependencies: + "@typescript-eslint/types" "6.10.0" + "@typescript-eslint/visitor-keys" "6.10.0" + +"@typescript-eslint/type-utils@6.10.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz#1007faede067c78bdbcef2e8abb31437e163e2e1" + integrity sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg== + dependencies: + "@typescript-eslint/typescript-estree" "6.10.0" + "@typescript-eslint/utils" "6.10.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.10.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.10.0.tgz#f4f0a84aeb2ac546f21a66c6e0da92420e921367" + integrity sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg== + +"@typescript-eslint/typescript-estree@6.10.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz#667381eed6f723a1a8ad7590a31f312e31e07697" + integrity sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg== + dependencies: + "@typescript-eslint/types" "6.10.0" + "@typescript-eslint/visitor-keys" "6.10.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.10.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.10.0.tgz#4d76062d94413c30e402c9b0df8c14aef8d77336" + integrity sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.10.0" + "@typescript-eslint/types" "6.10.0" + "@typescript-eslint/typescript-estree" "6.10.0" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.10.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz#b9eaf855a1ac7e95633ae1073af43d451e8f84e3" + integrity sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg== + dependencies: + "@typescript-eslint/types" "6.10.0" + eslint-visitor-keys "^3.4.1" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -1113,6 +1573,11 @@ abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: module-error "^1.0.1" queue-microtask "^1.2.3" +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" @@ -1123,6 +1588,11 @@ acorn@^8.4.1: resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== +acorn@^8.9.0: + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== + adm-zip@^0.4.16: version "0.4.16" resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" @@ -1148,12 +1618,22 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-colors@^4.1.1: +ansi-colors@^4.1.1, ansi-colors@^4.1.3: version "4.1.3" resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== @@ -1165,11 +1645,23 @@ ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: dependencies: type-fest "^0.21.3" +ansi-escapes@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" + integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== + dependencies: + type-fest "^1.0.2" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -1184,11 +1676,21 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.0, ansi-styles@^4.3.0: dependencies: color-convert "^2.0.1" +ansi-styles@^6.0.0, ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + any-promise@^1.0.0: version "1.3.0" resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -1219,11 +1721,79 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-string "^1.0.7" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.findlastindex@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" + +array.prototype.flat@^1.2.3, array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + async-eventemitter@^0.2.4: version "0.2.4" resolved "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" @@ -1287,6 +1857,18 @@ bech32@1.1.4: resolved "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +better-path-resolve@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/better-path-resolve/-/better-path-resolve-1.0.0.tgz#13a35a1104cdd48a7b74bf8758f96a1ee613f99d" + integrity sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g== + dependencies: + is-windows "^1.0.0" + +big-integer@^1.6.44: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + bigint-crypto-utils@^3.0.23: version "3.3.0" resolved "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" @@ -1322,6 +1904,13 @@ bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +bplist-parser@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== + dependencies: + big-integer "^1.6.44" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1344,6 +1933,13 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" +breakword@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/breakword/-/breakword-1.0.6.tgz#242506e7b871b7fad1bce8dc05cb0f2a129c12bd" + integrity sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw== + dependencies: + wcwidth "^1.0.1" + brorand@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -1417,6 +2013,13 @@ bufferutil@^4.0.1: dependencies: node-gyp-build "^4.3.0" +bundle-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" + integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== + dependencies: + run-applescript "^5.0.0" + bundle-require@^4.0.0: version "4.0.2" resolved "https://registry.npmjs.org/bundle-require/-/bundle-require-4.0.2.tgz#65fc74ff14eabbba36d26c9a6161bd78fff6b29e" @@ -1442,6 +2045,34 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + camelcase@^6.0.0: version "6.3.0" resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" @@ -1460,7 +2091,7 @@ catering@^2.1.0, catering@^2.1.1: resolved "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== -chalk@4.1.2, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: +chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1468,15 +2099,25 @@ chalk@4.1.2, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^2.4.2: +chalk@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + +chalk@^2.1.0, chalk@^2.4.2: version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.1, chokidar@^3.5.2: version "3.5.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -1497,6 +2138,11 @@ ci-info@^2.0.0: resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +ci-info@^3.1.0, ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -1528,6 +2174,13 @@ clean-stack@^3.0.0, clean-stack@^3.0.1: dependencies: escape-string-regexp "4.0.0" +cli-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== + dependencies: + restore-cursor "^4.0.0" + cli-progress@^3.10.0: version "3.12.0" resolved "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" @@ -1535,6 +2188,14 @@ cli-progress@^3.10.0: dependencies: string-width "^4.2.3" +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + cli-ux@^6.0.9: version "6.0.9" resolved "https://registry.npmjs.org/cli-ux/-/cli-ux-6.0.9.tgz#b5ab690314348b45b2c7458dad7621ae1be7c61d" @@ -1566,6 +2227,15 @@ cli-ux@^6.0.9: supports-hyperlinks "^2.1.0" tslib "^2.0.0" +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -1575,6 +2245,20 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1599,6 +2283,11 @@ color-name@~1.1.4: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -1611,6 +2300,11 @@ command-exists@^1.2.8: resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== +commander@11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + commander@3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" @@ -1671,15 +2365,49 @@ cross-fetch@^4.0.0: dependencies: node-fetch "^2.6.12" -cross-spawn@^7.0.3: +cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" +csv-generate@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-3.4.3.tgz#bc42d943b45aea52afa896874291da4b9108ffff" + integrity sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw== + +csv-parse@^4.16.3: + version "4.16.3" + resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7" + integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== + +csv-stringify@^5.6.5: + version "5.6.5" + resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.6.5.tgz#c6d74badda4b49a79bf4e72f91cce1e33b94de00" + integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A== + +csv@^5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/csv/-/csv-5.5.3.tgz#cd26c1e45eae00ce6a9b7b27dcb94955ec95207d" + integrity sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g== + dependencies: + csv-generate "^3.4.3" + csv-parse "^4.16.3" + csv-stringify "^5.6.5" + stream-transform "^2.1.3" + d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -1702,11 +2430,84 @@ debug@^2.2.0: dependencies: ms "2.0.0" +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize-keys@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + decamelize@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +default-browser-id@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" + integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== + dependencies: + bplist-parser "^0.2.0" + untildify "^4.0.0" + +default-browser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" + integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== + dependencies: + bundle-name "^3.0.0" + default-browser-id "^3.0.0" + execa "^7.1.1" + titleize "^3.0.0" + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1717,6 +2518,11 @@ depd@2.0.0: resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +detect-indent@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + diff@5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" @@ -1734,11 +2540,30 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + dotenv@^16.0.3: version "16.3.1" resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ejs@^3.1.6: version "3.1.9" resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" @@ -1764,6 +2589,11 @@ emoji-regex@^8.0.0: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + encode-utf8@^1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" @@ -1782,6 +2612,83 @@ env-paths@^2.2.0: resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + +es-set-tostringtag@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + dependencies: + get-intrinsic "^1.2.2" + has-tostringtag "^1.0.0" + hasown "^2.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + es5-ext@^0.10.35, es5-ext@^0.10.50: version "0.10.62" resolved "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" @@ -1846,9 +2753,9 @@ escalade@^3.1.1: resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-string-regexp@4.0.0: +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escape-string-regexp@^1.0.5: @@ -1856,25 +2763,229 @@ escape-string-regexp@^1.0.5: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -esprima@^4.0.0, esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +eslint-config-prettier@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" + integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== -ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== +eslint-config-standard@^17.1.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975" + integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: - js-sha3 "^0.8.0" + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" -ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" - integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== +eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: - "@types/pbkdf2" "^3.0.0" - "@types/secp256k1" "^4.0.1" + debug "^3.2.7" + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@^2.24.2: + version "2.29.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" + integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== + dependencies: + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.14.2" + +eslint-plugin-mocha@10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-10.2.0.tgz#15b05ce5be4b332bb0d76826ec1c5ebf67102ad6" + integrity sha512-ZhdxzSZnd1P9LqDPF0DBcFLpRIGdh1zkF2JHnQklKQOvrQtT73kdP5K9V2mzvbLR+cCAO9OI48NXK/Ax9/ciCQ== + dependencies: + eslint-utils "^3.0.0" + rambda "^7.4.0" + +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-prettier@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz#a3b399f04378f79f066379f544e42d6b73f11515" + integrity sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.8.5" + +eslint-plugin-promise@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" + integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.53.0: + version "8.53.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.53.0.tgz#14f2c8244298fcae1f46945459577413ba2697ce" + integrity sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.3" + "@eslint/js" "8.53.0" + "@humanwhocodes/config-array" "^0.11.13" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^4.0.0, esprima@~4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +ethereum-bloom-filters@^1.0.6: + version "1.0.10" + resolved "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + dependencies: + js-sha3 "^0.8.0" + +ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" blakejs "^1.1.0" browserify-aes "^1.2.0" bs58check "^2.1.2" @@ -2003,6 +3114,11 @@ eventemitter3@4.0.4: resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -2011,6 +3127,21 @@ evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +execa@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + execa@^5.0.0: version "5.1.1" resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -2026,6 +3157,21 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + ext@^1.1.2: version "1.7.0" resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" @@ -2033,11 +3179,35 @@ ext@^1.1.2: dependencies: type "^2.7.2" +extendable-error@^0.1.5: + version "0.1.7" + resolved "https://registry.yarnpkg.com/extendable-error/-/extendable-error-0.1.7.tgz#60b9adf206264ac920058a7395685ae4670c2b96" + integrity sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg== + +external-editor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + extract-stack@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/extract-stack/-/extract-stack-2.0.0.tgz#11367bc865bfcd9bc0db3123e5edb57786f11f9b" integrity sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ== +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + fast-glob@^3.2.9: version "3.3.1" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" @@ -2049,6 +3219,27 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + fastq@^1.6.0: version "1.15.0" resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" @@ -2056,6 +3247,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + filelist@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" @@ -2070,9 +3268,9 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-up@5.0.0: +find-up@5.0.0, find-up@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -2085,11 +3283,41 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-yarn-workspace-root2@1.2.16: + version "1.2.16" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz#60287009dd2f324f59646bdb4b7610a6b301c2a9" + integrity sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA== + dependencies: + micromatch "^4.0.2" + pkg-dir "^4.2.0" + +flat-cache@^3.0.4: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" + integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + flat@^5.0.2: version "5.0.2" resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== +flatted@^3.2.9: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + fmix@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" @@ -2157,9 +3385,9 @@ fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.1: +fs-extra@^8.1, fs-extra@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" @@ -2186,17 +3414,32 @@ fsevents@~2.3.2: resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: +function-bind@^1.1.1, function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== -get-caller-file@^2.0.5: +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -2211,16 +3454,39 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: has-proto "^1.0.1" has-symbols "^1.0.3" +get-intrinsic@^1.1.1, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^6.0.0: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -2228,6 +3494,13 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob@7.1.6: version "7.1.6" resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -2264,9 +3537,23 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -globby@^11.0.3, globby@^11.1.0: +globals@^13.19.0: + version "13.23.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" + integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.0.0, globby@^11.0.3, globby@^11.1.0: version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -2283,11 +3570,26 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: +graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + hardhat-deploy@^0.11.22: version "0.11.43" resolved "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.43.tgz#b22ff15b3ea201b72ba0f17f4b2e182cc950e73e" @@ -2374,6 +3676,11 @@ hardhat@2.12.5: uuid "^8.3.2" ws "^7.4.6" +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -2384,6 +3691,13 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + has-proto@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" @@ -2423,6 +3737,13 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + he@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -2437,6 +3758,11 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -2461,19 +3787,39 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +human-id@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/human-id/-/human-id-1.0.2.tgz#e654d4b2b0d8b07e45da9f6020d8af17ec0a5df3" + integrity sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw== + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + +husky@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== + hyperlinker@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== -iconv-lite@0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" @@ -2483,7 +3829,7 @@ ieee754@^1.2.1: resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.2.0: +ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -2493,11 +3839,24 @@ immutable@^4.0.0-rc.12: resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + imul@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + indent-string@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -2516,6 +3875,15 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +internal-slot@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== + dependencies: + get-intrinsic "^1.2.2" + hasown "^2.0.0" + side-channel "^1.0.4" + io-ts@1.10.4: version "1.10.4" resolved "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" @@ -2531,6 +3899,27 @@ is-arguments@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -2538,21 +3927,55 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-buffer@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.3: +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== +is-ci@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== + dependencies: + ci-info "^3.2.0" + +is-core-module@^2.13.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + is-docker@^2.0.0: version "2.2.1" resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -2563,6 +3986,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" @@ -2570,7 +3998,7 @@ is-generator-function@^1.0.7: dependencies: has-tostringtag "^1.0.0" -is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -2582,24 +4010,94 @@ is-hex-prefixed@1.0.0: resolved "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-typed-array@^1.1.3: +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-subdir@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-subdir/-/is-subdir-1.2.0.tgz#b791cd28fab5202e91a08280d51d9d7254fd20d4" + integrity sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw== + dependencies: + better-path-resolve "1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9: version "1.1.12" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== dependencies: which-typed-array "^1.1.11" @@ -2614,6 +4112,18 @@ is-unicode-supported@^0.1.0: resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-windows@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" @@ -2621,6 +4131,11 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -2646,21 +4161,53 @@ js-sha3@0.8.0, js-sha3@^0.8.0: resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== -js-yaml@4.1.0: +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" -js-yaml@^3.13.1, js-yaml@^3.14.1: +js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.14.1, js-yaml@^3.6.1: version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -2693,6 +4240,18 @@ keccak@^3.0.0, keccak@^3.0.2: node-gyp-build "^4.2.0" readable-stream "^3.6.0" +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + klaw@^1.0.0: version "1.3.1" resolved "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -2700,6 +4259,11 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" +kleur@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + level-supports@^4.0.0: version "4.0.1" resolved "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" @@ -2721,9 +4285,17 @@ level@^8.0.0: browser-level "^1.0.1" classic-level "^1.2.0" -lilconfig@^2.0.5: +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lilconfig@2.1.0, lilconfig@^2.0.5: version "2.1.0" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== lines-and-columns@^1.1.6: @@ -2731,11 +4303,49 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +lint-staged@^15.0.1: + version "15.0.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.0.2.tgz#abef713182ec2770143e40a5d6d0130fe61ed442" + integrity sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw== + dependencies: + chalk "5.3.0" + commander "11.1.0" + debug "4.3.4" + execa "8.0.1" + lilconfig "2.1.0" + listr2 "7.0.2" + micromatch "4.0.5" + pidtree "0.6.0" + string-argv "0.3.2" + yaml "2.3.3" + +listr2@7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-7.0.2.tgz#3aa3e1549dfaf3c57ab5eeaba754da3b87f33063" + integrity sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^5.0.1" + rfdc "^1.3.0" + wrap-ansi "^8.1.0" + load-tsconfig@^0.2.3: version "0.2.5" resolved "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz#453b8cd8961bfb912dea77eb6c168fe8cca3d3a1" integrity sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg== +load-yaml-file@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/load-yaml-file/-/load-yaml-file-0.2.0.tgz#af854edaf2bea89346c07549122753c07372f64d" + integrity sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw== + dependencies: + graceful-fs "^4.1.5" + js-yaml "^3.13.0" + pify "^4.0.1" + strip-bom "^3.0.0" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -2744,6 +4354,13 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -2751,11 +4368,21 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== +lodash.startcase@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" + integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== + lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -2769,6 +4396,25 @@ log-symbols@4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" +log-update@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" + integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== + dependencies: + ansi-escapes "^5.0.0" + cli-cursor "^4.0.0" + slice-ansi "^5.0.0" + strip-ansi "^7.0.1" + wrap-ansi "^8.0.1" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -2793,6 +4439,16 @@ make-error@^1.1.1: resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + match-all@^1.2.6: version "1.2.6" resolved "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" @@ -2826,6 +4482,23 @@ memorystream@^0.3.1: resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== +meow@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467" + integrity sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "^4.0.2" + normalize-package-data "^2.5.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.13.1" + yargs-parser "^18.1.3" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -2841,9 +4514,9 @@ micro-ftch@^0.3.1: resolved "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== -micromatch@^4.0.4: +micromatch@4.0.5, micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -2866,6 +4539,16 @@ mimic-fn@^2.1.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -2883,7 +4566,7 @@ minimatch@5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -2897,6 +4580,25 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" +minimist-options@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mixme@^0.5.1: + version "0.5.9" + resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.9.tgz#a5a58e17354632179ff3ce5b0fc130899c8ba81c" + integrity sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw== + mnemonist@^0.38.0: version "0.38.5" resolved "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" @@ -2946,9 +4648,9 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3: +ms@2.1.3, ms@^2.1.1: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== murmur-128@^0.2.1: @@ -2979,6 +4681,11 @@ napi-macros@^2.2.2: resolved "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + natural-orderby@^2.0.1, natural-orderby@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016" @@ -3006,6 +4713,16 @@ node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -3018,6 +4735,13 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + number-to-bn@1.7.0: version "1.7.0" resolved "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" @@ -3031,16 +4755,64 @@ object-assign@^4.0.1: resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + object-inspect@^1.9.0: version "1.13.0" resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.0.tgz#42695d3879e1cd5bda6df5062164d80c996e23e2" integrity sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g== +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + object-treeify@^1.1.33, object-treeify@^1.1.4: version "1.1.33" resolved "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz#f06fece986830a3cba78ddd32d4c11d1f76cdf40" integrity sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A== +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +object.groupby@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + +object.values@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + obliterator@^2.0.0: version "2.0.4" resolved "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" @@ -3060,18 +4832,59 @@ once@^1.3.0: dependencies: wrappy "1" -onetime@^5.1.2: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +open@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" + integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== + dependencies: + default-browser "^4.0.0" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^2.2.0" + +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +outdent@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff" + integrity sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q== + +p-filter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" + integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw== + dependencies: + p-map "^2.0.0" + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -3079,6 +4892,13 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -3093,6 +4913,13 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-locate@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -3100,6 +4927,11 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + p-map@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -3112,6 +4944,28 @@ p-try@^1.0.0: resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + password-prompt@^1.1.2: version "1.1.3" resolved "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz#05e539f4e7ca4d6c865d479313f10eb9db63ee5f" @@ -3140,9 +4994,14 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-type@^4.0.0: @@ -3161,16 +5020,38 @@ pbkdf2@^3.0.17: safe-buffer "^5.0.1" sha.js "^2.4.8" +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pidtree@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + pirates@^4.0.1: version "4.0.6" resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + postcss-load-config@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" @@ -3179,6 +5060,52 @@ postcss-load-config@^4.0.1: lilconfig "^2.0.5" yaml "^2.1.1" +preferred-pm@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.1.2.tgz#aedb70550734a574dffcbf2ce82642bd1753bdd6" + integrity sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q== + dependencies: + find-up "^5.0.0" + find-yarn-workspace-root2 "1.2.16" + path-exists "^4.0.0" + which-pm "2.0.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier-plugin-solidity@^1.0.0-beta.18: + version "1.2.0" + resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.2.0.tgz#dc620b4fc7708a60687a87cdc803e57a1856b6fd" + integrity sha512-fgxcUZpVAP+LlRfy5JI5oaAkXGkmsje2VJ5krv/YMm+rcTZbIUwFguSw5f+WFuttMjpDm6wB4UL7WVkArEfiVA== + dependencies: + "@solidity-parser/parser" "^0.16.2" + semver "^7.5.4" + solidity-comments-extractor "^0.0.7" + +prettier@^2.7.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +prettier@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" + integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + punycode@^2.1.0: version "2.3.0" resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" @@ -3196,6 +5123,16 @@ queue-microtask@^1.2.2, queue-microtask@^1.2.3: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +rambda@^7.4.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/rambda/-/rambda-7.5.0.tgz#1865044c59bc0b16f63026c6e5a97e4b1bbe98fe" + integrity sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA== + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -3213,6 +5150,35 @@ raw-body@^2.4.1: iconv-lite "0.4.24" unpipe "1.0.0" +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read-yaml-file@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-yaml-file/-/read-yaml-file-1.1.0.tgz#9362bbcbdc77007cc8ea4519fe1c0b821a7ce0d8" + integrity sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA== + dependencies: + graceful-fs "^4.1.5" + js-yaml "^3.6.1" + pify "^4.0.1" + strip-bom "^3.0.0" + readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" @@ -3229,6 +5195,14 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + redeyed@~2.1.0: version "2.1.1" resolved "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" @@ -3236,6 +5210,25 @@ redeyed@~2.1.0: dependencies: esprima "~4.0.0" +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + +regexpp@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -3243,9 +5236,19 @@ require-directory@^2.1.1: require-from-string@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" @@ -3258,11 +5261,33 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + rimraf@^2.2.8: version "2.7.1" resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -3270,6 +5295,13 @@ rimraf@^2.2.8: dependencies: glob "^7.1.3" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -3292,6 +5324,13 @@ rollup@^3.2.5: optionalDependencies: fsevents "~2.3.2" +run-applescript@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" + integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== + dependencies: + execa "^5.0.0" + run-parallel-limit@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" @@ -3311,11 +5350,30 @@ rustbn.js@~0.2.0: resolved "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -3335,19 +5393,19 @@ secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -semver@^5.5.0: +"semver@2 || 3 || 4 || 5", semver@^5.5.0: version "5.7.2" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.3.0: +semver@^6.1.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: +semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" @@ -3359,6 +5417,30 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -3377,6 +5459,13 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -3384,6 +5473,11 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" @@ -3398,16 +5492,41 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.3: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + slash@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +smartwrap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/smartwrap/-/smartwrap-2.0.2.tgz#7e25d3dd58b51c6ca4aba3a9e391650ea62698a4" + integrity sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA== + dependencies: + array.prototype.flat "^1.2.3" + breakword "^1.0.5" + grapheme-splitter "^1.0.4" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + yargs "^15.1.0" + solc@0.7.3: version "0.7.3" resolved "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" @@ -3423,6 +5542,11 @@ solc@0.7.3: semver "^5.5.0" tmp "0.0.33" +solidity-comments-extractor@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19" + integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw== + source-map-support@^0.5.13: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -3443,6 +5567,40 @@ source-map@^0.6.0: resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +spawndamnit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/spawndamnit/-/spawndamnit-2.0.0.tgz#9f762ac5c3476abb994b42ad592b5ad22bb4b0ad" + integrity sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA== + dependencies: + cross-spawn "^5.1.0" + signal-exit "^3.0.2" + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.16" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" + integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -3460,6 +5618,18 @@ statuses@2.0.1: resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +stream-transform@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-2.1.3.tgz#a1c3ecd72ddbf500aa8d342b0b9df38f5aa598e3" + integrity sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ== + dependencies: + mixme "^0.5.1" + +string-argv@0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -3469,6 +5639,42 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.0, string-width@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -3483,11 +5689,28 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-hex-prefix@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" @@ -3495,9 +5718,16 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" -strip-json-comments@3.1.1: +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@3.1.1, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== sucrase@^3.20.3: @@ -3542,6 +5772,29 @@ supports-hyperlinks@^2.1.0, supports-hyperlinks@^2.2.0: has-flag "^4.0.0" supports-color "^7.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +synckit@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" + integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== + dependencies: + "@pkgr/utils" "^2.3.1" + tslib "^2.5.0" + +term-size@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" @@ -3561,9 +5814,14 @@ tiny-invariant@^1.3.1: resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== -tmp@0.0.33: +titleize@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" + integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== + +tmp@0.0.33, tmp@^0.0.33: version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" @@ -3597,6 +5855,16 @@ tree-kill@^1.2.2: resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + ts-interface-checker@^0.1.9: version "0.1.13" resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" @@ -3621,12 +5889,22 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" +tsconfig-paths@^3.14.2: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@^1.9.3: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.4.1: +tslib@^2.0.0, tslib@^2.4.1, tslib@^2.5.0, tslib@^2.6.0: version "2.6.2" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -3656,6 +5934,61 @@ tsup@^7.2.0: sucrase "^3.20.3" tree-kill "^1.2.2" +tty-table@^4.1.5: + version "4.2.3" + resolved "https://registry.yarnpkg.com/tty-table/-/tty-table-4.2.3.tgz#e33eb4007a0a9c976c97c37fa13ba66329a5c515" + integrity sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA== + dependencies: + chalk "^4.1.2" + csv "^5.5.3" + kleur "^4.1.5" + smartwrap "^2.0.2" + strip-ansi "^6.0.1" + wcwidth "^1.0.1" + yargs "^17.7.1" + +turbo-darwin-64@1.5.6: + version "1.5.6" + resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-1.5.6.tgz#2e0e14343c84dde33b5a09ea5389ee6a9565779c" + integrity sha512-CWdXMwenBS2+QXIR2Czx7JPnAcoMzWx/QwTDcHVxZyeayMHgz8Oq5AHCtfaHDSfV8YhD3xa0GLSk6+cFt+W8BQ== + +turbo-darwin-arm64@1.5.6: + version "1.5.6" + resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-1.5.6.tgz#bed2bba126d53d7bbfd45f95e239fc43fd5bccbf" + integrity sha512-c/aXgW9JuXT2bJSKf01pdSDQKnrdcdj3WFKmKiVldb9We6eqFzI0fLHBK97k5LM/OesmRMfCMQ2Cv2DU8RqBAA== + +turbo-linux-64@1.5.6: + version "1.5.6" + resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-1.5.6.tgz#e7ddaf7a87084dfdd9c6d79efb41084d75439b31" + integrity sha512-y/jNF7SG+XJEwk2GxIqy3g4dj/a0PgZKDGyOkp24qp4KBRcHBl6dI1ZEfNed30EhEqmW4F5Dr7IpeCZoqgbrMg== + +turbo-linux-arm64@1.5.6: + version "1.5.6" + resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-1.5.6.tgz#6445f00f84e0f356a6a369ba2d75ede43aaeb796" + integrity sha512-FRcxPtW7eFrbR3QaYBVX8cK7i+2Cerqi6F0t5ulcq+d1OGSdSW3l35rPPyJdwCzCy+k/S9sBcyCV0RtbS6RKCQ== + +turbo-windows-64@1.5.6: + version "1.5.6" + resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-1.5.6.tgz#3638d5297319157031e4dc906dbae53a1db8562c" + integrity sha512-/5KIExY7zbrbeL5fhKGuO85u5VtJ3Ue4kI0MbYCNnTGe7a10yTYkwswgtGihsgEF4AW0Nm0159aHmXZS2Le8IA== + +turbo-windows-arm64@1.5.6: + version "1.5.6" + resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-1.5.6.tgz#9eff9d13721be0b905b0aad07667507380f738fe" + integrity sha512-p+LQN9O39+rZuOAyc6BzyVGvdEKo+v+XmtdeyZsZpfj4xuOLtsEptW1w6cUD439u0YcPknuccGq1MQ0lXQ6Xuw== + +turbo@1.5.6: + version "1.5.6" + resolved "https://registry.yarnpkg.com/turbo/-/turbo-1.5.6.tgz#7dac8db14b2452afa45c57c050ff19989d4ab074" + integrity sha512-xJO/fhiMo4lI62iGR9OgUfJTC9tnnuoMwNC52IfvvBDEPlA8RWGMS8SFpDVG9bNCXvVRrtUTNJXMe6pJWBiOTA== + optionalDependencies: + turbo-darwin-64 "1.5.6" + turbo-darwin-arm64 "1.5.6" + turbo-linux-64 "1.5.6" + turbo-linux-arm64 "1.5.6" + turbo-windows-64 "1.5.6" + turbo-windows-arm64 "1.5.6" + tweetnacl-util@^0.15.1: version "0.15.1" resolved "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" @@ -3666,16 +5999,48 @@ tweetnacl@^1.0.3: resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + type-fest@^0.7.1: version "0.7.1" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-fest@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + type@^1.0.1: version "1.2.0" resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" @@ -3686,6 +6051,45 @@ type@^2.7.2: resolved "https://registry.npmjs.org/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -3693,16 +6097,31 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^4.9.4: - version "4.9.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" undici-types@~5.25.1: version "5.25.3" resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz#e044115914c85f0bcbb229f346ab739f064998c3" integrity sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + undici@^5.4.0: version "5.26.3" resolved "https://registry.npmjs.org/undici/-/undici-5.26.3.tgz#ab3527b3d5bb25b12f898dfd22165d472dd71b79" @@ -3725,6 +6144,18 @@ unpipe@1.0.0: resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + utf-8-validate@^5.0.2: version "5.0.10" resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" @@ -3763,6 +6194,21 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + web3-core-helpers@1.10.2: version "1.10.2" resolved "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.2.tgz#bd47686c0e74ef4475713c581f9306a035ce8a74" @@ -3909,6 +6355,30 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + 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-module@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + +which-pm@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-pm/-/which-pm-2.0.0.tgz#8245609ecfe64bf751d0eef2f376d83bf1ddb7ae" + integrity sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w== + dependencies: + load-yaml-file "^0.2.0" + path-exists "^4.0.0" + which-typed-array@^1.1.11, which-typed-array@^1.1.2: version "1.1.11" resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" @@ -3920,6 +6390,24 @@ which-typed-array@^1.1.11, which-typed-array@^1.1.2: gopd "^1.0.1" has-tostringtag "^1.0.0" +which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.4" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + which@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -3939,6 +6427,15 @@ workerpool@6.2.1: resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -3948,6 +6445,15 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -3963,6 +6469,11 @@ ws@^7.4.6: resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + y18n@^5.0.5: version "5.0.8" resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -3973,6 +6484,11 @@ yaeti@^0.0.6: resolved "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + yallist@^3.0.2: version "3.1.1" resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" @@ -3983,9 +6499,9 @@ yallist@^4.0.0: resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^2.1.1: +yaml@2.3.3, yaml@^2.1.1: version "2.3.3" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz#01f6d18ef036446340007db8e016810e5d64aad9" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.3.tgz#01f6d18ef036446340007db8e016810e5d64aad9" integrity sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ== yargs-parser@20.2.4: @@ -3993,11 +6509,24 @@ yargs-parser@20.2.4: resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== +yargs-parser@^18.1.2, yargs-parser@^18.1.3: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + yargs-unparser@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" @@ -4021,6 +6550,36 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^15.1.0: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + 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" + +yargs@^17.7.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yn@3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"